2012-09-11 1 views
2

Je développe actuellement un module Apache et après avoir analysé les données POST d'une requête vers une autre page, je fais une redirection interne vers une page PHP qui fait quelques opérations finales et échos sur une balise meta refresh HTML. Cela, à son tour, actualise le navigateur en demandant la première page.Comment faire Apache restreindre l'accès au fichier sauf aux redirections internes

Le problème est que je ne souhaite pas que des demandes externes explicites puissent accéder à cette page, mais que le module effectue correctement la redirection interne.

Est-il possible que je peux le faire? Je l'ai essayé d'utiliser:

<Directory /var/www/cc_jnlp/php/> 
    <Files session_init.php> 
     Order allow,deny 
     Deny from all 
    </Files> 
</Directory> 

... mais que seulement bloque toutes les demandes, que c'était ou non une redirection interne.

+0

définir un cookie avec la redirection? –

+0

Si quelqu'un reçoit le cookie une fois, il peut être utilisé dans des demandes successives, et la falsification s'ensuit. – ravemir

+1

non, vous pouvez envoyer un cookie "une fois valide", géré par votre programme car ce n'est pas une fonctionnalité par défaut –

Répondre

0

Une bonne approche serait d'envoyer quelque chose à la demande qui identifierait comme légitime. Ma première approche était de générer un grand nombre aléatoire au début de l'activité du serveur, et de le transmettre avec les données. Le module identifie toutes les demandes à cette page et refuse celles qui n'ont pas inclus cet argument de requête spécifique. Le problème était, cela était susceptible de bruteforcing, et la seule façon de le contrer était d'augmenter la taille de la clé. Ma solution définitive utilisera le système Apache Notes pour transmettre les données à la place, et en supposant que seul le serveur Apache lui-même peut manipuler ces données, nous pouvons refuser toutes les demandes qui ne l'incluent pas.

0

Essayez avec la configuration suivante:

<Directory /var/www/cc_jnlp/php/> 
    <Files session_init.php> 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.1 
    </Files> 
</Directory> 
+0

Je ne peux pas le tester en ce moment, mais je suppose que lorsque je fais la redirection interne, l'adresse de la demande d'origine est conservée, ainsi que la restriction sur les demandes externes à cette page. Si cette page ne fonctionne pas, je ne peux pas établir de session. – ravemir

+1

@ravemir Vous avez raison, j'ai probablement mal compris votre question. Peut-être que [cette réponse] (http://stackoverflow.com/questions/5769459/mod-rewrite-allow-redirect-but-prevent-direct-access) peut être plus utile? –

+0

Ce n'est pas la solution la plus satisfaisante, car une fois la clé secrète découverte, le système est compromis. Cependant, en randomisant cette valeur au démarrage, on pourrait atténuer ce risque. – ravemir

Questions connexes