JavaScript - достаточно ли фильтрации "<" для защиты HTML перед отображением?
Есть ли в JavaScript какая-либо известная строка, которая может причинить вред, если мы отфильтруем все символы "меньше" ("<"), а затем отобразим результат в виде HTML?
var str = GetDangerousString().toString();
var secure = str.replace(/</g, '');
$('#safe').html(secure); // or
document.getElementById('safe').innerHTML = secure;
Этот вопрос, в частности, касается очистки идентификаторов. Я ищу общую строку HTML. Идеальный ответ - это самый простой рабочий пример строки, которая внедрит код или другие потенциально опасные элементы.
1 ответ
Этого точно не достаточно... Вам нужно кодировать HTML-код, который вы вставляете на свои страницы, и который вы хотите редактировать конечному пользователю. В противном случае вам нужно продезинфицировать его.
Вы можете узнать больше здесь на сайте Owasp
РЕДАКТИРОВАТЬ: В ответ на ваш комментарий, я не уверен на 100%. Похоже, двойное кодирование поможет вам в некоторых случаях, если вы не будете осторожны.
https://www.owasp.org/index.php/Double_Encoding
Например, эта строка с этой страницы должна демонстрировать эксплойт, который скрывает символ "<":
%253Cscript%253Ealert('XSS')%253C%252Fscript%253E
Кроме того, символ "<" может быть закодирован множеством различных способов в HTML, как показано в этой таблице:
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
Так что для меня это то, что нужно быть осторожным - тот факт, что могут быть случаи, которые можно использовать, которые трудно понять, но могут оставить вас открытым.
Но вернемся к исходному вопросу - не могли бы вы привести пример HTML-кода, который отображается как HTML-код без символа "<"? Я пытаюсь понять, какой HTML вы хотите, чтобы пользователи могли использовать, который был бы в "id".
Кроме того, если ваш сайт небольшой, и вы готовы переписать его части (особенно то, как вы используете javascript на своих страницах), то вы можете рассмотреть возможность использования политик безопасности контента для защиты ваших пользователей от XSS. Это работает в большинстве современных браузеров и защитит множество ваших пользователей от атак XSS, если вы предпримете этот шаг.