Предотвращение XSS в узле.с JS / JavaScript на стороне сервера
любая идея, как можно было бы предотвратить атаки XSS на узел.приложение на JS? Любые библиотеки, которые обрабатывают удаление javascript в hrefs, onclick attributes и т. д. из опубликованных данных?
Я не хочу написать регулярное выражение для всего этого :)
какие предложения?
7 ответов
один из ответов дезинфицировать / переписать HTML на стороне клиента предлагает заимствовать HTML-дезинфицирующее средство на основе белого списка в JS из Google Caja, которое, насколько я могу судить по быстрой прокрутке, реализует синтаксический анализатор HTML SAX, не полагаясь на DOM браузера.
обновление: кроме того, имейте в виду, что дезинфицирующее средство Caja, по-видимому, было дано полный, профессиональный обзор безопасности, в то время как regexes известны тем, что очень легко опечатать в безопасность-компрометирующие способы.
обновление 2017-09-24: в настоящее время DOMPurify. Я еще не использовал его, но похоже, что он встречается или превышает каждую точку, которую я ищу:
-
полагается на функциональность, предоставляемую средой выполнения, где это возможно. (Важно как для производительности, так и для максимальной безопасности, максимально полагаясь на проверенные, зрелые реализации.)
- опирается на либо DOM браузера, либо jsdom для узла.JS.
-
конфигурация по умолчанию предназначена для полосы как можно меньше, гарантируя удаление javascript.
- поддержка HTML, MathML и SVG
- падает назад к собственническому, ООН-конфигурируемому Майкрософт
toStaticHTML
под IE8 и IE9.
-
настраиваемый, что делает его пригодным для применения ограничений на входные данные, которые могут содержать произвольный HTML, например поле комментария WYSIWYG или Markdown. (На самом деле, это верхняя часть кучи здесь)
- поддерживает обычный тег / атрибут белый список / черный список и URL regex белый список
- имеет специальные опции для дальнейшей очистки для некоторых распространенных типов метасимволов шаблонов HTML.
-
они серьезно относятся к совместимости и надежности
- автоматизированные тесты работает в 16 различных браузерах, а также в трех разных основных версиях Node.JS.
- чтобы убедиться, что разработчики и хосты CI находятся на одной странице, публикуются файлы блокировки.
Я создал модуль, который связывает Caja HTML Sanitizer
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
функция XSS больше не доступна в этой библиотеке.
вы также можете посмотреть ESAPI. Есть javascript версия библиотеки. Она довольно прочная.
в более новых версиях validator
module вы можете использовать следующий скрипт для предотвращения атаки XSS:
var validator = require('validator');
var escaped_string = validator.escape(someString);
попробуйте модуль npm strip-js
. Он выполняет следующие действия:
- санирует HTML-код
- удаляет теги скрипт
- удаляет атрибуты, такие как "onclick", "onerror" и т. д. которые содержат код JavaScript
- удаляет атрибуты "href", которые содержат код JavaScript