Refuser l'accès à des types de fichiers spécifiques dans un répertoire spécifique
Pour certaines applications, les utilisateurs sont en mesure de télécharger leurs propres fichiers. Puisque cela peut être des fichiers très volumineux, ils sont autorisés à télécharger par l'intermédiaire de leur propre client FTP.
Bien sûr, je ne voudrais pas à télécharger certains fichiers PHP avec laquelle ils peuvent accéder à tous les autres fichiers sur le serveur. Une des façons que je veux éviter ce comportement est en refusant l'accès à certains types de fichiers (comme php, rb, py, etc.) seulement dans ces dossiers.
J'ai trouvé des façons de refuser l'accès aux dossiers, aux fichiers, aux fichiers dans des dossiers, mais rien sur les types de fichiers dans des dossiers.
J'ai essayé de combiner ce que j'ai trouvé, comme:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
changer de
<Files uploads/"\.inc$">
Order allow,deny
Deny from all
</Files>
ou d'autres moyens
RewriteRule ^(\.php) - [F,L,NC]
à
RewriteRule ^(uploads/\.php) - [F,L,NC]
Cependant, je ne peux pas savoir ce que la syntaxe que je devrais utiliser.
Ainsi, par exemple, j'ai pu avoir les éléments suivants (exemple de base):
/index.php
/uploads/
hack.php
hack.rb
hack.py
pony.jpg
Je veux pirater.php/rb/py à être indisponible, mais tout le reste pour être disponible. Quel syntaxe dois-je utiliser?
source d'informationauteur Dennis
Vous devez vous connecter pour publier un commentaire.
La FilesMatch directive fonctionne uniquement sur les noms de fichiers. Il ne regarde pas à la partie du chemin d'accès à tous.
Si vous souhaitez spécifier des directives à la racine .fichier htaccess pour le contrôle d'un sous-répertoire, vous pouvez utiliser mod_rewrite.
Essayez ceci:
Permettra de bloquer un nom de fichier se terminant par .php ou .rb ou .py dans le /uploads répertoire ou de ses sous-répertoires. Par exemple, il permet de bloquer:
Noter qu'il n'y a pas de slash dans la règle de réécriture. Le chemin que vous devez utiliser dans la directive sera différente selon l'endroit où il est placé. La directive ci-dessus, s'il est placé dans la racine du document .fichier htaccess, de travail pour les fichiers dans un répertoire appelé uploads qui est directement sous la racine du document.
Alors que les réponses ci-dessus à votre question, il serait plus sûr pour permettre uniquement les fichiers spécifiques plutôt que d'essayer de bloquer les fichiers. Souvent, un serveur va exécuter des fichiers avec des extensions autres que ceux que vous avez énumérés.
Vous pourriez faire quelque chose comme ceci:
Ci-dessus, si l'URI de la demande commence avec /uploads mais ne prend pas fin avec l'une des extensions spécifiées, alors que c'est interdit. Vous pouvez changer les extensions de ce qui convient à vos besoins. Mais de cette façon, vous pouvez autoriser les extensions en tant que de besoin plutôt que de découvrir trop tard que vous avez manqué de blocage.
Cette règle (à partir de votre question)
va bloquer
mais il ne permet pas pour quoi que ce soit entre le nom du répertoire et de l'extension de fichier.
Si vous allez utiliser rewirte règles, vous pouvez en savoir plus sur les regexp. Je fais souvent référence à http://www.regular-expressions.info quand j'ai besoin de chercher quelque chose.
Vous pouvez mettre un .htaccess dans le
upload
répertoire. Les directives s'appliquent alors à ce répertoire et les répertoires ci-dessous. Voir Comment sont appliquées les directives pour plus de détails.Donc, une .htaccess avec
FilesMatch
peut restreindre l'accès aux fichiers correspondant*.inc
*.php
et ainsi de suite, quand il est dans lapublic
répertoireVous pouvez utiliser La plus simple et la un paquebot solution de refuser l'accès à certen types de fichiers:
Ce sera de retour d'une 403 Accès interdit d'erreur pour les clients si ils essaient d'accéder à /dossier/fichier.extension .