Comment refuser l'accès à un fichier dans.htaccess
J'ai ce qui suit .fichier htaccess:
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 d'accéder 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 à partir du navigateur à distance.
5 réponses
Dans un fichier htaccess, la portée de la directive <Files>
ne s'applique qu'à ce répertoire (Je suppose que pour éviter toute confusion lorsque les règles / directives dans le htaccess des sous-répertoires sont appliquées en remplaçant celles du parent).
Donc vous pouvez avoir:
<Files "log.txt">
Order Allow,Deny
Deny from all
</Files>
Dans un fichier htaccess dans votre inscription
répertoire. Ou vous pouvez utiliser mod_rewrite pour gérer les deux cas refuser l'accès au fichier htaccess ainsi qu'au journal.txt:
RewriteRule /?\.htaccess$ - [F,L]
RewriteRule ^/?inscription/log\.txt$ - [F,L]
Forte de correspondance au modèle - C'est la méthode que j'utilise ici de Presse Périssables. En utilisant une forte correspondance de motifs, cette technique empêche l'accès externe à tout fichier contenant " .hta", ".HTA ", ou toute combinaison insensible à la casse de ceux-ci. Pour illustrer, ce code empêchera l'accès par l'un des moyens suivants demandes:
- .htaccess
- .HTACCESS
- .hTaCcEsS
- testFILE.htaccess
- Nom du fichier.HTACCESS
- FILEROOT.hTaCcEsS
..etc., etc. De toute évidence, cette méthode est très efficace pour sécuriser les fichiers HTAccess de votre site. De plus, cette technique inclut également la directive fortifiante "Satisfy All ". 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>
Je ne crois pas que la réponse actuellement acceptée soit correcte. Par exemple, j'ai le fichier .htaccess
suivant à la racine 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 .htaccess
similaire 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 ne sais pas avec certitude mais je soupçonne que c'est la tentative de définir le sous-répertoire spécifiquement dans le fichier .htaccess
, à savoir <Files ./inscription/log.txt>
ce qui le cause échouer. Il serait plus simple de placer le fichier .htaccess
dans le même répertoire que log.txt
c'est-à-dire dans le répertoire inscription
et cela fonctionnera là.
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]
Eh bien, vous pouvez utiliser la balise <Directory>
par exemple:
<Directory /inscription>
<Files log.txt>
Order allow,deny
Deny from all
</Files>
</Directory>
N'utilisez pas ./
car si vous utilisez simplement /
Il regarde le répertoire racine de votre site.
Pour un exemple plus détaillé visite http://httpd.apache.org/docs/2.2/sections.html