Предотвращение XSS в узле.с JS / JavaScript на стороне сервера


любая идея, как можно было бы предотвратить атаки XSS на узел.js app? Любые библиотеки, которые обрабатывают удаление javascript в hrefs,атрибутах onclick и т. д. из опубликованных данных?

Я не хочу написать регулярное выражение для всего этого :)

какие предложения?

7 58

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, '&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 Deprecation

функция XSS больше не доступна в этой библиотеке.

https://github.com/chriso/validator.js#deprecations

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

в новой версии validator модуль вы можете использовать следующий скрипт для предотвращения атаки 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