register_globals ist ein Relikt aus alten PHP-Versionen in denen es noch keine superglobalen Arrays ($_GET, $_POST, etc.) gab.
Im Grunde bewirkt diese Einstellung, dass alle Werte die durch Usereingaben entstehen (also vor Allem aus Formularen) automatisch zu globalen Variablen umgewandelt werden.
Klingt erstmal garnicht so schlecht, hat aber einen großen Nachteil. Wenn jemand nämlich nicht sauber programmiert und seine Variablen vor der Benutzung nicht vernünftig initialisiert, so ist diese Variable für jeden einfach durch die URL manipulierbar.
Ein praktisches Beispiel dazu:
Nehmen wir an, du baust ein Login-Script und hast eine Variable
$is_logged_in die, wenn sie wahr ist (also TRUE, 1 oder ähnliches enthält) weitere Funktionen freischaltet. Nun vergisst du aber die Variable ganz am Anfang auf FALSE zu setzen und schon hast du ein massives Sicherheitsproblem in deiner Anwendung durch register_globals.
Kommt nämlich jetzt irgendwer daher und hängt an deine URL ein ?is_logged_in=1 an, wird automatisch die Variable $is_logged_in erstellt und mit der 1 gefüllt. Jemand kann sich einloggen ohne je ein Login-Formular verwendet zu haben.
Aus diesem Grund ist es strengstens empfohlen, register_globals auch nichtmehr zu aktivieren (mit PHP 6 verschwindet es vollständig aus dem Programm).
Was ist die Alternative? Nun, erstelle deine Variablen selber. Die superglobalen Arrays die es seit PHP 4.2 gibt machen es dir da sehr einfach. Jeder Wert, der durch den User übertragen wird landet in einem der superglobalen Arrays. Sendet dein Formular über die POST Methode, wird das $_POST Array gefüllt, bei GET das $_GET Array.
auch hier ein praktisches Beispiel:
nehmen wir an, du hast folgendes Formular:
- Code: Select all
<form action="" method="post">
<input name="variable1" type="text">
<input name="variable2" type="text">
<input type="submit">
</form>
Nach dem abschicken des Formulars hast du 2 Werte in deinem $_POST Array, die du über die Array keys ansprechen kannst.
variable1 wird also zu $_POST['variable1'], variable2 wird zu $_POST['variable2'].
Jetzt kommst du ins Spiel. Du hast dafür zu sorgen, die Array Keys zu prüfen, so dass nur mit von dir gewollten und erwarteten Werten weitergearbeitet wird und daraus deine Variablen selbst erzeugt werden.
Also im Grunde musst du sowas in der Art machen, um mich auf mein Beispielscript zu beziehen:
- Code: Select all
<?php
if ('POST' == $_SERVER['REQUEST_METHOD'] ) {
// Beispiel: variable 1 soll eine einfache Ganzzahl sein, die nur konvertiert aber nicht geprüft wird
if (!empty($_POST['variable1'])) {
$variable1 = (int)$_POST['variable1'];
} else {
$variable1 = 0;
}
// Beispiel: variable 2 darf nur maximal 5 Zeichen enthalten
if (!empty($_POST['variable2']) && mb_strlen($_POST['variable2']) <= 5) {
$variable2 = $_POST['variable2'];
} else {
$variable2 = FALSE;
}
}
Die Prüfungen sind natürlich nur rudimentäre Fallbeispiele. Du musst selbst schauen, was du wie am besten prüfen und verarbeiten kannst.