Session-Passwort-Script und Problem bei Dateizugriff
HP-Bauer
- php
0 wahsaga0 Cheatah0 Sven Rautenberg
Hallo,
ich habe ein PHP-Session-Passwort-Script in Verbindung mit einer Mysql-DB. Funktioniert mit PHP-Dateien der Homepage gut. Wenn der User aber z.B. eine zu schützende PDF-Datei direkt anspricht, ist der Schutz wirkungslos. Wie kann ich bestimmte Dateien schützen? Kann ich mein PHP-Login-Script und die Mysql-DB vielleicht mit einer .htaccess-Datei verbinden?
Hoffe, ihr könnt mir helfen, ist wichtig.
MfG,
HP-Bauer
hi,
ich habe ein PHP-Session-Passwort-Script in Verbindung mit einer Mysql-DB. Funktioniert mit PHP-Dateien der Homepage gut. Wenn der User aber z.B. eine zu schützende PDF-Datei direkt anspricht, ist der Schutz wirkungslos. Wie kann ich bestimmte Dateien schützen? Kann ich mein PHP-Login-Script und die Mysql-DB vielleicht mit einer .htaccess-Datei verbinden?
Unterbinde den Direktzugriff auf die zu schützenden Ressourcen per HTTP, und verlinke stattdessen auf ein Downloadscript, welches die Daten nach erfolgreicher Prüfung der Authentifizierung aus den jeweiligen Dateien liest und an den Client durchschleust.
Hoffe, ihr könnt mir helfen, ist wichtig.
Hoffe, du kannst suchen - ist absolut nicht das erste Mal, dass sowas hier thematisiert wird.
gruß,
wahsaga
Hi.
Unterbinde den Direktzugriff auf die zu schützenden Ressourcen per HTTP, und verlinke stattdessen auf ein Downloadscript, welches die Daten nach erfolgreicher Prüfung der Authentifizierung aus den jeweiligen Dateien liest und an den Client durchschleust.
Gute Idee, danke. Ist es unsicher, statt einer Id gleich den kompletten Dateinamen an das Downloadscript zu übergeben? Selbst wenn der Dateiname bekannt ist, kann die Datei nicht ohne Downloadscript heruntergeladen werden, wenn das Verzeichnis nicht per HTTP ansprechbar ist. Das Downloadscript kann ich ja noch zusätzlich schützen, in dem es nur ausgeführt wird, wenn der User auf der HP eingeloggt ist. Habe ich was übersehen?
MfG,
HP-Bauer
hi,
Ist es unsicher, statt einer Id gleich den kompletten Dateinamen an das Downloadscript zu übergeben? Selbst wenn der Dateiname bekannt ist, kann die Datei nicht ohne Downloadscript heruntergeladen werden, wenn das Verzeichnis nicht per HTTP ansprechbar ist. Das Downloadscript kann ich ja noch zusätzlich schützen, in dem es nur ausgeführt wird, wenn der User auf der HP eingeloggt ist. Habe ich was übersehen?
Ja, eventuell.
Du solltest den übergebenen Parameter bei dieser Vorgehensweise natürlich auf "Gültigkeit" prüfen.
Denn sonst mache ich aus deinem
download.php?datei=xyz.pdf
schnell mal ein
download.php?datei=mysql_connect.php (o.ä.)
Also definiere vorher einen Gültigkeitsbereich - der kann bspw. nur Dateien in einem speziellen Unterorder umfassen - und prüfe dann den übergebenen Parameter drauf.
Vorsicht auch mit Leichtsinnigkeiten wie "ich setze einfach ein 'unterordner/dateien/' davor, dann kann man nur Dateien aus diesem Order auslesen" - das ist idR. ganz fix umgangen, in dem man als Parameter "../xyz.php" übergibt.
Das wird dann nämlich zu "unterordner/dateien/../xyz.php", und das ist gleich "unterordner/xyz.php".
gruß,
wahsaga
Hi,
ich habe ein PHP-Session-Passwort-Script in Verbindung mit einer Mysql-DB. Funktioniert mit PHP-Dateien der Homepage gut. Wenn der User aber z.B. eine zu schützende PDF-Datei direkt anspricht, ist der Schutz wirkungslos.
wenn der User eine Datei anspricht, dann geht er entweder über FTP o.ä., oder er hat Zugriff auf das Filesystem. In beiden Fällen ist ein HTTP-Server völlig außen vor, entsprechend kein ein HTTP-Server-seitiger Mechanismus wie z.B. PHP nicht greifen.
Wie kann ich bestimmte Dateien schützen?
Gar nicht, es gibt nämlich keine. Bei HTTP kann der Client nur auf _Ressourcen_ zugreifen. Wenn Du nicht möchtest, dass die zu einer Ressource gehörige URL vom Server mit einer Datei seines Filesystems assoziiert wird, dann verhindere dies entweder über die Serverkonfiguration, oder nutze dieselbe, indem Du die Dateien in einem Bereich ablegst, die der Server mit keiner URL assoziiert. Normalerweise ist dies einfach außerhalb des DOCUMENT_ROOT.
Kann ich mein PHP-Login-Script und die Mysql-DB vielleicht mit einer .htaccess-Datei verbinden?
Du kannst mittels der Serverkonfiguration, auch der .htaccess-Datei, bestimmte URLs mit einem PHP-Script assoziieren. Ein SQL-Server lässt sich nur in Ausnahmefällen bzw. mit erheblichem Aufwand (entwickeln eines Servermoduls) direkt involvieren. Natürlich kann ein PHP-Script in jedem Fall mit Deiner Datenbank kommunizieren, sofern dies grundsätzlich möglich ist.
Hoffe, ihr könnt mir helfen, ist wichtig.
Ist es das? Nun, für mich und die meisten anderen Anwesenden nicht.
Cheatah
Moin!
Kann ich mein PHP-Login-Script und die Mysql-DB vielleicht mit einer .htaccess-Datei verbinden?
Es gibt mod_auth_mysql. Bringt dir aber nicht so wahnsinnig viel, weil der Benutzer sich für so einen Zugriff erneut anmelden muß.
Würde also bedeuten, dass du deine Authentifizierung komplett von PHP-Formular-Login auf HTTP-Authentifizierung umstellen müßtest, um das zu vermeiden.
- Sven Rautenberg