2009-03-08 5 views
1

Mon application PHP utilise 404 Documents pour générer des fichiers HTML afin que plusieurs requêtes dans le même fichier HTML ne fassent qu'exécuter la génération une seule fois.Protection des fichiers HTML avec .htaccess

Je voudrais intercepter des requêtes aux fichiers HTML afin que l'utilisateur ait besoin d'une session PHP établie afin de récupérer les fichiers. Dans le meilleur des cas, SESSION ID serait utilisé dans l'URL et pourrait être utilisé comme une authentification supplémentaire. Par exemple, si vous vous connectez, vous obtiendrez un identificateur de session et ne rendre accessibles que certains fichiers HTML. Je suis conscient qu'en changeant mes cookies, je pourrais usurper une demande, mais ce n'est pas grave.

Comment ferais-je cela?

Répondre

3

Quelque chose comme cela pourrait fonctionner (je ne l'ai pas testé):

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

Il suppose que vous ajoutez "-$session_id.html" aux noms de fichiers ($session_id est l'ID de session de PHP).

Il devrait être sûr, et l'avantage est que les fichiers sont servis par le serveur Web directement sans invoquer PHP du tout.

0

Mettez vos fichiers en cache hors de votre racine Web, mais toujours dans un endroit où PHP peut y accéder.

+0

Je ne pense pas que cela les protège –

+0

Ils seront en sécurité (seuls les scripts PHP pourront les lire), mais ils ne seront pas aussi efficaces que de servir directement les fichiers statiques (les requêtes PHP sont plus chères, les pauses PHP Mise en cache HTTP, etc.) – Kornel

1

Vous pouvez utiliser le Apache module mod_rewrite pour rediriger les requêtes de .html URL vers un script PHP:

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

Le chemin URI demandé et requête est alors disponible dans la variable $_SERVER['REQUEST_URI'].

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> 

de l'utilisateur peut bien sûr créer manuellement ce cookie dans son navigateur (il y a des extensions qui font que pour Firefox, et vous pouvez toujours modifier le magasin de cookies de votre navigateur).

Questions connexes