Habe ich alle Basen mit Sicherheit abgedeckt, wenn ich eine Servervariable für die Seite wiederholte?

StackOverflow https://stackoverflow.com/questions/613680

  •  03-07-2019
  •  | 
  •  

Frage

Mit Formularen habe ich immer verwendet

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

Meine Formulare dazu bringen, sich selbst zu unterwerfen.

ich benutze striptags() Falls jemand zu:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

Habe ich alle Basen abgedeckt, um sich aus XSS -Angriffen zu schützen, oder sollte ich einen Whitelist -Ansatz verwenden, sagen Sie eine Regex, die nur alphanumerische Zeichen, das Vorwärts -Schrägstrich, das Fragezeichen, das gleiche Zeichen, die Klammern usw. ermöglicht?

Vielen Dank!

War es hilfreich?

Lösung

Verwenden htmlspecialchars Anstatt von strip_tags.

Andere Tipps

Wenn Sie auf das gleiche Schema/Host/Pfad verweisen möchten, eine einfache Aktion = "?" Schuh ausreichen. Entsprechend http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

Es ist ein gültiger relativer URI.

Lassen Sie ein Formular an sich selbst einreichen, indem Sie es darauf senden:

$_SERVER["PHP_SELF"]

Diese globale Variable gibt die aktuelle Seite aus. Es sei denn, es gibt einen Grund, warum Sie die gesamte Abfragezeichenfolge zusammen mit sich benötigen?

BEARBEITEN

Seit, wie von Volkerk in den Kommentaren hervorgehoben wird, sogar PHP_SELF ist verletzlich, Sie können Ihre eigene kleine Variable basierend auf dem schreiben PHP_SELF und explodieren Sie den Rest des URI, von dem Sie wissen, dass es nicht Teil Ihrer Seite ist. Etwas wie das:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;

Wenn dein striptags() Strips nur Tags (Zeichen zwischen "<" und ">" einschließlich der Winkelklammern), kann jemand JavaScript immer noch injizieren:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

Bessere Whitelist jede mögliche Metabarakter in HTML, JavaScript und CSS (dh Winkelklammern, Klammern, Zahnspangen, Halbkolons, Doppelzitat, Einzelzitat usw.).

Wenn Sie möchten, dass ein Formular sich selbst einreicht, lassen Sie einfach die Aktion leer, z.

<form action="" method="POST">
...
</form>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top