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

55
demandé sur Tor Valamo 2009-08-13 17:20:11

8 réponses

essayez de désactiver le engine option dans votre .fichier htaccess:

php_flag engine off
106
répondu Gumbo 2009-08-13 13:46:37

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>
40
répondu Lance Rushing 2014-01-10 14:13:44

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

11
répondu Tom Haigh 2009-08-13 13:32:17
<Directory /your/directorypath/>
     php_admin_value engine Off
</Directory>
8
répondu Domus 2014-02-18 22:02:38

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)

7
répondu lepe 2017-05-01 02:34:42

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.

1
répondu Dominic Rodger 2009-08-13 13:36:26

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.

1
répondu Fabien Quatravaux 2017-11-06 14:20:04

essayez ceci:

    <FilesMatch "\.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$">
    SetHandler None
    </FilesMatch>
-3
répondu DOBss 2015-09-10 05:46:33