10.09.2008, 08:55 Uhr

Injizierung von Variablen verhindern

Wenn die PHP-Konfigurationseinstellung register_globals aktiviert ist, ist es möglich, per URL, Cookie oder POST-Daten Variablen im Skript anzulegen, was sich – bei entsprechend schlampiger Programmierung – schnell zu einer Sicherheitslücke entwickeln kann.
Wenn die PHP-Konfigurationseinstellung register_globals aktiviert ist, ist es möglich, per URL, Cookie oder POST-Daten Variablen im Skript anzulegen, was sich – bei entsprechend schlampiger Programmierung – schnell zu einer Sicherheitslücke entwickeln kann.
Besonders gefährlich ist es, wenn beim Entwickeln und Testen die Konfigurationseinstellung error_reporting nicht auf E_ALL gesetzt ist. Richard Heyes hat daher in seinem Weblog ein Vorgehen vorgeschlagen, das entsprechende Angriffsversuche verhindern kann und alle derart von Angreifern erzeugten globalen Variablen gleich wieder entfernt. Das prinzipielle Vorgehen besteht darin, dass (innerhalb einer Funktion) die Variable $name alle geschützten superglobalen Array-Namen enthält (etwa '_POST', 'GLOBALS' und so weiter) und sich das Array $daten aus $_POST, $_GET und so weiter zusammensetzt. Der folgende Code löscht dann alle zusätzlich eingeführten globalen Variablen:
<?php
foreach ($daten as $k => $v) {
if (!in_array($k, $name) AND
isset($GLOBALS[$k])) {
unset($GLOBALS[$k]);
}
}
?>
Der vollständige Quelltext von Richard Heyes ist im Web zu finden unter ##{"type":"__invalid__InterRed::Userlink","linktype":"e","linkoffset":0,"ziel_ba_name":"","bid":0,"cid":0,"extern":"http:\/\/www. phpguru.org\/","fragment":"","t3uid":0,"page":0,"text":"www. phpguru.org","target":"_blank","alias":"","_match":"","_custom_params":[]}#!.


Das könnte Sie auch interessieren