.htaccess ohne Passwort
Hans
- sonstiges
0 Der Martin0 Hans
0 Texter mit x0 Hans0 Kai3450 Texter mit x
Hi an alle,
also ich erstelle gerade eine Homepage, und möchte sicherstellen, dass auf die einzelnen Seiten nicht direkt zugegriffen werden kann. (Damit meine ich das nicht einfach der Pfad/dateiname.htm in den Browser eingegeben werden kann, sondern nur über eine andere Seite verlinkt werden kann.)
Soweit so gut, aber gibt es nun eine Möglichkeite mittels .htaccess dies _ohne_ Benutzernamen und Passwort zu realisieren. Ich möchte generell _alle_ Zugriffe, ausser die verlinkten von mir selbst, verbieten.
Meine Idee wäre es _alle_ IP-Adressen zu sperren, mit Ausnahme von 127.0.0.1 (Localhost). Was meint ihr dazu? Ein Tutorial zu dem ganzen wäre auch nicht schlecht, weil ich finde nur welche mit Überprüfung von Benutzernamen und Passwort.
Lg Hans
Hallo,
also ich erstelle gerade eine Homepage, und möchte sicherstellen, dass auf die einzelnen Seiten nicht direkt zugegriffen werden kann. (Damit meine ich das nicht einfach der Pfad/dateiname.htm in den Browser eingegeben werden kann, sondern nur über eine andere Seite verlinkt werden kann.)
das ist nicht möglich. Entweder eine Ressource ist per HTTP zugänglich, oder sie ist es nicht.
Meine Idee wäre es _alle_ IP-Adressen zu sperren, mit Ausnahme von 127.0.0.1 (Localhost). Was meint ihr dazu?
Dann könnte nur noch derjenige die Seiten abrufen, der direkt am Server sitzt - vorausgesetzt, da läuft ein Browser.
Akzeptiere die Tatsache, dass HTTP ein zustandsloses Protokoll ist. Für jeden Seitenaufruf gibt es nur einen Request (Anforderung) vom Browser des Besuchers, und eine Response (Antwort) vom Server.
Was den Request ausgelöst hat, kannst du serverseitig nicht feststellen[1]. Möglich, dass der Besucher einen Link auf deiner Seite geklickt hat; ebenso möglich, dass er die Adresse direkt eingegeben hat; möglich sogar, dass er das Dokument einfach mit wget herunterlädt. All das ist für dich nicht mit Sicherheit unterscheidbar.
Vor allem bist du anscheinend dem Denkfehler aufgesessen, der Request käme "von deinem Server", wenn der Besucher einem Link folgt. Das ist nicht so. Er kommt, wie in allen anderen Fällen auch, vom Client. Eine Überprüfung auf IP 127.0.0.0/8 (localhost) ist damit völlig sinnlos.
So long,
Martin
[1] Eine Abfrage des HTTP-Referers ist zwar möglich, aber oft nicht zielführend. Manche Browser sind so eingestellt, dass sie gar keinen Referer senden, andere so, dass sie einfach das Root-Dokument / der aktuellen Domain angeben, wieder andere senden irgendeinen Blödsinn.
Danke für die schnelle und verständliche Antwort.
Könnte ich dann einen Benutzer und ein Passwort erstellen, das bei einer Verlinkung mitgesendet wird, und bei einem Direktaufruf abgefragt wird? Oder wie geht man so etwas an?
lg Hans
Hallo Hans,
Danke für die schnelle und verständliche Antwort.
Könnte ich dann einen Benutzer und ein Passwort erstellen, das bei einer Verlinkung mitgesendet wird, und bei einem Direktaufruf abgefragt wird?
nein, aus zwei Gründen. Erstens ist es in HTTP nicht zulässig, Benutzernamen und Passwort in der URL (also im Link) mit zu übergeben. Man kann zwar analog zu FTP http://user:passwd@example.org/ notieren; das ist aber im HTTP-Standard ausdrücklich nicht erlaubt.
Opera und Firefox akzeptieren diese Notation trotzdem, fragen aber den Benutzer, ob er sich *wirklich* mit diesen Zugangsdaten anmelden will; Internet Explorer verweigert es in der Defaulteinstellung komplett, akzeptiert's aber ohne Rückfrage, wenn man es in der Konfiguration freischaltet. Wie sich andere Browser verhalten, weiß ich nicht.
Unterm Strich also: Keine brauchbare Lösung. Dazu kommt, dass jemand auch diese URL mit Benutzername und Passwort jederzeit direkt eingeben könnte, wenn sein Browser das unterstützt. Du hättest also nichts gewonnen.
Oder wie geht man so etwas an?
Die beste Methode, die mir im Moment einfällt: Sessions mit PHP.
Oder mit einer anderen Scriptsprache deiner Wahl beim Abruf der Startseite ein kurzlebiges Cookie setzen (wenige Minuten), und beim Abruf einer Unterseite kontrollieren, ob das Cookie existiert.
So long,
Martin
Die beste Methode, die mir im Moment einfällt: Sessions mit PHP.
Daran habe ich auch schon gedacht, aber ich dachte das .htaccess speziell auch für solche Einsatzgebiete wie meiner konzipiert wurde (entschuldigt die hochgestochene Ausdrucksweiße ;) ).
Lg Hans
Hi,
ich dachte das .htaccess speziell auch für solche Einsatzgebiete wie meiner konzipiert wurde (entschuldigt die hochgestochene Ausdrucksweiße ;) ).
.htaccess wurde für verzeichnislokale Serverkonfiguration konzipiert. Die Datei hat nicht das geringste mit irgendwelchen Schutzmechanismen zu tun. Und nein, auch HTTP-Authentication, was Du eigentlich zu meinen scheinst, wurde nicht dazu konzipiert, ein Grundpragma von HTTP zu ändern:
HTTP kennt kein "von". Ein Request ist ein Request ist ein Request.
Cheatah
Ich möchte generell _alle_ Zugriffe, ausser die verlinkten von mir selbst, verbieten.
Von den Benutzern mal abgesehen, ist dir die Wirkung auf Suchmaschinen klar? Und welchen Zweck soll das erfüllen?
Von den Benutzern mal abgesehen, ist dir die Wirkung auf Suchmaschinen klar? Und welchen Zweck soll das erfüllen?
Ein konkretes Beispiel: Ich habe zum Beispiel eine Seite die "registrierung.php" heißt. Auf der befindet sich das Registrierungsformular. Überprüft und gespeichter werden die eingegebenen Daten dann auf einer anderen Seite. Zum Beispiel auf "registrierung_abschluss.php".
Nun möchte ich verhindern das auf "registrierung_abschluss.php" direkt zugegriffen wird.
lg Hans
[latex]Mae govannen![/latex]
Von den Benutzern mal abgesehen, ist dir die Wirkung auf Suchmaschinen klar? Und welchen Zweck soll das erfüllen?
Ein konkretes Beispiel: Ich habe zum Beispiel eine Seite die "registrierung.php" heißt. Auf der befindet sich das Registrierungsformular. Überprüft und gespeichter werden die eingegebenen Daten dann auf einer anderen Seite. Zum Beispiel auf "registrierung_abschluss.php".
Nun möchte ich verhindern das auf "registrierung_abschluss.php" direkt zugegriffen wird.
Dann lege diese Dateien in eine Ordner, der oberhalb oder parallel zum Ordner, der document root darstellt, an.
Cü,
Kai
Dann lege diese Dateien in eine Ordner, der oberhalb oder parallel zum Ordner, der document root darstellt, an.
Die Ironie in deinem Beitrag dürfte Hans entgehen.
Ein konkretes Beispiel: Ich habe zum Beispiel eine Seite die "registrierung.php" heißt. Auf der befindet sich das Registrierungsformular. Überprüft und gespeichter werden die eingegebenen Daten dann auf einer anderen Seite. Zum Beispiel auf "registrierung_abschluss.php".
Nun möchte ich verhindern das auf "registrierung_abschluss.php" direkt zugegriffen wird.
Ich kann darin keinen Zweck erkennen.