PHP Umgebungsvariablen

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und PHP/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

PHP Umgebungsvariablen

Beitrag von oxpus »

Einige Mods werden nicht auf alle Umgebungseinstellungen von php und Webserver getestet. Das kann auch keiner verlangen und ist auch nicht immer jedem Programmierer möglich.
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;
oder nach neuerer Art

Code: Alles auswählen

$variable = ( isset($_POST['variable']) ) ? intval($_POST['variable']) : intval($_GET['variable']);
$variable = ( $variable ) ? TRUE : 0;
... für Texte oder Befehlsparameter

Code: Alles auswählen

$variable = ( isset($HTTP_POST_VARS['variable']) ) ? htmlspecialchars($HTTP_POST_VARS['variable']) : htmlspecialchars($HTTP_GET_VARS['variable']);
$variable = ( $variable ) ? $variable : '';
oder nach neuerer Art

Code: Alles auswählen

$variable = ( isset($_POST['variable']) ) ? htmlspecialchars($_POST['variable']) : htmlspecialchars($_GET['variable']);
$variable = ( $variable ) ? $variable : '';
Steht fest, ob mit POST oder GET übernommen wird, so kann man die jeweils beiden Zeilen in Kombination auch einfacher gestalten...

... bei Zahlen

Code: Alles auswählen

$variable = ( isset($HTTP_POST_VARS['variable']) ) ? intval($HTTP_POST_VARS['variable']) : 0;
... bei Texten und Befehlsparametern

Code: Alles auswählen

$variable = ( isset($HTTP_POST_VARS['variable']) ) ? htmlspecialchars($HTTP_POST_VARS['variable']) : '';
Dabei bedeuten die php-Befehle intval eine Integer-Zahl aus dem Wert zu erstellen und htmlspecialchars wandelt Zeichen in HTML-fähige Elemente um.

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.
Zuletzt geändert von oxpus am Di 08.Nov, 2005 20:41, insgesamt 2-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten