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?
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.
- wraca do zastrzeżonego, nie konfigurowalnego
-
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.
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.
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, '<'). // it's not neccessary to escape >
replace(/"/g, '"').
replace(/'/g, ''');
}
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.
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.
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);
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
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