Zurück   Flashforum > Flash und Server > PHP und MySQL

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-02-2004, 18:43   #1 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Tutorial: .htaccess Schutz für jegliche Dateien ( für Fortgeschrittene)

.htaccess Schutz für jegliche Dateien ( für Fortgeschrittene)

Ich kann nicht genau sagen, welche Anforderung es braucht, um dies zu nutzen, bei mir hat es gedauert, aber ich musste es mir ja zusammenstricken, wohingegen Ihr mein Tutorial nehmen könnt
PHP wird hier nicht zwangsweise benötigt, sollte aber für einen vollständigen Schutz beherrscht werden und mindestens rudimentär Verstanden werden.


Ich führe hier zwei Arten eines Schutzes vor.
Voraussetzung ist, dass Ihr wisst, was ein Server ist und wie man bereits mit .htaccess umgeht. Ich verweise auf
SelfHTML

Das ist sehr gut!

Für alle, die Erfahrung haben, hier weiterlesen:

Erste Version:
Also, im ersten Beispiel verwende ich .htaccess mit dem Mod_Rewrite Modul, welches für mich ein Optimum darstellt. (Lokal bitte Mod_Rewrite in der httpd.conf vom Apache auskommentieren.)
Kurzer Ablauf des Problems: Sensible Daten sollen nur für registrierte oder private User verwendet werden, können diese nicht in eine Datenbank gepackt werden, wie z.B. Bilder, muss man diese extern schützen.
Ich gehe von zwei Möglichkeiten aus, erstens: User kommt normal per Link durch PHP oder durch sonst was, muss sich einloggen usw. und wird ggf. dann zu den Bildern(ich nehme in meinem Beispiel Bilder) geleitet. Alles kein Problem, den Passwortschutz der PHP Scripte will ich nicht näher ansprechen, dies kann man nachholen, in dem man z.B. PHP lernt .
Jetzt zum Problem (zweite Möglichkeit): Wenn jemand nun den Pfad zum Bild direkt kennt, sei es, der eingeloggte User verrät es, indem er mit der rechten Maustaste auf das Bild klickt oder wenn man irgendwoher sonst die URL kennt, so kann PHP diese Bilder regulär nichtm ehr schützen, da es komplett an der PHP vorbei geht.

Hier kommt die erste, gute Variante ins Spiel.
Wir haben den Ordner http://meine-adresse.de/privat/bilder/ , in den Bilder Ordner tun wir jetzt die folgende .htaccess Datei rein:
Code:
RewriteEngine on
Options FollowSymLinks
RewriteRule .* ../check.php [NC]
Kurz gesagt, hiermit aktivieren wir die Rewrite Engine, welche das Modul Mod_Rewrite darstellt. Mit RewriteRule .* ../check.php [NC] wird jeder Zugriff auf diesen Ordner für jede Datei zur check.php umgeleitet, welche eine Ebene höher liegt, hier im Ordner /privat/, das NC bewirkt, dass man auf die Groß- und Kleinschreibung nicht zu achten braucht.

Erstellt jetzt eine PHP Datei mit dem Namen check.php, und fügt diesen Inhalt dort komplett ein:
PHP-Code:
<?php
$name
=basename($_SERVER['REQUEST_URI']);
if (
$name=="testbild.jpg"){
 
readfile(".".$_SERVER['REQUEST_URI']);
} else {
 die(
"Ungültige Angabe");
}
?>
Schickt diese in den Ordner, wo der Bilder Ordner liegt, aber auf keinen Fall in den /bilder/ Ordner!

Ruft jetzt mal Testweise den Ordner /bilder/testbild.jpg auf, es spielt keine Rolle, dass das Bild nicht existiert, wenn im Browser "Ungültige Angabe" oder sogar das Bild erscheint (falls Ihr dort eins mit dem Namen testbild.jpg eingefügt habt), so funktioniert die .htaccess tadellos, wenn nicht, müsste ein "Internal Server Error 500" kommen, dass bedeutet, der
Server nimmt eure .htaccess nicht an, entweder ist Mod_Rewrite nicht an, oder es liegt ein anderer Fehler vor, aber dass ist erstens nicht Teil dieses Tutorials und zweitens kein Problem, dann geht Ihr einfach zur zweiten Version meines .htaccess Tutorials.
Kleine Erklärung: Ruft man irgend ein Bild im Ordner /bilder/ auf, so wird in jedem Fall eine Umleitung zur check.php geschickt, ohne Ausnahme. Die check.php, hier eine sehr simple, prüft, ob das Bild „testbild,jpg“ heißt, oder nicht, wenn nicht, dann kommt "Ungültige Angabe", wenn es doch existiert, dann kommt readfile zum Einsatz und gibt das Bild sofort aus. Vielleicht wundert sich jemand, warum ich dort ".".$_SERVER... geschrieben habe, das ".". ist nötig, weil $name nur noch den Namen des Bildes enthält, und mit readfile($name) würde das PHP Script versuchen das jeweilige Bild aus dem Ordner zu holen, wo die check.php liegt, und da gibt es das Bild ja nicht. Dieser Pfad muss immer an den jeweiligen Pfad angepasst werden!
P.S: Man sollte eventuell vor der Ausgabe einer JPG Datei, den header('Content-type:image/jpeg'); setzen oder halt die nötigen header für die jeweilige Dateiausgabe optimieren, denn es kann sein , dass sonst das Bild als ASCII (Plain Text) ausgegeben wird und dass ist nicht zu gebrauchen.
Meine check.php kann man, oder besser gesagt, sollte man durch eine gescheite Passwort Abfrage ändern, dies hier ist nur ein Beispiel, wichtig ist die Verwendung von readfile!!!



Zweite Version:
Es gibt viele Webhoster, die das Mod_Rewrite Modul nicht aktiviert haben, man kann denen eine Mail schreiben oder meine Alternative nutzen.
Vorraussetzung ist, dass der Server allgemein .htaccess Passwortabfragen zulässt, was aber in der Regel der Fall ist.

Es verläuft im Grunde alles analog zum ersten Beispiel, der Unterschied ist nur, dass in dem Falle keine Umleitung auf die check.php erfolgt, wenn man die direkte URL eingibt. Ist zwar nicht so schön, aber .htaccess via Browser zu knacken würde ein Weilchen dauern.
Es gibt unzählige Tutorials, wie man mit .htaccess ein Passwortbereich aufbaut, daher will ich das Rad nicht neu erfinden, sondern verweise wieder auf http://selfhtml.teamone.de/diverses/htaccess.htm

Die .htaccess Datei müsste jetzt ungefähr so aussehen:
Code:
AuthName "geschuetzer Bereich"
AuthType Basic
AuthUserFile /home/meine-adresse/private/.htpasswd
require valid-user
Eine zweite .htpasswd Datei, auf die in der .htaccess verweisen wird, wird in diesem Fall in dem gleichen Ordner, wo auch der Bilder Ordner drin ist. Generell sollte man die .htpasswd außerhalb der für Internet-User zugängliche Bereiche legen, aber oft ist dass nicht möglich.

Die .htpasswd Datei setzt sich aus
PASSWORT:mit_crypt_codiertes_passwort
zusammen.

Der springende Punkt ist, dass eine PHP Datei, welche die Verwaltung übernimmt, die Datei nur mit readfile lesen kann.


Die zweite, hier verwendete, Methode ist keine Verbesserung oder Neuerung des Scriptes.
Die Methode soll nur zeigen, wie man ohne die Rewrite Engine an sein Ziel kommt.

Fazit: Beides sind gute Methoden um den unautorisierten Zugriff mit der direkten Methode zu unterbinden.


Ich bedanke mich bei mal_anders für das Mitlösen des Problems.

Fragen und Anregungen bitte hier posten


In den beiden Beispielen müsst Ihr die x.htaccess Datei umbenennen in .htaccess.
Achtung: Bei der .htaccess muss man den Pfad richtig anpassen und evtl. das x bei x.htaccess entfernen. Bei Windows lokalen Servern müsst Ihr in der httpd.conf den Wert für .htaccess zu x.htaccess umbenennen, da Windows Dateinamen, die mit einem Punkt anfangen, kaum verarbeiten kann.

Username und Passwort für die htaccess2 Beispiele ist User "test" und Passwort "test".
Beide Beispiele sind sofort verwendbar, einfach uploaden und im Browser aufrufen.

Beides wurde von mir getestet.

Ich weise darauf hin, dass das anapssen der .htaccess Pfade ein Problem für unerfahrene User sein kann

MM

Edit: die beispieldaten zu diesem tutorial befinden sich weiter unten (im 10. beitrag)
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!

Geändert von Samuel (28-02-2004 um 10:46 Uhr)
Samuel ist offline   Mit Zitat antworten
Alt 27-02-2004, 23:32   #2 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
Thumbs up

gute idee ... vergiss aber RewriteBase nicht, sonst funktioniert es nur auf der hälfte der server

kleines manko an dem ganzen:
das problem, dass bilder nicht direkt angesehen werden können, hast du wohl gelöst. die performance dürfte auch sehr schnell sein.

der aufruf http://meine-adresse.de/privat/bilder/testbild.jpg ist aber trotzdem noch ungesichert und kann in beiden fällen auch von jedem nicht-eingeloggten benutzer ausgeführt werden.

damit bleibt die schwierigkeit, dass man bilder nur schützen kann, wenn die überprüfung des gültigen logins auch in der check.php stattfindet - und das erzeugt einen oftmals den nutzen übersteigenden overhead.
__________________

perlen vor die säue.

Geändert von rechtschreibfan (27-02-2004 um 23:37 Uhr)
rechtschreibfan ist offline   Mit Zitat antworten
Alt 27-02-2004, 23:38   #3 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
privat/privat/testbild.jpg soll dadurch ungeschützt sein? Ich verstehe nicht, was du meinst, immerhin liegt das bild bei privat/bilder/testbild.jpg Und mit privat/privat/testbild.jpg wird doch nicht mal die htaccess angeschmissen, da diese nur in /bilder/ wirkt, es müsste da doch eher stumpf n 404 kommen, da diese datei nicht existiert
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 27-02-2004, 23:43   #4 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
sorry, hatte mich vertippt. hab natürlich den normalen aufruf gemeint...
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 28-02-2004, 09:31   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 63
Irgendwie funktioniert das bei mir nicht....

Warning: readfile(./privat/bilder/testbild.jpg): failed to open stream: No such file or directory in /is/htdocs/47714/www.bitcheck.de/privat/check.php on line 4


http://www.bitcheck.de/privat/bilder/testbild.jpg


Also er leitet auf die PHP um, aber kann dann umgekehrt irgendwie nicht auf das JPG zurückgreifen.... ?

Ordner-/Dateistruktur:
privat/check.php
privat/bilder/testbild.jpg
privat/bilder/.htaccess

Geändert von Basti2003 (28-02-2004 um 09:33 Uhr)
Basti2003 ist offline   Mit Zitat antworten
Alt 28-02-2004, 09:37   #6 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
bastilein: wenn das bild nicht existiert, kann es ja auch nicht geöffnet werden.

"failed to open" sagt doch schon alles, oder?
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 28-02-2004, 09:40   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 63
Zitat:
Geschrieben von rechtschreibfan
bastilein: wenn das bild nicht existiert, kann es ja auch nicht geöffnet werden.

"failed to open" sagt doch schon alles, oder?

Hatte meinen Beitrag nochmal editiert,... Das Bild existiert nämlich


___

Wenn ich es direkt mit
PHP-Code:
readfile('bilder/testbild.jpg'); 
auslese, dann funktioniert das auch ?? --> http://www.bitcheck.de/privat/test.php

EDIT (2): Jetzt gibt er oben noch den "Pfad" aus, den er übergeben bekommt...

Aber warum geht das nicht ??

privat/check.php
PHP-Code:
<?php

$name
=basename($_SERVER['REQUEST_URI']);
if (
$name=="testbild.jpg"){
echo 
$_SERVER['REQUEST_URI'];
 
readfile(".".$_SERVER['REQUEST_URI']);
} else {
 die(
"Ungültige Angabe");
}
?>
privat/bilder/.htaccess
PHP-Code:
RewriteEngine on
Options FollowSymLinks
RewriteRule 
.* ../check.php [NC
und das Testbild privat/bilder/testbild.jpg

Geändert von Basti2003 (28-02-2004 um 09:59 Uhr)
Basti2003 ist offline   Mit Zitat antworten
Alt 28-02-2004, 10:05   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 63
Fehler gefunden....

PHP-Code:
<?php
//header("Content-type: image/jpg");

$name=basename($_SERVER['REQUEST_URI']);
if (
$name=="testbild.jpg"){
echo 
$_SERVER['REQUEST_URI'];
 
readfile("..".$_SERVER['REQUEST_URI']);
} else {
 die(
"Ungültige Angabe");
}
?>
Ohne Header bekomm ich nur Buchstaben WirrWarr ausgegeben und mit läd er das Bild immer herunter ??


EDIT: Ich sollte nicht immer so vorzeitig posten *g*, hat sich auch erledigt...

Nun nochmals vielen Dank und jetzt hör ich auch auf, den Thrad hier so voll zu posten

Geändert von Basti2003 (28-02-2004 um 10:08 Uhr)
Basti2003 ist offline   Mit Zitat antworten
Alt 28-02-2004, 10:42   #9 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Das mit .. Punkten kann auch sein, lokal hat es mit einem Funktioniert und Online konnte ich es nicht testen, da mein Account kein Rewrite Modul hat.
Aber wie gesagt, man muss den Pfad anpassen

@rechtschreibfan: Vielleicht stehe ich auf dem Schlauch, aber was meinst du mit: direktem Pfad eingeben überbrückt die check.php? Das ganze Tutorial zielt doch darauf, dass es dies eben nicht tut

Edit: Oberen Beitrag habich geändert, denn der "." ist nur dann richtig, wenn die Verschachtelung der Ordner nicht groß ist, d.h. je mehr Subordner man von der Eigentlichen URL man entfernt ist, desto länger wird die REQUEST_URI und dementsprächend muss man dies dann auch anpassen.
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!

Geändert von Samuel (28-02-2004 um 10:48 Uhr)
Samuel ist offline   Mit Zitat antworten
Alt 02-03-2004, 15:38   #10 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Intelligenter weise hab ich natürlich auch die Beispiele vergessen on zu stellen

Also hier sind sie

Interessant ist, dass ich im Thread was von beispielen schreibe, aber niemand fragt, wo die sind


...
Angehängte Dateien
Dateityp: zip beispiele.zip (6,0 KB, 207x aufgerufen)
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 02-03-2004, 15:44   #11 (permalink)
mein baby
 
Benutzerbild von mal_anders
 
Registriert seit: Jul 2002
Ort: Weimar
Beiträge: 1.443
dann will ich auch noch schnell meinen senf dazu geben. gehört zum thema "htaccess" und ist sicher für viele interessant, hoffe ich

WIE GESTALTE ICH MEINE EIGENE FEHLERSEITE ODER LEITE GGF. UM.

zum einen kann man damit die hässliche, vom server bereitgestellte fehlerseite, umgehen oder aber, wenn man vielleicht komplett die struktur einer page geändert hat, umleiten zur richtigen seite. das ist vor allem dann hilfreich, wenn in suchmaschinen noch alte seiten indexiert sind. und was ist ärgerlicher für den user, als auf eine blöde weiße seite zu gelangen Diese Seite kann nicht angezeigt werden

-> htacces anlegen mit folgenden inhalt:

ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
ErrorDocument 402 /error.php?error=402
ErrorDocument 403 /error.php?error=403
ErrorDocument 404 /error.php?error=404
ErrorDocument 500 /error.php?error=500

die ins unterste verzeichnis eures host.
error.php erstellen und dort nach belieben reinschreiben was passieren soll. man könnte sich dann auch gleichzeitig ne mail schicken lassen worin z.b. der referer oder die request_uri verschickt wird, dann weiß ich gleichzeitig, was schief gelaufen ist.
aber da sind euren phantasien keine grenzen gesetzt.

Zitat:
für alle, die es nicht wissen: in error.php kommt dann der GET-parameter $error an und mit diesem kann dann gearbeitet werden
__________________
musse rühre, musse probiere=>iss a pulsgeber !

Geändert von mal_anders (02-03-2004 um 15:48 Uhr)
mal_anders ist offline   Mit Zitat antworten
Alt 02-03-2004, 15:46   #12 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Danke für deinen Senf
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 02-03-2004, 17:45   #13 (permalink)
Inventar
 
Benutzerbild von Nightflyer
 
Registriert seit: Jul 2002
Beiträge: 6.882
Welche Lösung ist die beste wenn ein gesamtes Verzeichnis von vielen, registrierten Usern gelesen werden darf, die aber die URL's nicht direkt öffnen dürfen?
__________________
(\__/)
(='.'=)
(")_(")
Nightflyer ist offline   Mit Zitat antworten
Alt 02-03-2004, 17:51   #14 (permalink)
mein baby
 
Benutzerbild von mal_anders
 
Registriert seit: Jul 2002
Ort: Weimar
Beiträge: 1.443
wenn die rewrite_engine läuft, in jedem fall die erste.
__________________
musse rühre, musse probiere=>iss a pulsgeber !
mal_anders ist offline   Mit Zitat antworten
Alt 20-03-2004, 14:22   #15 (permalink)
Neuer User
 
Registriert seit: Mar 2004
Beiträge: 3
also, ich hab nun bei meinem webspace variante 2 angewandt! ich möchte eine einzige datei schützen und diese liegt direkt im ersten verzeichnis des verzeichnisbaumes. ich habe dann eine .htaccess und eine .htusers angelegt:

Zitat:
.htaccess

AuthType Basic
AuthName "LogAdmin"
AuthUserFile /.htusers

<testfile.txt>
require user Admin
</files>

Zitat:
.htusers

Admin:verschlüsseltes_passwort
beide dateien hab ich ebenfalls in die erste ebene des verzeichnisbaumes kopiert. wenn ich nun versuche auf eine datei zuzugreifen (egal welche) so kommt immer error 500! :-(

was mach ich falsch?
Dr. Lecter ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


LinkBacks (?)
LinkBack zu diesem Thema: http://www.flashforum.de/forum/php-und-mysql/tutorial-htaccess-schutz-fuer-jegliche-dateien-fuer-fortgeschrittene-117151.html
Erstellt von Für Art Datum Hits
bilder aus PW gesichertem Ordner laden Dieses Thema Refback 11-10-2009 22:52 4


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele