.htaccess n’autorise l’access aux fichiers qu’à partir de includes

J’ai plusieurs sous-répertoires sur mon site et je souhaite que l’utilisateur ne puisse pas y accéder via l’URL mais en même temps, mes fichiers PHP principaux pour pouvoir les inclure ou les utiliser comme actions sur des formulaires ou des liens.

J’ai essayé d’utiliser un .htaccess avec

 Order Allow,Deny Deny from All  

mais il a refusé tout access, même depuis mes propres scripts. Logique comme je l’ai découvert, mais je ne peux pas savoir comment le faire fonctionner. Des idées?

PS Ma principale préoccupation est que certains fichiers ne sont pas inclus dans les principaux fichiers PHP, MAIS ils y sont liés et leur code se termine par un en- header('Location: ../index.php'); retour à la page principale du projet.

Je vois beaucoup de réponses avec Allow, Deny not Deny, Allow

L’ordre de cette affaire est important et pose le problème. Vous dites à l’ordinateur que le refus est plus important qu’autoriser, car il est répertorié en dernier. Pour vous montrer … si vous dites:

  Order Allow,Deny Deny From All Allow From xxx.xxx.xxx.xxx 127.0.0.1  

Vous dites d’abord Autoriser toute personne autorisée, puis Refuser tout … Qui nie toujours TOUT.

Si vous renversez sur Refuser, Autoriser vous dites Tout refuser, puis Autoriser tout le monde autorisé.

  Order Deny,Allow Deny From All Allow From xxx.xxx.xxx.xxx 127.0.0.1  

Autoriser la commande, étant plus important, car il s’agit de la commande finale, autorise donc ceux listés après la commande Autoriser.

xxx.xxx.xxx.xxx = Votre adresse IP

Faites ceci:

  Order Deny,Allow Allow from 192.168.100.123 127.0.0.1 Deny from all  

La liste des adresses IP sera des hôtes spécifiques que vous autorisez, comme localhost.

Cela fonctionne également avec la directive, pas seulement le fichier, si vous ne voulez que certains répertoires bloqués.

Il existe une méthode encore plus sûre. Stockez vos fichiers inclus sous les dossiers accessibles par le Web. Donc, si vos fichiers Web sont ici …

/var/www/mysite.com/

Stockez vos fichiers inclus ici:

/ var / comprend /

Puis incluez-les avec un chemin complet …

 include '/var/includes/myincludes.inc.php'; 

À partir du Web, le fichier myincludes.inc.php est complètement inaccessible.

Habituellement, pour protéger ces fichiers logiques de l’access public, vous pouvez

  1. mettez-le dans le répertoire protégé, au-dessus de htdocs
  2. ajoutez une vérification pour la constante publique .. if(!is_defined(some_root_const)){die();}
  3. changer l’extension en .inc ou quelque chose .. et refuser avec .htaccess basé sur cela

placez le code de votre application en dehors de votre dossier HTML public. Vous pouvez alors append un chemin d’inclusion en haut de vos scripts pour permettre à votre script d’y accéder comme s’ils se trouvaient dans le même dossier.

http://php.net/manual/en/function.set-include-path.php

En vous .htaccess, vous devrez spécifier les adresses IP, les hôtes que vous souhaitez autoriser et vous pouvez également le faire par répertoire. par exemple

  Order Allow,Deny Allow from 192.168.0.1 4.4.4.4 Deny from All   Order Allow, Deny Allow from All