Подтвердить что ты не робот

Предотвращение XSS в Node.js/стороне сервера javascript

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

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

Любые предложения?

4b9b3361

Ответ 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 находились на одной странице, публикуются файлы блокировки.

Ответ 3

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

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

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

function htmlEscape(text) {
   return text.replace(/&/g, '&').
     replace(/</g, '&lt;').  // it not neccessary to escape >
     replace(/"/g, '&quot;').
     replace(/'/g, '&#039;');
}

Ответ 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

Ответ 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