Hallo,
dognose wrote:
Das ding wird nirgends Im Internet zu finden sein,
darum behalt ich meine Lösung!
ok, in diesem Zusamenhang akzeptiert.
Trotzdem will ich's kurz :roll: erklären:
In alten PHP-Versionen (3 und die ersten 4er) wurden Formulardaten einfach dadurch übergeben, daß PHP zu jedem Formularwert automatisch eine Variable mit dem Formularwert erzeugt hat.
<input name='var' wert='zahl'>
ergab automatisch
$var=zahl;
Da
jedes Input-Tag, ob vom Scriptprogrammierer vorgesehen oder nicht, eine Variable ergab, konnten Angreifer über zusätzliche Input-Tags beliebige Variablen im Script setzen und erzeugen, z.B.
<input name='zaehler' wert='144'>
setzte einfach $zaehler auf 144.
Wehe, der Programmierer hatte diesen Mißbrauch nicht einkaluliert.
Außerdem wurden nicht existente Variablen beim ersten Aufruf einfach auf Leerstring bzw Null gesetzt, man konnte also einfach vergessen, eine Variable zu setzen bevor man sie erstmals ausliest.
Beides wurde anfangs als tolles Feature von PHP angesehen, bis man merkte, daß es vor allem tolle Sicherheitslöcher sind.
Beides ist in aktuellen PHP-Versionen nicht mehr vorgesehen. Die Formularwerte müssen mit $_REQUEST['variable'] übernommen werden. Variablen, für die es keinen REQUEST gibt, lassen sich über das Formular nicht mehr setzen.
Und eine Variable muß einen Wert zugewiesen bekommen, bevor ihr Wert abgefragt werden kann.
Mit
Code: Select all
if (isset($_REQUEST['variable'])) { $variable=$_REQUEST['variable']; } else { $variable=''; }
für jede im Formular
zulässige Variable kann man den Zustand alter PHP-Versionen wieder herstellen,
ohne die Sicherheitslöcher zu haben.
Die Zeile funktioniert so:
Für den angegebenen Formularwert wird zunächst geprüft, ob er gesetzt ist. Wenn ja, wird eine Variable gleichen Namens erzeugt und der Wert zugewiesen. Wenn nein, wird ebenfalls eine Variable gleichen Namens erzeugt und sie bekommt den Wert Leerstring. Mit diesen Variablen kann das Script genau so arbeiten wie mit der alten unsicheren Lösung, bis auf die zusätzlichen Zeilen am Scriptanfang also keine Scriptänderung, trotzdem bleibt das Sicherheitsloch geschlossen.
Leider gibt es in den aktuellen PHP-Versionen die Möglichkeit, in der php.ini auf die alten unsicheren Regeln zurückzuschalten. Und leider gibt es etliche Webhoster, die das auf Kundenservern machen, um sich Reklamationen zu ersparen und den Support zu schonen.
Gruß, Wolfgang