Fragen zur Sicherheit

K

koli.bri

Hallo.

Vielleicht aus Mangel an mangelnden Suchbegriffen habe ich dazu nichts gescheites gefunden.
Also:
Was sollte ich beachten, um möglichst einen höchstmöglichen Sicherheitsgrad meiner PHP-Script zu erreichen?

Was ich bisher gemacht habe:
Das hauptscript erstellt ganz am Anfang eine Funktion (nohack()), welche den Rückgabewert true zurückliefert.
Alle Scripts, die in andere Dateien liegen, haben dann am Anfang stehen:

PHP:
nohack() OR die("ne, iss nich");

Somit können die schonmal nicht ohne weiteres aufgerufen werden.

Werden Formulare verarbeitet, wird neben den Feldern auch noch überprüft, ob der Submitbutton gedrückt worden ist (also ob in der $_POST['submitbutton']-Variable auch was drinsteht).

Bei Sessions speicher ich die IP in der Session ab, ohne Cookies.

Zudem kommt in jedes Unterverzeichnis ein index.html

Gibts noch weitere Tipps, bzw. Richtlinien, die man befolgen sollte?
Zum Beispiel den Scripten nur bestimmte Rechte geben (da hab ich gar keinen Plan von).

Wie greifen "Hacker" auf PHP-Scripte zu, also vor was kann man, sollte man sich noch schützen?

gruß
Lukas
 
Hi.

Wo läuft Dein Skript? Auf einem eigenen Server oder woanders?
register_globals sollte auf OFF stehen. Sonst können Hacker einfach Variablen über URL-Parameter mit Werten belegen. Zumindest aber solltest Du sorgfältig jede benutzte Variable mit einem Initalwert belegen, selbst wenn der 0 ist.

Ich habe es auch schon so gemacht, daß die eigentlichen Skripte in einem mit .htaccess gesicherten Unterverzeichnis gespeichert sind. In dem öffentlich zugänglichen Verzeichnis befindet sich dann nur eine PHP-Datei, die die Dateien aus dem gesicherten Verzeichnis includiert. Auf diese Weise ist gesichert, daß Hacker sich nicht irgendwelcher Teilskripte bedienen können.

Gruß
Rajmund
 
Das Script läuft auf einem Hostinganbierter, also nicht mein eigener Server.
Das mit den REGISTER_GLOBALS müsste ich nachfragen.

Das mit den Variablen ist ein Guter Tipp, mache ich Teilweise auch.

Die Include-Dateien in einem Extra-Verzeichnis mit .htacces zu schützen, nun ja, da muss ich mich mal gründlich in die Materie einlesen. Vor allem, wie dass ganze dann mit den Rechten klappt.

(Ist das aufgerufene Script dann der Benutzergruppe des aufrufenden zugeordnet, oder hat es die Gruppe des Server, etc, etc...)

Auf jeden Fall vielen lieben Dank für die Hilfe..

gruß
Lukas
 
Die "register global"-Einstellung kannst Du mit der phpinfo() herausfinden.
 
Mit .htaccess kann man ganz viele verschiedene Dinge machen. Wenn man es für den Paßwortschutz eines Verzeichnisses (oder einer Datei) einsetzt, dann verändern sich die Rechte nicht. Es hat ja nur Auswirkungen auf die Arbeitsweise des HTTP-Servers und des Browsers. Letzterer bietet dem Surfer ja dann einen Dialog an und fordert zur Eingabe von Benutzername und Paßwort auf, um Zugriff auf das Verzeichnis zubekommen.
 
Dass das mit .htacces möglich ist, weiß ich. :)
Ich muss mich nur mehr mit der Technik befassen. Aber das krieg ich (hoffentlich) auch alleine hin ^^

vielen Dank nochmal

gruß
Lukas
 
bzgl. include/require und Directory-Schutz

Du könntest deine in folgender Struktur ablegen, wenn dein Hoster das ermöglicht:

Code:
+- htdocs
+-- index.php
+-- was-auch-immer.php

+- include
+-- inc.geheim.php

in diesem Beispiel liegt der Ordner für die include-Dateien auf der gleichen Ebene, wie der Hauptordner des webservers. Das bedeutet: Die Skripten sind nicht per Browser erreichbar. Deine Kontrollfunktion kannst du dann zurückbauen, da der entsprechende Fall nicht mehr auftritt. Den include machst du dann so:

Code:
include(../include/inc.geheim.php);
 
bzgl. Sicherheit im allgemeinen

Hast du dich schon mit dem Thema SQL-Injections beschäftigt? Sagt dir das was? Diese Technik ist weitaus gefährlicher als die Probleme, die durch unberechtigten Aufruf von includes entstehen.

http://de.wikipedia.org/wiki/SQL-Injection
 
catvarlog schrieb:
Du könntest deine in folgender Struktur ablegen, wenn dein Hoster das ermöglicht:
...
Das ist eher die Ausnahme; als Alternative kann man (so vorhanden) das cgi-bin Verzeichnis zu diesem Zweck missbrauchen.
 
bzgl. include/require und Directory-Schutz:

Geniale Idee, wusste nicht, dass das überhaupt geht. Ich denke, das werd ich machen.
Und das mit den SQL-Injektions guck ich mir jetzt auch mal an.

Vielen lieben Dank für die Informationen.

Gruß
Lukas
 
Und natürlich XSS (Cross-Site-Scripting), wegen Variablen, die ohne
vorher geprüft worden zu sein, einfach inkludiert werden.

Klingt dumm, aber Anwendungen wie phpbb, phpmyadmin und mam-
bo enthielten tatsächlich solche Lücken....
 
Also Variablen, die in der ersten Datei erstellt worden, und in der nächsten, eingekludeten (gibts da auch nen anständigen Deutschen begriff für) Datei weiterbenutzt werden? Ne, sowas mache ich nicht, das geht, wenn überhaupt nur über Konstanten.

Ein bisschen Stil hab ich ja schon ;)

gruß
Lukas
 
koli.bri schrieb:
Also Variablen, die in der ersten Datei erstellt worden, und in der nächsten, eingekludeten (gibts da auch nen anständigen Deutschen begriff für) Datei weiterbenutzt werden? Ne, sowas mache ich nicht, das geht, wenn überhaupt nur über Konstanten.

inkludiert :)

Man kann ohne Bedenken Variablen in anderen "Dateien" benutzen. Das ist überhaupt kein Problem. Das, was hier als Problem gemeint ist, sieht z.B. so aus:

Code:
$file = $_REQUEST['file'];
fopen($file);

und dann:

Code:
http://example.com/buggy.php?file=/etc/passwd


oder aber auch:

Code:
http://example.com/buggy.php?vorname=<script>alert("test");</script>

und dann:

Code:
echo $_REQUEST['vorname'];


hier mal lesen: http://de.wikipedia.org/wiki/Cross-Site_Scripting
 
Sorry, vielleicht habe ich mich ein bisschen ungeschickt
ausgedrückt: Variablen, die manipuliert werden könnten,
werden ungeprüft als Parameter für die Funktion "inclu-
de()" verwendet.

Echt nicht mein Tag heute :kopfkratz:

Das mag wirklich blöde klingen, aber wie oben erwähnt,
selbst bei den größeren Projekten wie zb. phpmyadmin
sind/waren solche Lücken vorhanden.
 
Ach so. Ich glaub, jetzt hab ichs.

Und dass es wirklich inkludiert heißt, da hat mich mein sonst doch recht gutes Sprachgefühl getäuscht... Ich glaub, heute lern ich ne ganze Menge...
Der Tipp mit dem Cross-Site Scripting ist übrigens SEHR gut, das werd ich wohl gleich nach der Arbeit umsetzen müssen.

nochmal vielen Dank

gruß
Lukas
 
moses_78 schrieb:
Sorry, vielleicht habe ich mich ein bisschen ungeschickt
ausgedrückt: Variablen, die manipuliert werden könnten,
werden ungeprüft als Parameter für die Funktion "inclu-
de()" verwendet.

Echt nicht mein Tag heute :kopfkratz:

Das mag wirklich blöde klingen, aber wie oben erwähnt,
selbst bei den größeren Projekten wie zb. phpmyadmin
sind/waren solche Lücken vorhanden.


Ist ja nicht schlimm. Bin heute auch nicht gerade der hellste...
Aber ich denke, auf die Art und weise ist ein weiterer Punkt auf der Liste erschienen, oder?

Demnach, das Sorry war nicht nötig ;)

gruß
Lukas

PS.: was wäre ein schöner Tag, wenn man ihn nicht wegen der Schlechten Tage schätzen könnte (Altkluge, allgemeinweisheit, die man schon viel zu oft gehört hat)
 
Zurück
Oben Unten