Thema: Script-Sicherheit
Hallo!
Eine offene Frage, die vielleicht zum Projekt Script-Sicherheit-FAQ "mutieren" kann:
Was muss beim Schreiben von Skripten, insbesonders auf Servern laufenden, beachtet werden, um eine möglichst hohe Sicherheit für das Projekt und für den Webserver zu erhalten?
Ein Aspekt (von 1000 anderen) ist sicherlich dieser hier:
Aber VORSICHT! Du musst unbedingt den übergeben Parameter filtern, damit du dir keine Injection einfängst. Mehr dazu hier: http://www.dclp-faq.de/q/q-sql-injection.html
[...]
Zum Thema Injections:
Jede Variable, die du von außen in dein Skript hereinnimmst, kommt aus einem Bereich, den du nicht kontrollieren kannst. Jeder kann deine Skripte mit allen möglichen Parametern aufrufen. Wenn du also z.B. die Idee hast, du übergibst die ID eines Datensatzes von Skript A nach Skript B, dann liegt es nahe, anzunehmen, dass die übergeben ID eine Zahl ist, die Skript A generiert hat. Dabei vergisst du dann aber, dass Skript B eben auch unabhängig von Sktipt A aufgerufen werden kann und zwar mit einer ID, die einen ganz anderen Wert hat, als den, den du erwartest.
Wenn du nun folgende Query hast:
$query = "SELECT * FROM tabelle WHERE ID = ".$_GET['id'];
...dann wird dir diese Query bei id=25 den Datensatz der Nummer 25 auslesen.
Übergibt aber jemand id=25%20OR%20id=26, also im Skript dann $_GET['id'] = "25 OR id=26", dann werden mit obiger Query schon zwei Datensätze zurückgegeben und ggf. einer (oder andere Daten), die garnicht für alle Welt bestimmt sind.Deshalb musst du bei diesen, von außen kommenenden Variablen immer prüfen, ob sie in einem gültigen Wertebereich liegen.
[...]
Wenn $datensatz nur Ziffern enthalten darf, dann tut es folgende Zeile:
if (!preg_match("/^[0-9]+$/", $datensatz, $parts)) die ('Ungueltiger Parameter!');
(Basti in dieser Diskussion)
Mamphil