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, если вы предпримете этот шаг.

Другие вопросы по тегам