Hallo Christian,
bei PHP/CGI gibt's ein ähnliches Feature; da wird
geprüft, ob ein Redirect passiert ist und wenn
nicht, dann wird abgebrochen.
Basiert leider auf der nicht-standard CGI-Variable
REDIRECT_STATUS aber da auf der Website sowieso nur
was von Apache steht ... (genaueres unter
http://www.php.net/manual/en/security.cgi-bin.php)
ja, in dieser Richtung bin ich gerade am Probieren.
REDIRECT_STATUS löst das Problem in meinem Fall leider
nicht - ich habe sowohl bei einem legalen als auch
bei einem illegalen Zugriff denselben Inhalt in dieser
Environment-Variablen vorgefunden (so daß ich mich nun
wundere, was PHP an dieser Stelle genau macht ...).
Meine Hoffnungen setze ich im Moment auf die Environ-
ment-Variable REDIRECT_URL - diese scheint in jedem
Fall den URL zu enthalten, der eigentlich angefordert
wurde (wobei allerdings gewisse Übersetzungen, etwa
Directory Defaulting, bereits erledigt sind - der URL
ist bereits kanonisiert).
An diesem Wert kann ich offenbar unterscheiden, ob
- das Skript explizit aufgerufen wurde (dann ist
REDIRECT_URL gleich concat (SCRIPT_NAME, PATH_INFO))
oder - ein normaler Zugriff via Handler erfolgte (dann ist
REDIRECT_URL gleich PATH_INFO)
REQUEST_URI hat einen ganz ähnlichen Inhalt, ist aber
leider noch nicht übersetzt, so daß ich diesen Wert
für Vergleiche nicht heranziehen kann: Bei direkten
Dateizugriffen über den Skript-Aufruf sind REQUEST_URL
und REDIRECT_URL gleich, nicht aber bei Zugriffen auf
Directory Defaults etc.
Meine aktuelle Idee wäre die defensive Variante:
1. Falls PATH_TRANSLATED leer,
=> Selbsttest-Dialog-Aufruf
2. sonst
a) falls REDIRECT_URL gleich PATH_INFO
=> normale Operation
b) sonst => HTTP/403 (Forbidden).
Vielleicht verbiete ich damit zuviel, falls durch
irgendwelche weiteren Übersetzungen (mod_rewrite?)
die Bedingung 2a) nicht mehr gelten sollte ... das
wäre im Einzelnen noch zu testen.
Viele Grüße
Michael