Предотвращение XSS в Node.js / на стороне сервера javascript - PullRequest
64 голосов
/ 14 сентября 2010

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

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

Есть предложения?

Ответы [ 8 ]

55 голосов
/ 29 октября 2010

Я создал модуль, который включает в себя Caja HTML Sanitizer

npm install sanitizer

http://github.com/theSmaw/Caja-HTML-Sanitizer

https://www.npmjs.com/package/sanitizer

Любые отзывы приветствуются.

24 голосов
/ 14 сентября 2010

Один из ответов на Очистить / перезаписать HTML на стороне клиента предлагает позаимствовать средство очистки HTML на основе белого списка в JS у Google Caja, которое, насколько я могу судить по быстрой прокрутке, реализует анализатор HTML SAX без использования DOM браузера.

Обновление: Кроме того, имейте в виду, что дезинфицирующее средство Caja, по-видимому, было подвергнуто полному профессиональному анализу безопасности, в то время как регулярные выражения известны тем, что их очень легко опечатывать в угрозах безопасности.

Обновление 2017-09-24: Также есть DOMPurify . Я еще не использовал его, но похоже, что он соответствует или превосходит все, что я ищу:

  • Полагается на функциональность, предоставляемую средой выполнения, где это возможно. (Это важно как для производительности, так и для обеспечения максимальной безопасности, опираясь, насколько это возможно, на проверенные, зрелые реализации.)

    • Используется либо DOM браузера, либо jsdom для Node.JS.
  • Конфигурация по умолчанию, разработанная для минимального удаления, гарантируя при этом удаление javascript.

    • Поддерживает HTML, MathML и SVG
    • Возвращается к проприетарной, неконфигурируемой toStaticHTML Microsoft под IE8 и IE9.
  • Широкая конфигурация, что делает его пригодным для применения ограничений на ввод, который может содержать произвольный HTML, такой как поле комментариев WYSIWYG или Markdown. (На самом деле, это вершина кучи здесь)

    • Поддерживает обычный белый / черный список тегов / атрибутов и белый список регулярных выражений URL
    • Имеет специальные параметры для дальнейшей очистки для некоторых распространенных типов метасимволов HTML-шаблонов.
  • Они серьезно относятся к совместимости и надежности

    • Автоматизированные тесты, работающие в 16 различных браузерах, а также в трех основных версиях Node.JS.
    • Чтобы гарантировать, что разработчики и хосты CI находятся на одной странице, публикуются файлы блокировки.
16 голосов
/ 12 декабря 2010

Все обычные методы применимы и к выходу node.js, что означает:

  • Черные списки не будут работать.
  • Вы не должны фильтровать ввод для защитыHTML вывод.Это не будет работать или будет работать из-за ненужного искажения данных.
  • Вы должны экранировать текст HTML в выводе HTML.

Я не уверен, если node.jsпоставляется с некоторыми встроенными для этого, но что-то вроде этого должно сделать работу:

function htmlEscape(text) {
   return text.replace(/&/g, '&').
     replace(/</g, '&lt;').  // it's not neccessary to escape >
     replace(/"/g, '&quot;').
     replace(/'/g, '&#039;');
}
15 голосов
/ 24 декабря 2010

Я недавно обнаружил узел-валидатор от 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 голосов
/ 16 сентября 2010

Вы также можете посмотреть на ESAPI .Существует версия библиотеки javascript .Это довольно крепко.

3 голосов
/ 31 января 2014

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

  var validator = require('validator');

  var escaped_string = validator.escape(someString);
1 голос
/ 12 октября 2016

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

  • Дезинфицирует HTML
  • Удаляет теги сценария
  • Удаляет такие атрибуты, как "onclick", "onerror" и т. Д., Которые содержат код JavaScript
  • Удаляет атрибуты «href», содержащие код JavaScript

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

0 голосов
/ 31 декабря 2018

Вы должны попробовать библиотеку npm "insane".https://github.com/bevacqua/insane

Я пробую в производстве, все работает хорошо.Размер очень маленький (около 3kb в сжатом виде). ​​

  • Очистить HTML
  • Удалить все атрибуты или теги, которые оценивают js
  • Вы можете разрешить атрибуты или теги,не хочу дезинфицировать

Документацию очень легко читать и понимать.https://github.com/bevacqua/insane

...