Frage an die PHP-Experten...

Multimedia pur!
Antworten
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Hallo Leute,

ich bastel mir gerade ne kleine Webseite zusammen mit nem komfortablen "Admin-Bereich", über den ich halt Nachrichten und Bilder einstellen kann. Das funktioniet an sich schon recht gut. Allerdings kommt nun natürlich die Frage der Sicherheit. (momentan läuft das alles lokal auf meinem Rechner in einem Xampp - ist ja blos erstmal für mich und zur reinen Spielerei; aber wenn ich das später mal auf nem Webspace hochlade, sollte es natürlich halbwegs sicher sein)

Ausgangsbasis:

Ich habe ein Adminverzeichnis, in dem die ganzen PHP-Dateien für das selbsgemachte CMS liegen. Bei dem Verzeichnis habe ich via htaccess die Dateiauflistung unterbunden und als indexseite die entsprechende admin.php in der htaccess eingetragen.
Funktioniert so weit.

In diesem Ordner liegt außerdem eine PHP-Datei, in der die MySQL-Anmeldedaten hinterlegt sind (a.php). Diese PHP wird dann via include in alle anderen PHPs eingebunden, bei denen ein MySQL-Aufruf stattfindet.

Für den Adminbereich habe ich ein Login-System eingerichtet, dass mir über eine auth.php eine Sessionvariable auf Gültigkeit prüft und bei negativer Prüfung auf eine Loginseite umlenkt. Diese auth.php Prüfung ist in alle PHP-Dateien des Adminbereichs eingerichtet, außer in der Datei mit den ANmeldedaten der MySQL-Datenbank. Würde ich es da enrichten, dann könnten beispielsweise auch nicht mehr die "normalen" Besucher der Seite auf PHP-Datein zugreifen, die die a.php included. Und da liegt letztendlich auch mein Problem. Denn theoretisch kommt an diese Datei jeder User ran.
Was kann man dagegen tun?
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Warum unterbindest du mit der htaccess lediglich die Dateiauflistung? Du könntest doch das ganze Verzeichnis mit dieser Datei vor jeglichem Zugriff ohne Passwort schützen. In dieses Verzeichnis kannst du dann auch die a.php hinpacken, denn soweit ich weiß, wirkt sich die htaccess nicht auf die include-Anweisungen im PHP (oder irgendwelche anderen Dateioperationen) aus. Eine andere Möglichkeit wäre, die a.php z.B. in a.inc umzubenennen und den Zugriff der Nutzer auf alle Dateien mit dieser Endung generell zu unterbinden.
Benutzeravatar
Mic
Adventure-Gott
Adventure-Gott
Beiträge: 4604
Registriert: 28.08.2003, 16:23
Wohnort: Exil-Osnabrücker
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Mic »

Fightmeyer hat geschrieben:Denn theoretisch kommt an diese Datei jeder User ran.
Was kann man dagegen tun?
Du willst da gar nichts gegen tun, denn die anderen müssen ja an diese Datei kommen, ansonsten funktioniert bei deiner Seite nicht mehr viel.

Deine a.php wird ja sicherlich kein echo mysql_passwort; besitzen, daher wird auch niemand das Passwort sehen können. Wenn da wirklich nur der Connect stattfinden, dann kann auch nichts passieren, wenn jemand die Datei öffnet.
Wenn Vergangenheit, Gegenwart und Zukunft nichts weiter sind als verlorene Ideen aus einer anderen Ära,
etwa wie Boote auf einem ausgetrockneten See, dann ist die Beendigung eines Prozesses nie zu definieren.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Mic hat geschrieben:
Fightmeyer hat geschrieben:Denn theoretisch kommt an diese Datei jeder User ran.
Was kann man dagegen tun?
Du willst da gar nichts gegen tun, denn die anderen müssen ja an diese Datei kommen, ansonsten funktioniert bei deiner Seite nicht mehr viel.
Genau das ist ja mein Problem.
Mic hat geschrieben: Deine a.php wird ja sicherlich kein echo mysql_passwort; besitzen, daher wird auch niemand das Passwort sehen können. Wenn da wirklich nur der Connect stattfinden, dann kann auch nichts passieren, wenn jemand die Datei öffnet.
Du hast recht. Ich hab das gerade mal ausprobiert und die Datei einfach runtergeladen. Die wird bereits da durch PHP geparsed und ist dann somit "leer". Ich dachte, man lädt die Datei 1 zu 1 so runter, wie sie auf dem Server liegt. Aber so ist das ja dann alles schon schick.
Danke.
Beowulf hat geschrieben:Warum unterbindest du mit der htaccess lediglich die Dateiauflistung? Du könntest doch das ganze Verzeichnis mit dieser Datei vor jeglichem Zugriff ohne Passwort schützen. In dieses Verzeichnis kannst du dann auch die a.php hinpacken, denn soweit ich weiß, wirkt sich die htaccess nicht auf die include-Anweisungen im PHP (oder irgendwelche anderen Dateioperationen) aus. Eine andere Möglichkeit wäre, die a.php z.B. in a.inc umzubenennen und den Zugriff der Nutzer auf alle Dateien mit dieser Endung generell zu unterbinden.
Bist Du Dir sicher? Ich glaube, wenn man das via htaccess unterbindet, klappt auch der Aufruf aus einer anderen PHP nicht mehr.

Aber wie oben geschrieben, ist das Problem ja anscheinend gar keins.
Hat sich also erledigt.
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Bist Du Dir sicher? Ich glaube, wenn man das via htaccess unterbindet, klappt auch der Aufruf aus einer anderen PHP nicht mehr.
Warum probierst du es nicht einfach aus? Ich kann mich da nur wiederholen: Soweit ich weiß, hat die htaccess nur für Webverbindungen Relevanz (in diesem Falle für die Apache-Serversoftware), nicht auf PHP-Dateioperationen. Letzteres könnte man nur über die Benutzergruppensteuerung des Betriebssystemes einschränken.
Du hast recht. Ich hab das gerade mal ausprobiert und die Datei einfach runtergeladen. Die wird bereits da durch PHP geparsed und ist dann somit "leer". Ich dachte, man lädt die Datei 1 zu 1 so runter, wie sie auf dem Server liegt. Aber so ist das ja dann alles schon schick.
Das Problem ist, dass durch eine einzige fehlerhafte Servereinstellung der PHP-Inhalt dann doch einfach so angezeigt wird.
Benutzeravatar
Mic
Adventure-Gott
Adventure-Gott
Beiträge: 4604
Registriert: 28.08.2003, 16:23
Wohnort: Exil-Osnabrücker
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Mic »

Beowulf hat geschrieben:
Fightmeyer hat geschrieben:Die wird bereits da durch PHP geparsed und ist dann somit "leer".
Das Problem ist, dass durch eine einzige fehlerhafte Servereinstellung der PHP-Inhalt dann doch einfach so angezeigt wird.
Na ja, aber wie oft kommt so was vor? Sofern der Hoster einigermaßen verlässlich ist, würde ich fast sagen, dass das im Promillebereich liegt. Und der menschliche Faktor ist immer ein Restrisiko, den man nie völlig ausschließen kann. Dann ist es schon wahrscheinlicher, dass Fighty aus Versehen die Datei als .txt hochlädt.
Wenn Vergangenheit, Gegenwart und Zukunft nichts weiter sind als verlorene Ideen aus einer anderen Ära,
etwa wie Boote auf einem ausgetrockneten See, dann ist die Beendigung eines Prozesses nie zu definieren.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Also ich hab das jetzt mal zusätzlich mit der htaccess gemacht.
Dort habe ich folgendes ergänzt:

<Files .php>
order allow,deny
deny from all
</Files>

Der Aufruf der PHP-Files funktioniert nach wie vor tadellos. Da hatte Beowolf also recht, dass das keine Auswirkungen darauf hat.
Allerdings kann ich nach wie vor beispielsweise über rechte Maustaste -> speichern unter, eine PHP-Datei herunterladen. Diese ist dann zwar bereits geparsed und enthält somit keine verräterischen Inhalte mehr, aber grundsätzlich unterbunden ist das dadurch nicht. Oder meintest Du was anderes?
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

@Mic: Stimmt schon, aber ich finde diese Trennung irgendwie zu "dünn". Ich bin schon mal öfters auf irgendwelche Seiten geraten die dann auf einmal PHP-Quellcode anzeigten. Denn ob ein Hoster verlässlich ist oder nicht, dass kann man nicht immer im Vorraus beurteilen.

@Fightmeyer:
Mit Verzeichnisschutz meinte ich eher sowas: http://de.selfhtml.org/servercgi/server ... hnisschutz
Was deine Files-Anweisung angeht, bin ich nicht sicher ob diese ohne Sternchen funktioniert:
<Files *.php>
order allow,deny
deny from all
</Files>
Benutzeravatar
Hans
Adventure-Treff
Adventure-Treff
Beiträge: 10716
Registriert: 01.01.2002, 12:35
Wohnort: Nürnberg
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Hans »

Ich würde auch das ganze Verzeichnis per htaccess blockieren. Da dann aber ein gutes Passwort wählen, weil die htaccess-loginmethode normalerweise nicht gegen bruteforce-Attacken gesichert ist.

Wenn du dir mit der Syntax nicht sicher bist, benutze einen der vielen Editoren im Internet:
http://www.htaccesseditor.com/gr.shtml
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Beowulf hat geschrieben: @Fightmeyer:
Mit Verzeichnisschutz meinte ich eher sowas: http://de.selfhtml.org/servercgi/server ... hnisschutz
Was deine Files-Anweisung angeht, bin ich nicht sicher ob diese ohne Sternchen funktioniert:
<Files *.php>
order allow,deny
deny from all
</Files>
Stimmt. Das war ein Tippfehler. Hab das mal ebend korrigiert und prompt kann ich keine PHP-dateien mehr aus diesem Verzeichnis aufrufen. Diese Variante fällt demnach aus.

@Hans
Siehe letzten Satz. Das kann ich nciht machen. Dann kommt ja niemand mehr auf die Seite...
11.517
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 17
Registriert: 26.07.2009, 01:09

Re: Frage an die PHP-Experten...

Beitrag von 11.517 »

Lege die zu inkludierende Datei mit den Zugangsdaten in ein Verzeichnis, das dem Verzeichnis für die Webinhalte übergeordnet ist und damit per Webzugriff nicht erreichbar ist.

Wenn z.B. Deine Hauptadresse http://www.fightmeyer.de auf ein Verzeichnis "/web" zielt und Dein öffentliches PHP-Script unter /web/cms.php liegt, ist es unter http://www.fightmeyer.de/cms.php erreichbar. Die Datei a.php mit den Zugangsdaten legst Du nun nicht unter /web/a.php, sondern etwa unter /geheim/a.php ab. Aus der cms.php kannst Du a.php nun mit "include('../geheim/a.php')" einbinden, über den Browser lässt sich die a.php aber nicht mehr aufrufen.

Wird einem Besucher wegen einer Störung des PHP-Interpreters der PHP-Quelltext angezeigt, erfährt er so lediglich von der Existenz der Datei "a.php" im Verzeichnis "geheim", nicht aber deren Inhalt.
8832+2685=11517
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

11.517 hat geschrieben:Lege die zu inkludierende Datei mit den Zugangsdaten in ein Verzeichnis, das dem Verzeichnis für die Webinhalte übergeordnet ist und damit per Webzugriff nicht erreichbar ist.

Wenn z.B. Deine Hauptadresse http://www.fightmeyer.de auf ein Verzeichnis "/web" zielt und Dein öffentliches PHP-Script unter /web/cms.php liegt, ist es unter http://www.fightmeyer.de/cms.php erreichbar. Die Datei a.php mit den Zugangsdaten legst Du nun nicht unter /web/a.php, sondern etwa unter /geheim/a.php ab. Aus der cms.php kannst Du a.php nun mit "include('../geheim/a.php')" einbinden, über den Browser lässt sich die a.php aber nicht mehr aufrufen.

Wird einem Besucher wegen einer Störung des PHP-Interpreters der PHP-Quelltext angezeigt, erfährt er so lediglich von der Existenz der Datei "a.php" im Verzeichnis "geheim", nicht aber deren Inhalt.
So funktioniert es. Danke.

EDIT: Neue Frage...

Ich hab in einem Ordner Bilder zu liegen, die auf der Webseite angezeigt werden sollen. Wenn ich diesen Ordner nun via htaccess schütze, dann werden auch die Bilder auf der Seite nicht mehr dargestellt. Was kann man dagegen tun?
Benutzeravatar
Hans
Adventure-Treff
Adventure-Treff
Beiträge: 10716
Registriert: 01.01.2002, 12:35
Wohnort: Nürnberg
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Hans »

Wieso willst du denn die Bilder via htaccess schützen? Du kannst den Bilder-Ordner doch einfach außerhalb des Admin-Verzeichnisses ablegen.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Ist er ja. Da sind aber Bilder drin, die ich eigentlich nur für Freunde und Bekannte veröffentlichen will. Also alle diejenigen, die von mir einen Account für die Seite kriegen. Falls jemand nun die Ordnerstruktur erahnt, kommt er aber trotzdem an die Bilder ran. Das möchte ich nicht.
Benutzeravatar
Mic
Adventure-Gott
Adventure-Gott
Beiträge: 4604
Registriert: 28.08.2003, 16:23
Wohnort: Exil-Osnabrücker
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Mic »

Wie genau möchtest du denn die Aktfotos von dir schützen? Vor dem Verlinken auf anderen Seite oder grundsätzlich, also der direkte Aufruf?

Für ersteres ist mod_rewrite (wieder) dein Freund. Du legst eine .htaccess in das Verzeichnis mit den Bildern, die folgenden Inhalt haben sollte:

Code: Alles auswählen

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?deinedomain.de/.*$ [NC]
RewriteRule .(gif|jpg|png|GIF|JPG|PNG)$ http://www.deinedomain.de/ersatz.gif [R,L]
Sie macht folgendes:
Sobald eine Grafik geladen wird (gif, png, jpg), wird die Grafik http://www.deinedomain.de/ersatz.gif angezeigt, also nicht das ursprüngliche Bild. Mit einer Ausnahme, und zwar wenn die Grafik von der Domain http://www.deinedomain.de geladen wird, welche deine sein sollte.

Willst du aber grundsätzlich den Aufruf verhindern, würde ich so langsam deine grundsätzliche Herangehensweise überdenken. Vielleicht solltest du den kompletten Auftritt per .htaccess schützen. In dieser .htaccess könntest du dann Benutzer anlegen.
Wenn Vergangenheit, Gegenwart und Zukunft nichts weiter sind als verlorene Ideen aus einer anderen Ära,
etwa wie Boote auf einem ausgetrockneten See, dann ist die Beendigung eines Prozesses nie zu definieren.
Antworten