Zapobieganie XSS w węźle.js / server side javascript

Jakiś pomysł, jak można zapobiegać atakom XSS na węzeł.aplikacja js? Wszelkie biblioteki, które zajmują się usuwaniem javascript w hrefs, atrybutach onclick itp. z zamieszczonych danych?

Nie chcę do tego wszystkiego pisać regex:)

Jakieś sugestie?

Author: Techwraith, 2010-09-14

7 answers

Jedna z odpowiedzi na Sanitize/Rewrite HTML po stronie klienta sugeruje zapożyczenie HTML sanitizer w js z Google Caja, który, o ile mogę powiedzieć z szybkiego przewijania, implementuje parser saksofonu HTML bez polegania na DOM przeglądarki.

Aktualizacja: należy również pamiętać, że Caja sanitizer najwyraźniej otrzymał pełny, profesjonalny przegląd bezpieczeństwa, podczas gdy wyrażenia regularne są znane z tego, że są bardzo łatwe do literowania w zagrożeniu bezpieczeństwa sposoby.

Aktualizacja 2017-09-24: Istnieje również teraz DOMPurify . Nie używałem go jeszcze, ale wygląda na to, że spełnia lub przekracza każdy punkt, którego szukam: {]}

  • Opiera się na funkcjonalności dostarczanej przez środowisko uruchomieniowe, o ile to możliwe. (Ważne zarówno dla wydajności, jak i maksymalizacji bezpieczeństwa, polegając na dobrze przetestowanych, dojrzałych implementacjach w jak największym stopniu.)

    • opiera się na Domie przeglądarki lub jsdom dla Węzeł.JS.
  • Domyślna konfiguracja zaprojektowana tak, aby usunąć jak najmniej javascript.

      Dzięki temu, że jest on w pełni kompatybilny z HTML, MathML i SVG]}
    • wraca do zastrzeżonego, nie konfigurowalnego toStaticHTML Microsoftu pod IE8 i IE9.
  • Wysoce konfigurowalny, dzięki czemu nadaje się do wymuszania ograniczeń na wejściu, które może zawierać dowolny HTML, taki jak WYSIWYG lub Markdown pole komentarza. (W rzeczywistości jest to szczyt stosu tutaj)

    • obsługuje zwykły tag / atrybut whitelisting / blacklisting i regex URL whitelisting
    • posiada specjalne opcje do dalszego dezynfekcji dla niektórych typowych metacharakterów szablonów HTML.
  • Poważnie podchodzą do kompatybilności i niezawodności]}
    • automatyczne testy działające na 16 różnych przeglądarkach, a także trzy różne główne wersje Node.JS.
    • aby zapewnić programistom i hostom CI wszystkie na tej samej stronie są publikowane pliki blokad.
 21
Author: ssokolow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-24 11:48:57

Stworzyłem moduł, który łączy Caja HTML Sanitizer

npm install sanitizer

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

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

Wszelkie opinie mile widziane.

 53
Author: theSmaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-22 16:21:58

Wszystkie zwykłe techniki mają zastosowanie do węzła.wyjście js również, co oznacza:

  • czarne listy nie będą działać.
  • nie powinieneś filtrować wejścia w celu ochrony wyjścia HTML. Nie będzie działać lub będzie działać niepotrzebnie zniekształcając dane.
  • powinieneś HTML-escape text w wyjściu HTML.

Nie jestem pewien, czy node.js ma do tego wbudowane, ale coś takiego powinno wystarczyć:

function htmlEscape(text) {
   return text.replace(/&/g, '&').
     replace(/</g, '&lt;').  // it's not neccessary to escape >
     replace(/"/g, '&quot;').
     replace(/'/g, '&#039;');
}
 16
Author: Kornel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-14 11:42:06

Niedawno odkryłem node-validatorprzez chriso.

Przykład

get('/', function (req, res) {

  //Sanitize user input
  req.sanitize('textarea').xss(); // No longer supported
  req.sanitize('foo').toBoolean();

});

Funkcja XSS

Funkcja XSS nie jest już dostępna w tej bibliotece.

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

 15
Author: Baggz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-26 04:46:15

Możesz również spojrzeć na ESAPI . Istnieje wersja javascript biblioteki. Jest dość wytrzymały.

 5
Author: jeandenis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-07 03:29:53

W nowszych wersjach modułu validator można użyć następującego skryptu, aby zapobiec atakowi XSS:

  var validator = require('validator');

  var escaped_string = validator.escape(someString);
 3
Author: Paramore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-31 10:28:46

Wypróbuj moduł npm strip-js. Wykonuje następujące czynności:

  • dezynfekcja HTML
  • usuwa znaczniki skryptu
  • usuwa atrybuty takie jak" onclick"," onerror", itd. które zawierają kod JavaScript
  • usuwa atrybuty "href" zawierające kod JavaScript

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

 1
Author: Shivanshu Goyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 15:31:56