Предотвращение XSS в узле.с JS / JavaScript на стороне сервера
любая идея, как можно было бы предотвратить атаки XSS на узел.js app? Любые библиотеки, которые обрабатывают удаление javascript в hrefs,атрибутах onclick и т. д. из опубликованных данных?
Я не хочу написать регулярное выражение для всего этого :)
какие предложения?
7 ответов:
один из ответов санировать / переписывать HTML на стороне клиента предлагает заимствовать HTML-дезинфицирующее средство на основе белого списка в JS из Google Caja, которое, насколько я могу судить по быстрой прокрутке, реализует синтаксический анализатор HTML SAX, не полагаясь на DOM браузера.
обновление: кроме того, имейте в виду, что Caja sanitizer, по-видимому, получил полный профессиональный обзор безопасности, в то время как регулярные выражения известны тем, что их очень легко опечатать безопасность-компрометирующие способы.
обновление 2017-09-24: в настоящее время DOMPurify. Я еще не использовал его, но похоже, что он соответствует или превышает каждую точку, которую я ищу:
полагается на функциональность, предоставляемую средой выполнения, где это возможно. (Важно как для производительности, так и для максимальной безопасности, полагаясь на хорошо протестированные, зрелые реализации как можно больше.)
- опирается на либо DOM браузера, либо jsdom для узла.JS.
конфигурация по умолчанию предназначена для удаления как можно меньше, гарантируя при этом удаление javascript.
- поддерживает HTML, MathML и SVG
- возвращается к проприетарным, не настраиваемым Microsoft
toStaticHTML
под IE8 и IE9.настраиваемый, что делает его пригодным для применения ограничений на ввод, который может содержать произвольный HTML, например, поле комментария WYSIWYG или Markdown. (На самом деле, это верхняя часть кучи здесь)
- поддерживает обычный тег / атрибут белый список / черный список и URL regex белый список
- имеет специальные опции для дальнейшей очистки для некоторых распространенных типов метасимволов шаблонов HTML.
они серьезно относятся к совместимости и надежности
- автоматизированные тесты работает на 16 различных браузерах, а также три различных основных версии Node.JS.
- чтобы гарантировать, что разработчики и узлы CI находятся на одной странице, файлы блокировки публикуются.
Я создал модуль, который связывает Caja HTML дезинфицирующее средство
npm install sanitizer
http://github.com/theSmaw/Caja-HTML-Sanitizer
https://www.npmjs.com/package/sanitizer
любая обратная связь приветствуется.
все обычные методы применяются к узлу.вывод js также, что означает:
- черные списки не будут работать.
- вы не должны фильтровать вход для защиты вывода HTML. Он не будет работать или будет работать, напрасно искажая данные.
- вы должны HTML-escape текст в выводе HTML.
Я не уверен, если узел.js поставляется с некоторым встроенным для этого, но что-то вроде этого должно делать работу:
function htmlEscape(text) { return text.replace(/&/g, '&'). replace(/</g, '<'). // it's not neccessary to escape > replace(/"/g, '"'). replace(/'/g, '''); }
Я недавно обнаружил узел-валидатор by chriso.
пример
get('/', function (req, res) { //Sanitize user input req.sanitize('textarea').xss(); // No longer supported req.sanitize('foo').toBoolean(); });
функция XSS Deprecation
функция XSS больше не доступна в этой библиотеке.
вы также можете посмотреть ESAPI. Там есть javascript версия библиотеки. Он довольно крепкий.
в новой версии
validator
модуль вы можете использовать следующий скрипт для предотвращения атаки XSS:var validator = require('validator'); var escaped_string = validator.escape(someString);