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.

snoob dogg
la source
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
anubhava
la source
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.

Amit Verma
la source
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 
Andy
la source
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é

Arthankamal
la source
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
Marvin
la source
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 .

Le parrain
la source
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

ravisoni
la source
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 !!

Meraj
la source
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);
RatajS
la source
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.

Chimdi
la source