Désactiver PHP dans le répertoire (y compris tous les sous-répertoires) avec.htaccess
je crée un site web qui permet aux gens de télécharger des fichiers, des pages html, etc... Maintenant, je vais avoir un problème. J'ai une structure de répertoire comme ceci:
-/USERS
-/DEMO1
-/DEMO2
-/DEMO3
-/etc... (every user has his own direcory here)
-index.php
-control_panel.php
-.htaccess
maintenant je veux désactiver PHP, mais activer les Inclusions Côté Serveur dans les directions et les sous-répertoires inside / USERS
peut-on le faire (et comment :) )? Merci à l'avance.
BTW, j'utilise serveur WAMP
8 réponses
essayez de désactiver le engine
option dans votre .fichier htaccess:
php_flag engine off
Pour désactiver tous les accès aux sous-répertoires (plus sûr):
<Directory full-path-to/USERS>
Order Deny,Allow
Deny from All
</Directory>
si vous voulez bloquer seulement les fichiers PHP d'être servis directement, alors faites:
1 - Assurez-vous de savoir quelles extensions de fichier le serveur reconnaît comme étant PHP (et ne permettez pas aux gens de surcharger htaccess). Un de mes serveurs est réglé sur:
# Example of existing recognized extenstions:
AddType application/x-httpd-php .php .phtml .php3
2-Basé sur les extensions ajouter une Expression régulière à FilesMatch (ou LocationMatch)
<Directory full-path-to/USERS>
<FilesMatch "(?i)\.(php|php3?|phtml)$">
Order Deny,Allow
Deny from All
</FilesMatch>
</Directory>
Ou utiliser Emplacement afin de faire correspondre les fichiers php (je préfère les fichiers ci-dessus à l'approche)
<LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$">
Order Deny,Allow
Deny from All
</LocationMatch>
si vous utilisez mod_php, vous pouvez mettre (soit dans un .htaccess dans / USERS ou dans votre httpd.conf pour le répertoire des utilisateurs)
RemoveHandler .php
ou
RemoveType .php
(selon que PHP est activé en utilisant AddHandler ou AddType)
les fichiers PHP lancés à partir d'un autre répertoire pourront toujours inclure des fichiers dans /USERS (en supposant qu'il n'y ait pas de restriction open_basedir), car cela ne passe pas par Apache. Si un le fichier php est accédé en utilisant apache il sera serverd en tant que texte simple.
Modifier
la solution de Lance Rushing consistant à refuser l'accès aux fichiers est probablement meilleure
<Directory /your/directorypath/>
php_admin_value engine Off
</Directory>
cela affichera le code source au lieu de l'exécuter:
<VirtualHost *>
ServerName sourcecode.testserver.me
DocumentRoot /var/www/example
AddType text/plain php
</VirtualHost>
Je l'ai utilisé une fois pour permettre à d'autres collègues d'avoir accès en lecture au code source à partir du réseau local (juste une alternative rapide et sale).
attention ! :
comme Dan l'a souligné il y a quelque temps, cette méthode ne devrait jamais être utilisée dans la production. S'il vous plaît suivez la réponse acceptée car il bloque toute tentative de exécuter ou Afficher des fichiers php.
si vous voulez que les utilisateurs partagent des fichiers php (et laissent les autres Afficher le code source), il y a de meilleures façons de le faire, comme git, wiki, etc.
cette méthode doit être évitée! (vous avez été averti. Gauche ici à des fins éducatives)
cela pourrait être exagéré - mais faites attention à tout ce qui dépend de l'extension des fichiers PHP étant .php
- et si quelqu'un vient plus tard et ajoute des gestionnaires pour .php4
ou même .html
donc ils sont traités par PHP. Vous pourriez être mieux de servir des fichiers à partir de ces répertoires à partir D'une instance différente D'Apache ou quelque chose, qui ne sert que du contenu statique.
aucune de ces réponses ne fonctionne pour moi (soit en générant une erreur de 500 ou en ne faisant rien). Cela est probablement dû au fait que je travaille sur un serveur hébergé où je ne peux pas avoir accès à la configuration D'Apache.
mais cela a fonctionné pour moi:
RewriteRule ^.*\.php$ - [F,L]
cette ligne générera une erreur 403 interdite pour toute URL qui se termine par .php
et se termine dans ce sous-répertoire.
@Oussama conduisez-moi dans la bonne direction ici , grâce à lui.
essayez ceci:
<FilesMatch "\.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$">
SetHandler None
</FilesMatch>