1. register_globals
register_globals ist eine Einstellungsmöglichkeit von PHP. Wenn diese aktiviert ist, ist ein direkter Zugriff auf Variablen, die via GET- oder POST-Methode übergeben wurden möglich.
Beispiel:
Code:
<form method="POST" action="getData.php" name="myform">
<input type="text" name="username" width="100" /><br />
<input type="password" name="password" width="100" /><br />
<input type="submit" name="login" />
</form>
Nun kann in der PHP-Datei direkt auf den Usernamen und das Passwort zugegriffen werden:
Code:
$userdata = array();
$userdata['name'] = $username;
$userdata['pass'] = $password;
Wenn register_globals deaktiviert ist, ist kein direkter Zugriff möglich, auf die Daten aus dem Formular kann nur über das superglobale Array $_POST zugegriffen werden:
Code:
$userdata = array();
$userdata['name'] = $_POST['username'];
$userdata['pass'] = $_POST['password'];
Das Gleiche gilt auch für Variablen die mit der GET-Methode (über den URL) übergeben werden, das zugehörige superglobale Array ist $_GET.
Der direkte Zugriff ist zwar etwas kürzer, er stellt aber ein großes Sicherheitsrisiko dar.
Beispiel:
Code:
<?php
echo '<form action="" name="login" method="POST">';
echo '<input type="text" name="username" width="100" />';
echo '<input type="password" name="password" width="100" />';
echo '<input type="submit" value="Login" />';
echo '</form>';
// check username and password
if( $_POST['username'] == "foo" AND $_POST['password'] == "bar" ) {
$logged_in = true;
}
// check if the user is logged in
if( $logged_in == true ) {
// print secret data
echo "Your secret data";
}
?>
Wenn der Benutzer den richtigen Benutzernamen und das richtige Passwort eingibt wird "Your secret data" ausgegeben. Ein Angreifer kann dieses Login bei aktiviertem register_globals ganz einfach umgehen, indem er ?logged_in=true an den URL anhängt. Damit macht er aus diesem Code-Abschnitt:
Code:
// check if the user is logged in
if($logged_in == true) {
// print secret data
echo "Your secret data";
}
praktisch diesen:
Code:
$logged_in = true;
// check if the user is logged in
if($logged_in == true) {
// print secret data
echo "Your secret data";
}
Aus diesem Grund sollte register_gloabls auf jeden Fall deaktiviert werden.
Alternativ kannst du auch "$logged_in = false;" an den Anfang des Skriptes schreiben (z. B. wenn du bei deinem Hoster kein Zugriff auf die php.ini hast).
Link zu dem Thema:
http://php.net/register_globals
Lesezeichen