10 votes

.htaccess pour restreindre l'accès au dossier

J'ai un fichier php qui hérite (inclut) d'autres fichiers PHP. Tous les fichiers hérités sont situés dans un dossier appelé "includes". Je veux pouvoir restreindre tout accès direct à ce dossier. Seuls les fichiers PHP du serveur peuvent communiquer avec les fichiers du dossier "includes". Comment puis-je utiliser le fichier .htaccess pour atteindre cet objectif ?

Pour info, j'ai utilisé le code suivant et cela n'a pas fonctionné

Order deny,allow
deny from all

Toute aide serait appréciée

19voto

Reuben Points 1571

Si vous n'avez pas la possibilité de déplacer le dossier "includes" en dehors de la zone racine du document et d'utiliser le chemin include_path (c'est-à-dire que vous ne pouvez pas y accéder depuis le web), entrez alors

deny from all

dans un répertoire .htaccess dans ce répertoire.

Cependant, une autre solution consiste à utiliser une directive DEFINES pour n'autoriser l'accès à ces programmes inclus que par des fichiers autorisés spécifiques. Par exemple, mettez

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?>

en haut des fichiers d'inclusion, et ensuite mettre

<?php define('ACCESS_ALLOWED', 1); ?>

dans les programmes qui sont autorisés à inclure ces fichiers.

Ceci empêchera les GETs occasionnels vers ces fichiers include de les exécuter, et fonctionnera pour n'importe quel serveur web, pas seulement ceux supportant les fichiers htaccess.

3voto

jujule Points 4353

Dans votre includes/.htaccess :

Order deny,allow
deny from all

2voto

Ruel Points 6140

En fait, vous pouvez simplement utiliser un index.php et passer un en-tête 404 en utilisant header() :

header('HTTP/1.1 404 Not Found', 404);

IMO, c'est mieux qu'un 403, puisque c'est comme si le dossier n'existait pas. Quant aux fichiers d'inclusion, mettez cette ligne au-dessus du premier include/require du fichier principal :

define('INCLUDED', true);

Et sur chaque fichier du répertoire include, mettez ceci en haut de page.

if (!defined(INCLUDED)) {
    header('HTTP/1.1 404 Not Found', 404);
}

1voto

starkeen Points 29161

Vous pouvez refuser l'accès direct au dossier en utilisant les directives suivantes dans htaccess ou server.config :

Solution basée sur les mod-alias

Redirect 403 ^/folder/.+$

Cela redirigera tous les fichiers et répertoires de /folder/ vers la page d'erreur interdite 403.

Solution de base de la réécriture modulaire :

RewriteEngine on

RewriteRule ^/?folder/.+$ - [F]

0voto

Keith Points 476

Selon les éventuelles autres options définies à un niveau supérieur, vous devrez peut-être utiliser :

Satisfy all
Order deny,allow
Deny from all

J'ai rencontré ce problème lorsque le répertoire supérieur a défini l'authentification de base en incluant la ligne :

Satisfy any

Cela empêchait mon refus de prendre effet car les utilisateurs étaient authentifiés.

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