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

The laws of physics are the canvas God laid down on which to paint his masterpiece. “Leonardo Vetra” in Dan Brown’s “Angels & Demons”

2

Re: Script-Sicherheit

Meine Erfahrung ist die, dass das Wissen um sicherheitskritische Faktoren, Angriffsszenarien etc. pp. bei den meisten PHP-Programmieren (woanders mag das anders sein, denn PHP ist nunmal eine "Sprache für Jedermann") dem technischen Know How weit hinterherhinkt.

Daraus kann man schließen, dass es zunächst einmal nicht an konkreten Antworten fehlt, sondern an Fragen. Wer würde sich fragen, wie er sich vor dem Hijacken seiner Sessions schützen kann, wenn er von der Möglichkeit eines solchen Angriffs noch nie etwas gehört hat? Die erste Frage ist deshalb doch immer eine ganz globale: "Wie erstelle ich eine sichere Web-Applikation?".

Und bei dieser Frage zweifle ich, ob für eine Behandlung dieser eine FAQ ein geeignetes Format ist. Schließlich behandelt eine FAQ ja immer nur punktuell bestimmte Aspekte einer Thematik und gefragt ist zunächst einmal ein Überblick.

Es verdient leider wohl kaum eine Frage zum Thema Sicherheit den Status "frequently asked", daher sollte sowas als Tutorial verfasst werden, wobei man ja hier auch zunächst einen Überblick geben kann und dann in einzelnen Kapiteln die einzelnen Aspekte tiefer erörten kann. (Wie wäre es mit SELFSECUREWEBAPPLICATION ?)

Soweit mal meine Gedanken dazu.

Ein paar Links:
http://www.php.net/manual/en/security.php
http://www.dclp-faq.de/search.php?q=&qu … heit"
http://dclp-faq.de/ch/ch-security.html
http://www.dynamic-webpages.de/05.tutor … tegorie=18

Basti

Re: Script-Sicherheit

hi..
ich hab folgende frage..
welche chmod muss ich einer datei geben, sodass diese NUR von PHP-scripten geöffnet, und geschrieben, sowie verändert (gelöscht) werden darf?
Auch FTP-Programme sollen nicht zugreifen können..

Lebe deine Träume so wie sie sind,
denn nur so kannst du weiterhin träumen!

Re: Script-Sicherheit

Hi!

Ich würde sagen: Das hängt von deinem Server ab und davon, wer PHP ausführt (User www oder der Benutzer, dem der Webspace gehört ....).

Mamphil

The laws of physics are the canvas God laid down on which to paint his masterpiece. “Leonardo Vetra” in Dan Brown’s “Angels & Demons”

Re: Script-Sicherheit

user geht auf php-webseite..
beispielscript:
<?
$datei=fopen("datei.dat","w+");
fwrite($datei,"Viel Text");
fclose($datei);
echo 'Fertig..';
?>
Meineswissens Apache

Lebe deine Träume so wie sie sind,
denn nur so kannst du weiterhin träumen!

Re: Script-Sicherheit

Hää? Was hat deine Antwort mit deinem Problem zu tun?

Es kann so sein: Auf einem Server gibt es einen angelegten Benutzer (z. B. mit dem Login www). Dieser kann sich natürlich nicht einloggen. Aber alle PHP-Scripte bzw. der Apache wird von diesem ausgeführt. Eine Seite, die nur von PHP-Scripten eingelesen werden kann, darf dann nur von diesem Benutzer gelesen werden können: Besitzer: www; Gruppe: www; Rechte: 600
Der FTP-Server darf dann natürlich nicht von Nutzer www ausgeführt werden.

(btw: die Lösung ist ziemlicher Schrott. Ein Server, auf dem ich manchmal arbeite ist so konfiguriert. Aus Sicherheitsgründen habe ich es wie in deinem Fall gelöst, bei einer Änderung ist allerdings ein großer Aufwand nötig...)

Ein anderes Szenario (auch damit arbeite ich relativ häufig: Ist viiieeel besser!!!):
Wenn ein PHP-Script für die Homepage des Nutzers web77 ausgeführt wird, wird der Apache und sein PHP zum Nutzer web77. Dann hast du im Prinzip gar keine Schwierigkeiten, nur ist auch hier wieder das Problem mit dem FTP-User.

Noch Fragen? Sicherlich <img src="/forum/images/graemlins/wink.gif" alt="" />

Mamphil

The laws of physics are the canvas God laid down on which to paint his masterpiece. “Leonardo Vetra” in Dan Brown’s “Angels & Demons”

Re: Script-Sicherheit

ja.. ich weiß net, wie so ein script ausehen muss..
ftp-account habe ich..

Lebe deine Träume so wie sie sind,
denn nur so kannst du weiterhin träumen!