Javascript XSS-Prävention
Es ist ein Node.js Projekt bereinigt Daten und es ist ein OWASP-Bibliothek für JavaScript, mit der Bereinigung zu verhindern, XSS.
Ich habe benchmarking dieser Bibliotheken, und Sie sind Recht intensiv und vielleicht ein overkill, meine Anwendung benötigt keine dynamische HTML (die von den Benutzern eingereicht, bbtags oder was auch immer, gar nicht erforderlich) also warum nicht tun Sie es so:
- Deaktivieren "
<
" und ">
" - Zeichen, nicht diese zu ersetzen oder so, einfach deaktivieren Sie Sie, wenn der Nutzer diese, geben Sie Ihnen eine Warnung, dass diese deaktiviert sind (client - und server-seitige Validierung) &
=>&
"
=>"
'
=>'
/
=>/
- Kodieren eingereichten URLs (GET-Parameter etc.)
- DOM-basierten XSS bedeckt ist, da meine Anwendung verwendet HTML5 PushState und das backend ist komplett getrennt vom frontend.
Wäre das genug, um mich zu schützen, wie gesagt, meine Anwendung erfordert keine HTML-die von den Benutzern eingereicht, so brauche ich nicht die <
und >
tags überhaupt.
Dank für all das feedback, das ist, was ich jetzt verwenden:
var pattern = /<(.*)>/;
function hasHtmlTags(string) {
return pattern.test(string);
};
if (hasHtmlTags(userData)) {
//Do something?
} else {
//Create entity.
}
So dass die Nutzer können immer noch Ihre emoticons :< und Z, und die Funktion wird nur ausgelöst, wenn eine Kombination von < und > gefunden. So ist keine aufwendige reguläre Ausdrücke und so, einfach deaktivieren < und > in Kombination, und wir sollten in Ordnung sein.
Es sollte ausreichend sein, so lange wie Sie angeben, Ihre Zeichenkodierung.
InformationsquelleAutor onlineracoon | 2012-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Allgemeine encode Prozedur:
Wenn Ihre Benutzer nicht irgendetwas vorlegen, was zu Ihrem server, Sie müssen nicht einmal die oben genannten. Wenn der Benutzer sendet und den Benutzer Eingang, dann die oben sicher sein sollte. Solange die '<' und '>', sind weltweit bereinigt und die Klammern auch sind, Sie sind gut zu gehen.
Siehe diesem Abschnitt der Spickzettel
Die owasp-cheatsheet umfasst alle möglichen Szenarien für XSS. Wenn Sie nicht die Ausgabe der Daten innerhalb des tags' Definitionen (nicht die Inhalte) oder innerhalb von script-tags, dann kann man auch weglassen eine ganze Menge.
Habe es, vielen Dank für die Antworten!
Sie sollten in Ordnung sein mit dem, was Sie haben.
InformationsquelleAutor Konstantin Dinev
warum nicht
encodeURIComponent
vor dem senden der Daten an den client?+1
die Dinge gerade. wenn die Antwort ist nicht falsch, es gibt keinen Grund, downvote. wenn es bessere Antworten, Sie werden von Ihnen positiv bewertet werden.Die Antwort ist falsch. Wenn jemand
<script>...</script>
Sie nicht erwarten, dass es so dargestellt, als%3Cscript%3E...%3C/script%3
. Es mangles Sonderzeichen in Einklang zu Rauschen. Sie könnte verhindern, XSS, indem du unbedingt alle Eingaben, das heißt nicht, dass es eine Lösung für das problem.Ich habe nicht downvote, vielen Dank für Ihre Antwort sowieso 🙂
Danke @RASG! @Quentin; ja, wenn Sie einen inline-editor, dass wird der Fall sein. Aber das ist nicht onlineracoon Frage. Seine über XSS. Dafür will er verhindern, dass Benutzer a das schreiben von Skripts zum ausführen auf BenutzerB. Wenn er verwendet encodeURI beim senden von HTML wieder, es wird "hässlich" ja, aber UserB sehen es als <script>...</script>. Gleiche wie wenn Sie möchten, ersetzen Sie Sie mit html-Entitäten wie die akzeptierte Antwort vorschlägt. Und der gute Witz über "verwerfen aller Eingaben". Er könnte auch die Abschaltung seiner website zu verhindern, XSS 😉
InformationsquelleAutor japrescott
Angesichts https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
Hier ist eine Umsetzung Ihrer Empfehlungen :
Auch sicher, dass Sie diese Funktion nur wenn notwendig oder Sie könnten brechen einige Sachen.
Aber ich schlage vor, Sie nehmen einen Blick auf bereits Bibliotheken für sanatizing Ausgabe :
https://github.com/ecto/bleach
InformationsquelleAutor Hybris95