Кодирование JSON с помощью кодировщика ESAPI

Я закодировал JSON (используя кодировщик ESAPI) на стороне сервера. Затем клиент извлекает поля компонента и выполняет дальнейшую обработку.

На стороне сервера

JSONBean bean=new JSONBean();
//populate the bean
Gson gson=new Gson();
String jsonString = gson.toJson(bean);
String JSEscapedStr=ESAPI.encoder().encodeForJavaScript(jsonString);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(JSEscapedStr);

Закодированная строка JSON

\x7B\x22name\x22\x3A\x22Sameer\x22,\x22company\x22\x3A\x22Company\x22,\x22обозначение\x22\x3A\x22Developer\x22\x7D

На стороне клиента

   var JSONObj=JSON.parse(data);
    var name=JSONObj["name"];
    var company=JSONObj["company"];
    var designation=JSONObj["designation"];
    //process these variable in javascript

Я также пытался использовать response.setContentType("plain/text"); на стороне сервера тоже не работает.

Ошибка

SyntaxError: JSON.parse: непредвиденный символ в строке 1 столбца 1 данных JSON, когда тип содержимого «обычный/текст»

Если я жестко кодирую строку json, тогда она работает

            var jsonEncoded="\x7B\x22name\x22\x3A\x22Sameer\x22,\x22company\x22\x3A\x22Company\x22,\x22designation\x22\x3A\x22Developer\x22\x7D";
            var JSONObj=JSON.parse(jsonEncoded);
            console.log(JSONObj);
            var name=JSONObj["name"];
            var company=JSONObj["company"];
            var designation=JSONObj["designation"];
            console.log(name);
            console.log(company);
            console.log(designation);

person Sameer Sarmah    schedule 19.12.2014    source источник
comment
Получите прокси-инструмент, такой как расширение TamperData для Firefox, или получите копию ZAP-инструмента OWASP, перехватите ответ с сервера и добавьте его сюда.   -  person avgvstvs    schedule 19.12.2014
comment
Если вы ответили на свой вопрос, пожалуйста, опубликуйте ответ или предоставьте запрошенную информацию.   -  person avgvstvs    schedule 05.01.2015


Ответы (1)


  1. Вы должны кодировать только полезную нагрузку (что уже должно быть сделано самим Gson), а не все дерево JSon.
  2. ESAPI.encoder().encodeForJavaScript предназначен для кодирования параметров или аргументов функций для JavaScript-методов/функций.
person Helmut Gehrer    schedule 02.11.2016
comment
Однако encodeForJavaScript создает escape-символы, такие как \x2F, которые не нравятся валидаторам, и я также думаю, что это недопустимо в строках JSON, это должно быть / (как в Java). Это делает encodeForJavaScript непригодным для меня. Как мы можем решить эту проблему? - person marc82ch; 25.10.2017