Защита от XSS при использовании TinyMCE - PullRequest
7 голосов
/ 28 июля 2011

Насколько я заметил, TinyMCE делает свое собственное экранирование метасимволов, а использование htmlspecialchars () впоследствии будет только загромождать вывод и показывать теги ивроде вместо рендеринга их в браузере.Легко отключить Javascript и ввести вредоносный код, который будет отображаться при посещении контента другим пользователем с включенным Javascript.

Поэтому мне нужно использовать правильную проверку на стороне сервера, но точно - Как - я могу сделать это правильно, учитывая тысячи техник XSS там?Есть ли эффективный способ, который работает для TinyMCE, такой как «использование htmlspecialchars () вместе с TinyMCE?»

До сих пор я составил белый список для разрешенных тегов HTML, замененлюбой javascript: и аналогичный :void в содержимом, чтобы попытаться защитить его от встроенного Javascript, например onClick="javascript:void(alert("XSS"));", но я чувствую, что этого недостаточно.

Любой совет по этому вопросу был бы очень признателен, ноПомните, что определенное содержимое должно быть правильно отображено на выходе , поэтому я в первую очередь использую TinyMCE.Мне нужно только защищаться от XSS.

Также пока на тему;как я могу защитить себя от CSS XSS, например style="background-image: url(XSS here);"?

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

HTMLPurifier - это одно решение для php: http://hp.jpsband.org/

0 голосов
/ 10 декабря 2012

Для .Net: http://msdn.microsoft.com/en-us/security/aa973814.aspx

Я также борюсь с огнем с помощью:

$(".userpost").children().off();

Это предотвращает использование существующего JavaScript-кода пользователями.Одно из самых больших неудобств для библиотеки Microsoft заключается в том, что она добавляет «x_» перед всеми классами.Что нормально, пока кто-то не отредактирует существующую запись и не добавит еще один x_.Я просто избавляюсь от x_ вместе с regex, так как приведенный выше код делает префикс "x_" бессмысленным.

Это удаляет "x_" для 3 классов в VB.Net:

Regex.Replace(myHtml, "(<\w+\b[^>]*?\b)(class="")x[_]([a-zA-Z]*)( )?(?:x[_])?([a-zA-Z]*)?( )?(?:x[_])?([^""]*"")", "$1$2$3$4$5$6$7")

Я уверен, что есть более чистый способ сделать это.

...