148 votes

Comment interdire l'accès à un fichier dans .htaccess ?

J'ai le fichier .htaccess suivant :

RewriteEngine On
RewriteBase /

# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

# Protect log.txt
<Files ./inscription/log.txt>
Order Allow,Deny
Deny from all
</Files>

# Disable directory browsing
Options All -Indexes

J'essaie d'interdire aux visiteurs l'accès au fichier suivant :

domain.com/inscription/log.txt

mais ce que j'ai ci-dessus ne fonctionne pas : Je peux toujours accéder au fichier à distance depuis le navigateur.

245voto

Jon Lin Points 88615

Dans un fichier htaccess, la portée de la balise <Files> ne s'applique qu'à ce répertoire (je suppose que cela permet d'éviter toute confusion lorsque des règles/directives dans le htaccess de sous-répertoires sont appliquées et remplacent celles du parent).

Donc vous pouvez avoir :

<Files "log.txt">  
  Order Allow,Deny
  Deny from all
</Files>

Pour Apache 2.4+, vous utiliserez :

<Files "log.txt">  
  Require all denied
</Files>

Dans un fichier htaccess dans votre inscription répertoire. Vous pouvez également utiliser mod_rewrite pour gérer les deux cas en refusant l'accès au fichier htaccess ainsi qu'au fichier log.txt :

RewriteRule /?\.htaccess$ - [F,L]

RewriteRule ^/?inscription/log\.txt$ - [F,L]

21voto

Yaşar Xavan Points 102

Forte correspondance des motifs - C'est la méthode que j'utilise ici à Perishable Press. En utilisant une correspondance forte des motifs, cette technique empêche l'accès externe à tout fichier contenant " .hta ", " .HTA ", ou toute autre combinaison insensible à la casse. Pour illustrer, ce code empêchera l'accès par l'une des requêtes suivantes :

  • .htaccess
  • .HTACCESS
  • .hTaCcEsS
  • testFILE.htaccess
  • nom de fichier.HTACCESS
  • FILEROOT.hTaCcEsS

..etc., etc. Il est clair que cette méthode est très efficace pour sécuriser les fichiers HTAccess de votre site. De plus, cette technique comprend également le fortifiant " Satisfaire tout le monde . Notez que ce code doit être placé dans le fichier HTAccess racine de votre domaine :

# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

18voto

Nik Dow Points 91

Je ne crois pas que la réponse actuellement acceptée soit correcte. Par exemple, j'ai l'exemple suivant .htaccess dans le Root d'un serveur virtuel (apache 2.4) :

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>

Cela empêche l'accès externe à reminder.php qui se trouve dans un sous-répertoire. J'ai un fichier similaire .htaccess sur mon serveur Apache 2.2 avec le même effet :

<Files "reminder.php">
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127.0.0.1
     Allow from xxx.yyy.zzz.aaa
</Files>

Je n'en suis pas sûr mais je soupçonne que c'est la tentative de définir spécifiquement le sous-répertoire dans le fichier .htaccess fichier, viz <Files ./inscription/log.txt> qui le fait échouer. Il serait plus simple de mettre le .htaccess dans le même répertoire que log.txt c'est-à-dire dans le inscription et il fonctionnera à cet endroit.

4voto

Rakesh Dongarwar Points 337

Placez la ligne ci-dessous dans votre fichier .htaccess et remplacez le nom du fichier comme vous le souhaitez

RewriteRule ^(test\.php) - [F,L,NC]

-5voto

Eh bien, vous pourriez utiliser le <Directory> balise par exemple :

<Directory /inscription>
  <Files log.txt>
    Order allow,deny
    Deny from all
  </Files>
</Directory>

Ne pas utiliser ./ parce que si vous utilisez juste / il regarde le répertoire racine de votre site.

Pour un exemple plus détaillé, visitez http://httpd.apache.org/docs/2.2/sections.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X