Eines sollte jedoch alle Mod-Schreibern immer berücksichtigen: Eine saubere Übergabe und Übernahme von Werten diverser Variablen beim Aufruf einer neuen Seite, damit das abzuarbeitende Script weder Fehler aufgrund fehlender Werte produziert oder gar diese Werte nicht in der Datenbank für spätere Bearbeitungen landen.
Dieses erhöht die Sicherheit und minimiert die Fehler. Man stelle sich z.B. vor, ein Userprofil lässt keine Änderungen eines Passwortes zu, nur weil die Variablen nicht korrekt übernommen werden. Und dabei ist das Passwort den falschen Leuten bekannt...
register_globals
Die php-Umgebungseinstellung "register_globals" sorgt dafür, daß - vereinfacht ausgedrückt - entweder mit weniger Sicherheit alle gesetzten Variablen überall innerhalb der bestehenden Session Gültigkeit haben und damit verwendbar sind (Modus On) oder explizit aus einer Url (erzeugt durch manuelle Eingabe im Browser, durch einen angeklickten Link oder ein abgesendetes Formular) ausgelesen werden müssen (Modus Off).
Viele Webhoster haben noch die Variable "register_globals" auf "On" gestellt, um dem vermeindlich höheren Support nicht funktionierender php-Scripte aus dem Wege zu gehen, verringern damit aber auch gleichzeitig die Sicherheit für die entsprechende Webspaces.
Doch was nun tun, damit man auch bei dem Modus "On" mehr Sicherheit bekommt und auch beim Modus "Off" alle Scripte fehlerfrei arbeiten?
Alle Werte grundsätzlich auslesen und damit sind wirklich alle Werte gemeint.
php kennt dabei diese zwei bekanntesten Möglichkeiten:
Übergeben: $HTTP_POST_VARS oder neuer: $_POST
Übernehmen: $HTTP_GET_VARS oder neuer: $_GET.
Kann man in einem Formular die Methode bestimmen, so können die Modi bei Links/Urls letztendlich auch durch die Einstellungen des Webserver bestimmt werden.
Am sichersten ist immer, beide Möglichkeiten zu benutzen, wie in den Beispielen...
... für Zahlen
Code: Alles auswählen
$variable = ( isset($HTTP_POST_VARS['variable']) ) ? intval($HTTP_POST_VARS['variable']) : intval($HTTP_GET_VARS['variable']);
$variable = ( $variable ) ? TRUE : 0;Code: Alles auswählen
$variable = ( isset($_POST['variable']) ) ? intval($_POST['variable']) : intval($_GET['variable']);
$variable = ( $variable ) ? TRUE : 0;Code: Alles auswählen
$variable = ( isset($HTTP_POST_VARS['variable']) ) ? htmlspecialchars($HTTP_POST_VARS['variable']) : htmlspecialchars($HTTP_GET_VARS['variable']);
$variable = ( $variable ) ? $variable : '';Code: Alles auswählen
$variable = ( isset($_POST['variable']) ) ? htmlspecialchars($_POST['variable']) : htmlspecialchars($_GET['variable']);
$variable = ( $variable ) ? $variable : '';... bei Zahlen
Code: Alles auswählen
$variable = ( isset($HTTP_POST_VARS['variable']) ) ? intval($HTTP_POST_VARS['variable']) : 0;Code: Alles auswählen
$variable = ( isset($HTTP_POST_VARS['variable']) ) ? htmlspecialchars($HTTP_POST_VARS['variable']) : '';Zuletzt ist es dazu noch angebracht, ausgelesene Werte immer mittels der php-Funktion "addslashes" zu formatieren (dabei werden vor jedem einfachen oder doppelten Hochkomma ein Backslash "\" vorangestellt) und so in der Datenbank zu speichern und nach einem Auslesen aus der Datenbank mit "stripslashes" die Rückformatierung vorzunehmen.
Ohne diese Formatierung kann es zu Fehlern beim Speichern der Daten kommen und das Script aufgrund falsch interpretierter SQL-Anweisungen abbrechen.