Hi devian.
In einem Formular wird eine Eingabe des Users durch die URL an ein PHP Script gesendet. Dort angekommen wird sie schließlich auf der Seite ausgelesen.
Du liest die Eingabe aus? Was bedeutet das?
MEine Frage ist nun, mit welchen Maßnahmen schütze ich mich dagegen, dass ein User irgendeinen Script über das Formular ausführt?
Der User kann selber nichts "ueber das Formular ausfuehren", er kann nur Daten senden. Nur DU (sprich: das verarbeitende Skript), kannst bewirken, dass eventuell gesendeter Code ausgefuehrt wird.
Angenommen er sendet irgendwie sowas: <script>[... hier wird meine Seite gehackt] </script>.
Dann steht dieser String in einem Feld des Arrays $_GET. Kein Problem. Problematisch wird es hoechstens dann, wenn der String in die HTML-Ausgabe des Skriptes eingebettet wird. Dann wuerde der Browser ihn ggf. ausfuehren.
Zur sicherung habe ich die variable, gleich nachdem sie im PHP_Script empfangen wird mit htmlspecialchars() versehen. Also so:
$variable=htmlspecialchars($_GET['variable'], ENT_QUOTES);
später wird sie dann so im Browser mir $variable ausgebeben.
Das ist im Grunde das Richtige. Es ist aber nicht zu empfehlen, extra die Variable $variable einzufuehren. Gib einfach htmlspecialchars($_GET['variable']) direkt aus.
Im Anderen Fall übergebe ich sie wieder an eine URL:
header("LOCATION: testscript.php?variable=$variable");
Dabei kommt i.a. Unsinn raus. Selbst, wenn Du hier wirklich das HTML-Literal (sprich: die htmlspecialchars()-Rueckgabe) der urspruenglichen Eingabe uebergeben willst (was hoechstwahrscheinlich unsinnig ist) - das tust Du hier nicht. Wenn Du den Wert der Variablen $variable an ein anderes Skript weiterleiten willst, dann musst Du in den URL sein URL-Literal (sprich: den Rueckgabewert von url_encode($variable)) schreiben.
Viele Gruesse,
der Bademeister