2009-03-08 6 views
1

Meine PHP-Anwendung verwendet 404 Dokumente zum Generieren von HTML-Dateien, so dass mehrere Abfragen an die gleiche HTML-Datei nur dazu führen, dass die Generierung einmal ausgeführt wird.Schützen von HTML-Dateien mit .htaccess

Ich möchte Anfragen an die HTML-Dateien abfangen, so dass der Benutzer eine etablierte PHP-Sitzung benötigt, um die Dateien hochzuziehen.

Im besten Fall würde SESSION ID in der URL verwendet werden und erzwingen, dass es als weitere Authentifizierung verwendet werden könnte. Wenn Sie sich anmelden, erhalten Sie beispielsweise eine SessionID, und nur bestimmte HTML-Dateien sind für Sie zugänglich.

Ich bin mir bewusst, dass ich durch Ändern meiner Cookies eine Anfrage spoofieren könnte, aber das ist in Ordnung.

Wie würde ich das machen?

Antwort

3

So etwas wie dies funktionieren könnte (ich habe es nicht getestet):

RewriteCond %{HTTP_COOKIE} PHPSESSID=([a-zA-Z0-9]+) 
RewriteCond %{REQUEST_FILENAME} %{REQUEST_FILENAME}-%1.html 
RewriteRule^%{REQUEST_FILENAME}-%1.html 

Sie geht davon aus, dass Sie anhängen "-$session_id.html" auf Dateinamen ($session_id ist die PHP-Session-ID).

Es sollte sicher sein, und der Vorteil ist, dass Dateien direkt vom Web-Server bedient werden, ohne PHP überhaupt aufzurufen.

0

Versetzen Sie zwischengespeicherte Dateien aus Ihrem Webstamm heraus, aber immer noch an einem Ort, an dem PHP darauf zugreifen kann.

+0

Ich glaube nicht, dass dies schützt sie –

+0

Sie werden sicher sein (nur PHP-Skripte werden in der Lage sein, sie zu lesen), aber es ist nicht so effizient wie statische Dateien direkt liefern (PHP-Anfragen sind teurer, bricht PHP HTTP-Caching usw.) – Kornel

1

könnten Sie die Apache module mod_rewrite verwenden Anfragen von .html URLs an ein PHP-Skript zu umleiten:

RewriteEngine on 
RewriteRule \.html$ script.php [L] 

Der angeforderte URI-Pfad und Abfrage ist dann in der $_SERVER['REQUEST_URI'] Variable zur Verfügung.

3
SetEnvIf HTTP_COOKIE "PHPSESSID" let_me_in 
<Directory /www/static/htmls> 
    Order Deny,Allow 
    Deny from all 
    Allow from env=let_me_in 
</Directory> 

Natürlich Benutzer manuell solche Cookies in seinem Browser erstellen kann (es gibt Erweiterungen, die die für Firefox zu tun, und Sie können Ihren Browser-Cookie-Speicher immer bearbeiten).