Предотвращение 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, '&lt;').  // it's not neccessary to escape >
     replace(/"/g, '&quot;').
     replace(/'/g, '&#039;');
}

Я недавно обнаружил узел-валидатор by 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


вы также можете посмотреть ESAPI. Есть javascript версия библиотеки. Она довольно прочная.


в более новых версиях validator module вы можете использовать следующий скрипт для предотвращения атаки XSS:

  var validator = require('validator');

  var escaped_string = validator.escape(someString);

попробуйте модуль npm strip-js. Он выполняет следующие действия:

  • санирует HTML-код
  • удаляет теги скрипт
  • удаляет атрибуты, такие как "onclick", "onerror" и т. д. которые содержат код JavaScript
  • удаляет атрибуты "href", которые содержат код JavaScript

https://www.npmjs.com/package/strip-js