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