Отключение JavaScript в определенном блоке / div (содержащий подозрительный HTML)? - PullRequest
2 голосов
/ 15 июня 2010

Можно ли каким-либо образом отключить выполнение сценариев в браузере внутри блока / раздела / элемента?

Мой сценарий состоит в том, что я разрешаю своим (будущим) пользователям создавать "богатый контент""(используя CK-редактор).Содержимое, которое позже будет показано другим пользователям - со всеми вытекающими отсюда опасностями: xss, перенаправление, кража личных данных, спам и что не так ...

Я более или менее разочаровался в попытках«очистить» входящий XHTML, увидев, сколько существует «векторов атаки»: http://ha.ckers.org/xss.html

Что я действительно ищу, это что-то вроде:

подозрительный HTML

Ответы [ 6 ]

3 голосов
/ 15 июня 2010

Идеальный способ - не принимать html / javascript от конечных пользователей.Если вы согласны с этим ограничением, вам просто нужно убедиться, что вы закодировали вывод в соответствии с соответствующим контекстом.Не изобретайте велосипед заново, просто используйте для этой цели существующую библиотеку.

Но если вы должны принять HTML, используйте библиотеку, подобную ANTI-SAMY или HTML OWASPочистителя .Они были построены именно для этой цели.

3 голосов
/ 15 июня 2010

Вы должны очистить ввод, нет способа выборочно отключить JavaScript, который я знаю.

Важно использовать белый список разрешенных тегов, а не черный список.Таким образом, можно сделать это безопасно.

1 голос
/ 25 января 2011

@ sri упомянул, где найти информацию о «песочнице html5 iframe», вот тестовый скрипт .

Вы должны увидеть, что «Браузер поддерживает атрибут песочницы iframe :)» - это то, что вы просматриваете в Chromium.

Может также принести положительные результаты в браузерах на основе khtml / webkit, таких как браузеры телефонов. В Opera 11, Firefox 3.6 и Firefox4 еще не реализован атрибут песочницы.

Статья, объясняющая фон и текущее состояние на gnubyexample.blogspot.com

1 голос
/ 15 июня 2010

Даже если вы использовали тег «noscript» или тег «textarea», его sill xss. Что мешает атакующему ввести закрывающие теги?

< div id="userContent">< scriptOFF>

<?=$_GET['xss']?>

< /scriptOFF>< /div>

Но это все еще xss:

http://localhost/xss.php?xss=< /scriptOFF>< /div> <script> alert(/still_xss/) </script>
1 голос
/ 15 июня 2010

Да, но этот "белый список" был бы ОГРОМНЫМ - и я далек от того, чтобы быть достаточно компетентным, чтобы обнаружить тонкие лазейки, как описано здесь:

Это должно быть "усилием сообщества" - если посмотреть на HTML-очиститель (http://htmlpurifier.org) сейчас ...

Я просто подумал, что было бы здорово иметь такой тег для предотвращения 99% "векторов" XSS

  • Может ли "кто-нибудь у власти" убедить создателей браузера реализовать это:)

Edit: Хорошо. HTML-очиститель это! - спасибо всем, что ответили:)

0 голосов
/ 03 января 2011

Нет, но опять же, вам определенно не следует разрешать своим пользователям вручную вводить код на страницу.

Не пытайтесь дезинфицировать Javascript;не разрешать Javascript.На самом деле, HTML вообще не разрешать.Напишите свой собственный ограниченный язык разметки (ala BBCode) или разрешите выбирать несколько тегов HTML, если вам действительно нужно.

т.е. будьте аддитивны, а не вычитайте в своих попытках безопасности.

...