Refuser l'accès à un dossier spécifique dans .htaccess


131

J'essaie de refuser aux utilisateurs d'accéder au site/includesdossier en manipulant l'URL.

Je ne sais pas si je dois tout refuser et faire manuellement des exceptions individuelles pour autoriser, si je peux simplement refuser ce dossier, ou s'il existe une fonction de réécriture qui peut être utilisée.

Exemple spécifique: je ne veux pas voir les fichiers du répertoire en tapant localhost/site/includesdans l'URL.


1
juste pour interdire l'écriture de répertoires Options -Indexesdans le fichier .htaccess situé dans le dossier racine

Réponses:


206

Créez un site/includes/.htaccessfichier et ajoutez cette ligne:

Deny from all

5
Hey!! anubhava J'ai utilisé cela pour désactiver l'accès direct à mes fichiers api dans le dossier / api, mais maintenant tous les appels de service Web envoient un statut interdit 403 .. Je veux juste bloquer l'accès lorsque quelqu'un y accède à partir du navigateur.
ravisoni

9
Pour un serveur Web, il n'y a pas de réelle différence entre les requêtes entre navigateur et non-navigateur.
anubhava le

J'utilise nginx et je ne peux pas utiliser .htaccess. alors, comment puis-je faire ça sans .htaccess? merci
Shafizadeh

Comment puis-je accéder aux fichiers du dossier / sous-dossier si je refuse de tout? Les fichiers dans le dossier / sous-dossier donnent une erreur 404.
Vikas Khunteta du

2
Deny from allne donnera pas 404 mais 403. Vous pouvez toujours accéder aux fichiers / dossiers en utilisant PHP / Perl etc. mais pas en utilisant une requête Web. Vous pouvez ouvrir une nouvelle question si cela ne répond pas à votre requête.
anubhava du

52

Vous pouvez également refuser l'accès à un dossier en utilisant RedirectMatch

Ajoutez la ligne suivante à htaccess

RedirectMatch 403 ^/folder/?$

Cela renverra une 403 forbiddenerreur pour le dossier, c'est-à-dire: http://example.com/folder/mais cela bloque l'accès aux fichiers et aux dossiers à l'intérieur de ce dossier, si vous voulez tout bloquer dans le dossier, changez simplement le modèle regex en ^/folder/.*$.

Une autre option est mod-rewrite Si url-rewrting-moduleest activé, vous pouvez utiliser quelque chose comme ce qui suit dans root/.htaccss:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

Cela carte interne une demande de folderla forbiddenpage d'erreur.


1
Avec Apache 2.22, la meilleure solution est la première: RedirectMatch .....
John

6
Préférez de beaucoup cette réponse, plutôt que de créer plusieurs .htaccessfichiers dans chaque répertoire pour lesquels je dois refuser l'accès.
DanMad

40

Dans un .htaccessfichier que vous devez utiliser

Deny from  all

Mettez ceci site/includes/.htaccesspour le rendre spécifique au includesrépertoire

Si vous souhaitez simplement interdire la liste des fichiers de répertoire, vous pouvez utiliser

Options -Indexes 

2
Est-ce récursif?
Abdillah

@Abdillah Yes it is
Oliver M Grech

18

Nous allons définir le répertoire pour être très sécurisé, en refusant l'accès à tous les types de fichiers. Vous trouverez ci-dessous le code que vous souhaitez insérer dans le fichier .htaccess.

Order Allow,Deny 
Deny from all 

Puisque nous avons maintenant défini la sécurité, nous voulons maintenant autoriser l'accès aux types de fichiers souhaités. Pour ce faire, ajoutez le code ci-dessous au fichier .htaccess sous le code de sécurité que vous venez d'insérer.

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

votre .htaccessfichier final ressemblera à

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

Source de Autoriser l'accès à des types de fichiers spécifiques dans un répertoire protégé


Cette réponse m'a évité beaucoup de maux de tête. Fonctionne comme un charme.
J'essaye tellement mais je pleure plus fort le

9

Vous pouvez créer un fichier .htaccess pour le dossier, qui aurait dû refuser l'accès avec

Deny from  all

ou vous pouvez rediriger vers une page 404 personnalisée

Redirect /includes/ 404.html

6

Mettez simplement .htaccess dans le dossier que vous souhaitez restreindre

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

Source: sources MantisBT .


4

Vous pouvez également le mettre IndexIgnore * à votre fichier racine .htaccess pour désactiver la liste des fichiers de tous les répertoires de votre site Web, y compris le sous-répertoire


6
Cela ne désactive pas la liste des fichiers, mais indique à l'autoindexeur d'ignorer tous les fichiers lors de la construction de l'index. Pour désactiver la liste des fichiers, vous utiliseriez Options -Indexes.
Vladimir Kornea

3

La création de index.php, index.html, index.htm n'est pas sécurisée. Attention, n'importe qui peut accéder à vos fichiers dans le répertoire spécifié en devinant le nom des fichiers. Par exemple: http://yoursite.com/includes/file.dat Donc, la méthode recommandée est de créer un fichier .htaccess pour refuser tous les visiteurs;). S'amuser !!


2

Vous pouvez le faire dynamiquement de cette façon:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);

0

Pour certaines raisons que je n'ai pas comprises, créer un dossier / .htaccess et ajouter Refuser de tout n'a pas fonctionné pour moi. Je ne sais pas pourquoi, cela semblait simple mais n'a pas fonctionné, l'ajout de RedirectMatch 403 ^ / dossier /.*$ à la racine htaccess a fonctionné à la place.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.