Vor XSS-Attacke schützen

  • Hey,


    Ich habe was von XSS-Attacken gehört und gelesen. Und habe
    auch gelesen das htmlspecialchars(); dabei hilft. Die funktion sollte
    sonderzeichen ja in htmlcode umwandeln. Jedoch als ich bei einem Test (Formulareingabe wird in db gespeichert und dann aus db ausgelesen)
    htmlspecialchars benutzt habe und ich die Einträge dann ausgegeben gelassen habe liefen die javascript-codes (als test) und die Eingabe des js-codes war unverändert.


    Das sind meine Variablen welche ich durch htmlspecialchars jagen lass und dann in die db eintragen lass :


    Nun wenn ich dann die daten ausgeben lasse wird dann der javascript code welcher als test in das input-feld eingetragen wurde, so ausgegeben wie ich diesen reingeschrieben habe und ausgeführt. Aber das darf doch nicht mit htmlspecialchars passieren ? Oder htmlspecialchars hilft einfach nicht dabei..



    Wie kann man sich denn dagegen am besten schützen? Mit welchen Funktionen schützt ihr euch gegen XSS-Attacken ?


    Gruß,
    Stef

  • Im allerallerersten Schritt sollte klar sein, welche Eingaben zulässig sind, oder zumindest, welche auf jeden Fall nicht zulässig sind.
    Wenn ich davon ausgehe, dass <script> keine zulässige Eingabe bei einem Namensfeld ist, hilft z. B. strip_tags().

  • Hey,


    ich habe jetzt mal in meine datenbank nochmals geschaut und da wird der js-code auch umgewandelt in htmlcode angezeigt. Jedoch wenn ich diesen Inhalt dann wieder ausgebe als Objekt wird der js-code ganz normal wieder angezeigt.
    Dies passierte auch bei der function htmlentities. Die vorgeschlagene Funktion von Jav strip_tags() hilft gut dabei, diese entfernt alle sonderzeichen des js-code d.h. wenn man in das formular z.b. dies eingibt :

    JavaScript
    1. <script>alert('XSS-Angriff');</script>

    wird in der db nur alert('XSS-Angriff') gespeichert und eingetragen sowie ausgegeben. Ebenso wie ich herausgefunden habe hilft auch die functionen filter_input/filter_var mit deren Filter-Arten.
    Sind mehr zu empfehlen als strip_tags() aus meiner Sicht.



    Stef

  • Da gebe ich dir recht, Stef .
    Da ich strip_tags noch deutlich vor den filter-Funktionen kennenlernte (man lernt ja immer dazu, und es kommt ja auch oft neues), fiel mir spontan erstmal das strip_tags für das konkrete Problem ein. Aber die filter-Funktionen sind schon gut; ist ein guter Hinweis :)