специальные символы повреждены при отправке результата запроса на другую страницу php для отладки - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать скрипт, который получает запросы на вкладке сети и отправляет их на страницу отладки, запросы зашифрованы aes-128-cbc, но RAW не base64, поэтому существуют некоторые специальные символы, проблема в том, что специальные символы каким-то образом отправляются поврежденными на страницу отладки.

например: «Тест» (без кавычек) шифруется ключ test1234 и iv 1235569767556087 используя php код

openssl_encrypt("A test",'aes-128-cbc',"test1234",OPENSSL_RAW_DATA,"1235569767556087");

дал следующий результат: ) , AM9 ,

, который представлен в целочисленном массиве как [191,242,41,173,235,176,231,44,232,65,77,2,57,170,44,175]

когда зашифрованная строка отправляется на страницу отладки, она выглядит следующим образом

[239,191,189,239,191,189,41,239,191,189,239,191,189,239,191,189,44,239,191,189,65,77,2,57,239,191,189,44,239,191,189]

как вы можете заметить, каждый represented представлен 3 байтами (239,191,189) вместо действительного байта

Я использую Google Chrome, а код js выглядит следующим образом:

var SendDebugRequest = function(url,posted_data,callback){
var xhr = new XMLHttpRequest();
xhr.open('POST', "http://127.0.0.1/debug.php", true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
  var status = xhr.status;
  if (status === 200) {
    callback(null, xhr.response,xhr.responseURL);
  } else {
    callback(status, xhr.response,xhr.responseURL);
  }
};
xhr.send(posted_data);}
Promise.all(UI.panels.network._networkLogView._dataGrid._rootNode._flatNodes.map( function(node){
var temp = [];
temp[1] = node._request._requestHeaders;
node._request._requestFormDataPromise.then(function(data) { temp[0] =  data;});
node._request.contentData().then(function(data) { temp[2] = data.content;});
return temp;})).then(function(daata){
var posted_data = "encrypted_text=" + encodeURIComponent(daata[0][2]) + "&form_data=" + encodeURIComponent(daata[0][0]) ;
SendDebugRequest('',posted_data,function (status,response,resp_url){});});

Так есть ли идеи о том, как я могу решить эту проблему?

заранее спасибо

EDIT: как предложено в комментарии, я попытался использовать FormData вместо encodeURIComponent, но также дал тот же результат

я изменил

var posted_data = "encrypted_text=" + encodeURIComponent(daata[0][2]) + "&form_data=" + encodeURIComponent(daata[0][0]) ;
SendDebugRequest('',posted_data,function (status,response,resp_url){});});

до

var formData = new FormData();
var encrypted_text = new Blob([daata[0][2]], { type: "application/octet-stream"});
formData.append('encrypted_text', encrypted_text);
formData.append('form_data', daata[0][0]);
SendDebugRequest('',formData,function (status,response,resp_url){});

и убрал строку

xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

РЕДАКТИРОВАТЬ 2:

Проблема в том, что хром дает текстовый ответ вместо реального необработанного шестнадцатеричного ответа. Есть ли у вас какие-либо идеи о том, как мне этого добиться? поиск не дал результатов, я не против использовать расширение, пока я могу отправить данные на страницу отладки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...