2015-05-12 7 views
0

Приложение, которое я поддерживаю, проходит проверку безопасности, и есть некоторые вопросы, касающиеся экранирования специальных символов. Я не поддерживал это приложение в течение длительного времени, и я не очень хорошо разбираюсь в том, чтобы ускользать от специальных символов. Вопрос, заданный мной, - «Почему вы кодируете значение JavaScript, а затем кодируете его HTML? Является ли это значение выписанным в контексте, который требует кодирования значения для обоих контекстов?»Экранирование специальных символов в Java

В чем разница между используемой кодировкой JavaScript и кодировкой HTML? Зачем мне обоим в моем коде?

Любая информация об этом будет принята с благодарностью!

public class HTMLEncodedResultSet extends ResultSetWrapper { 

    public HTMLEncodedResultSet(ResultSet resultSet) { 
     super(resultSet); 
    } 

    public String getString(int columnIndex) throws SQLException { 
     return StringEscapeUtils.escapeHtml(StringEscapeUtils.escapeJavaScript(super.getString(columnIndex))); 
    } 

    public String getString(String columnName) throws SQLException { 
     return StringEscapeUtils.escapeHtml(StringEscapeUtils.escapeJavaScript(super.getString(columnName))); 
    } 

} 
+1

Java =/= JavaScript. Удален тег JS. – Cerbrus

+0

Прошу пояснить. Я не уверен, что понимаю, что вы имеете в виду. –

+0

Вы отметили этот вопрос с помощью «JavaScript». Этот вопрос касается не JavaScript, поэтому я удалил тег. – Cerbrus

ответ

0

Из официальной документации:

escapeHtml

экранирует символы в строке с использованием HTML сущности.

Например:

"хлеб" & "масло"

становится: " хлеб " & " масло ".

escapeJavaScript

экранирует символы в строку, используя правила JavaScript String.

Исключает любые значения, которые он находит в своей строковой форме JavaScript. Сделки правильно с кавычками и контрольными символами (вкладка, обратная косая черта, cr, ff и т. Д.)

Таким образом, вкладка становится символом '\' и 't'.

Пример:

входной строки: Он не сказал, "Стоп!" Выходная строка: Он не \ 'т сказать, \ „Стоп \!“

Таким образом, учитывая, что JS и HTML зарезервированные символы не совпадают, в вашем случае, если вход имеет HTML и JS код это может необходимо вызвать оба метода.

0

Похоже, что ваше приложение имеет фрагменты кода JavaScript, хранящиеся в базе данных. Эти фрагменты могут создавать или содержать части HTML (т. Е. Для генерации динамического HTML на основе взаимодействия). При загрузке этих фрагментов из БД в виде строки в Java требуется кодировка JavaScript и HTML.

Здесь приведен пример значения, которое может быть сохранено в БД.

var obj = $('#fire'); 
var fps = 200; 
var letters = obj.html().split(''); 
obj.empty(); 
$.each(letters,function(el){ 
    obj.append($('<span>'+this+'</span>')); 
}); 
var animateLetters = obj.find('span'); 
setInterval(function(){ 
    animateLetters.each(function(){ 
     $(this).css('fontSize', 80+(Math.floor(Math.random()*50)));   
    }); 
},fps); 

Обращаясь к документации:

escapeHTML: экранирует символы в строку, используя HTML сущности.

Например:

"хлеб" & "масло"

становится: &quot;bread&quot; &amp; &quot;butter&quot;.

и

escapeJavaScript: Игнорирует все значения, найденные в их JavaScript формы String. Правильно работает с котировками и контрольными символами (вкладка, обратная косая черта, cr, ff и т. Д.)

Таким образом, вкладка становится символом '\' и 't'.

Единственная разница между строками Java и строками JavaScript равна , что в JavaScript однократная кавычка должна быть экранирована.

Пример:

входной строки: Он не сказал, "Стоп!" Выходная строка: Он не сказал, \ "Стоп! \"

+0

Спасибо, что предоставили всю информацию! –

+0

возьмите [тур] (http://stackoverflow.com/tour) SO сначала и [примите ответ] (http://stackoverflow.com/help/accepted-answer), если это поможет вам –

Смежные вопросы