Maskieren von ' und "

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Maskieren von ' und "

    Hallo zusammen,

    ich hab z.Z. leider ein kleines Problem... weil bei text-eingabe-feldern wird ja mit " " gearbeitet und ich arbeite bei echo mit ' '.
    Das ist ja jetzt ein sicherheitsrisiko, da man bei einem textfeld
    (code:

    Quellcode

    1. <?php
    2. echo '<textarea name="text" rows=10 cols=75></textarea>';
    3. ?>
    )

    ja dann einfach das eingeben kann, oder:
    Bsp.: ">';
    irgend n böser code;
    <textarea name="text" rows=10 cols=75></textarea>';

    oder?
    so denk ich mir zumindest, würde das funktionieren... habs noch nie ausprobiert...

    und wenn man jetzt ' ' und " " mit \ maskiert, dann geht das ja gleich mal in die Hose... also kann mir bitte jemand sagen, wie das geht? ich habe null ahnung... also dass der das natürlich von selbst macht;))))

    LG

    Fipsi
  • Ja, alle Usereingaben, muss man bei der Ausgabe mit htmlentities kodieren. Manche Template Engines bieten für sicheren und unsicheren Inhalt eine extra Syntax.
    Beim Woltlab Framework z.B. so {@$systemcode} VS {$usereingabe}

    Hier nochmal zum Textarea Beispiel...

    Quellcode

    1. // unsicher
    2. $usereingabe = '</textarea><script>alert("xss injection");</script>';
    3. $html = '<textarea name="text" rows=10 cols=75>'.$usereingabe.'</textarea>';
    4. echo $html;


    Quellcode

    1. // sicher
    2. $usereingabe = '</textarea><script>alert("xss injection");</script>';
    3. $html = '<textarea name="text" rows=10 cols=75>'.htmlentities($usereingabe).'</textarea>';
    4. echo $html;
  • $usereingabe ist das was du in das Textfeld eintippst:

    Vollständiges unsicheres Beispiel:

    Quellcode

    1. $usereingabe = $_REQUEST['text'];
    2. $html = '<textarea name="text" rows=10 cols=75>'.$usereingabe.'</textarea>';
    3. echo '<form method="get">'.$html.'<input type="submit" /></form>';


    Und nun tippst du ein: </textarea><script>alert("xss injection");</script>

    In Firefox und allen anderen Browsern wird der JavaScript Code dann ausgeführt. Gefährlich!
    Die neuste Google Chrome Version hat übrigens einen eingebauten XSS Filter. Dort passiert nichts schlimmes und folgende Warnung erscheint:
    "Refused to execute a JavaScript script. Source code of script found within request."

    Für das sichere Beispiel einfach htmlentities ergänzen.
  • Für das sichere Beispiel einfach htmlentities ergänzen.


    Danach sieht der HTML Quelltext so aus.. es sind also keine echten Script Tags mehr vorhanden:

    Quellcode

    1. <form method="get"><textarea name="text" rows=10 cols=75>&lt;/textarea&gt;&lt;script&gt;alert(&quot;xss injection&quot;);&lt;/script&gt;</textarea><input type="submit" /></form>