Vom Nutzer übermittelte Daten
In
vielen
PHP
Programmen
liegt
die
größte
Schwäche
nicht
an
der
Sprache
selbst
,
sondern
bloß
an
Code
,
der
nicht
mit
dem
nötigen
Augenmerk
auf
die
Sicherheit
geschrieben
wurde
.
Deshalb
sollten
Sie
sich
immer
Zeit
nehmen
,
die
Implikationen
eines
gegebenen
Codestücks
zu
bedenken
,
um
einen
möglichen
Schaden
durch
eine
eventuell
unerwartete
übergebene
Variable
festzustellen
.
Beispiel
5-17
.
Gefährliche
Verwendung
von
Variablen
?php
/
/
lösche
eine
Datei
aus
dem
Benutzer-Verzeichnis..
.
/
/
oder
vielleicht
dem
eines
anderen
Benutzers
?
unlink
(
$evil_var)
;
/
/
Schreibe
die
Log-Information
von
deren
Zugriff..
.
/
/
oder
vielleicht
einen
/
etc
/
passwd
Eintrag
?
fputs
($fp
,
$evil_var)
;
/
/
Führe
etwas
triviales
aus..
.
oder
rm
-rf
*
?
system
($evil_var)
;
exec
($evil_var)
;
?
|
|
Sie sollten Ihren Code immer sorgfältig kontrollieren, um eine
sorgfältige Prüfung irgendwelcher von einem Web-Browser
übertragenen Variablen sicherzustellen, und sich selbst folgende
Fragen stellen:
-
Wird
sich
dieses
Skript
nur
auf
die
vorgesehenen
Dateien
auswirken
?
-
Kann
auf
ungewöhnliche
oder
unerwünschte
Daten
reagiert
werden
?
-
Kann
dieses
Skript
auf
nicht
vorgesehene
Art
genutzt
werden
?
-
Kann
dies
in
Verbindung
mit
anderen
Skripten
in
einer
negativen
Art
benutzt
werden
?
-
Werden
alle
Transaktionen
ausreichend
geloggt
?
Wenn Sie sich diese Fragen anstatt danach schon während dem
Schreiben des Skriptes stellen, ersparen Sie sich das unangenehme
Umschreiben, wenn eine Erhöhung der Sicherheit erforderlich wird.
Mit dieser Art zu denken werden Sie die Sicherheit des Systems
zwar nicht garantieren, aber sie können helfen, sie zu erhöhen.
Sie
könnten
auch
Überlegungen
anstellen
,
ob
Sie
nicht
register_globals
,
magic_quotes
,
oder
andere
bequeme
Einstellungen
abschalten
,
welche
Sie
in
Punkto
Gültigkeit
,
Herkunft
,
oder
Inhalt
einer
gegebenen
Variable
durcheinanderbringen
könnten
.
Mit
PHP
im
error_reporting(
E_ALL
)
Modus
zu
arbeiten
kann
auch
helfen
,
Sie
vor
Variablen
zu
warnen
,
welche
benutzt
werden
,
bevor
sie
geprüft
oder
initialisiert
wurden
(so
können
Sie
verhindern
,
dass
mit
ungewöhnlichen
Daten
gearbeitet
wird
)
.