web-dev-qa-db-fra.com

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, j'ai un problème. J'ai une structure de répertoire comme celle-ci:

-/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 Server-side includes dans les répertoires et sous-répertoires de/USERS

Est-ce possible de le faire et comment :) )? Merci d'avance.

BTW, j'utilise le serveur WAMP

61
user142019

Essayez de désactiver l'option engine dans votre fichier .htaccess:

php_flag engine off
113
Gumbo

Pour désactiver tous les accès aux sous-répertoires (les plus sûrs), utilisez:

<Directory full-path-to/USERS>
     Order Deny,Allow
     Deny from All
 </Directory>

Si vous ne voulez bloquer que les PHP fichiers directement servis, faites:

1 - Assurez-vous de connaître les extensions de fichier reconnues par le serveur sous la forme PHP (et n'autorisez pas les personnes à les remplacer avec htaccess). L'un de mes serveurs est défini sur:

# Example of existing recognized extenstions:
AddType application/x-httpd-php .php .phtml .php3

2 - En fonction des extensions, ajoutez 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 utilisez Location pour faire correspondre les fichiers php (je préfère l'approche des fichiers ci-dessus)

<LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$">
     Order Deny,Allow
     Deny from All
</LocationMatch>
48
Lance Rushing

Si vous utilisez mod_php, vous pouvez insérer (soit dans un fichier .htaccess dans/USERS, soit dans votre fichier httpd.conf pour le répertoire USERS).

RemoveHandler .php

ou

RemoveType .php

(selon que PHP est activé avec AddHandler ou AddType)

Les fichiers PHP exécutés depuis 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 fichier php est utilisé avec Apache, il sera affiché en texte brut.

Éditer

La solution de Lance Rushing consistant à simplement refuser l'accès aux fichiers est probablement meilleure

13
Tom Haigh
<Directory /your/directorypath/>
     php_admin_value engine Off
</Directory>
10
Domus

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 à un collègue d'avoir un 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 en production. Suivez la réponse acceptée car elle bloque toute tentative d'exécution ou d'affichage de fichiers php.

Si vous voulez que les utilisateurs partagent des fichiers php (et permettent aux autres d’afficher le code source), il existe de meilleurs moyens de le faire, comme git, wiki, etc.

Cette méthode devrait être évitée! (Vous avez été prévenu. Vous l'avez laissé ici à des fins éducatives)

9
lepe

Aucune de ces réponses ne fonctionne pour moi (générer une erreur 500 ou ne rien faire). Cela est probablement dû au fait que je travaille sur un serveur hébergé où je ne peux pas accéder à la configuration Apache.

Mais cela a fonctionné pour moi:

RewriteRule ^.*\.php$ - [F,L]

Cette ligne générera une erreur 403 Forbidden pour toute URL se terminant par .php et se termine dans ce sous-répertoire.

@ Oussama me conduire dans la bonne direction ici , grâce à lui.

3

C’est peut-être exagéré - mais faites attention à ne rien faire qui repose sur l’extension de PHP fichiers étant .php - et si quelqu'un venait plus tard et ajoutait des gestionnaires pour .php4 ou même .html donc ils sont gérés par PHP. Vous feriez mieux de servir des fichiers à partir de ces répertoires à partir d'une instance différente d'Apache ou de quelque chose qui ne sert que du contenu statique.

1
Dominic Rodger

En production, je préfère rediriger les requêtes vers des fichiers .php sous les répertoires où le traitement de PHP doit être désactivé vers une page d'accueil ou vers une page 404. Cela ne révélera aucun code source (pourquoi la recherche Les moteurs devraient indexer les codes malveillants téléchargés?) et sembleront plus conviviaux pour les visiteurs et même pour les pirates malveillants qui tentent d’exploiter les contenus.

<DirectoryMatch "^${docroot}/(image|cache|upload)/">
    <FilesMatch "\.php$">
        # use one of the redirections
        #RedirectMatch temp "(.*)" "http://${servername}/404/"
        RedirectMatch temp "(.*)" "http://${servername}"
    </FilesMatch>
</DirectoryMatch>

Ajustez les directives selon vos besoins.

0
Sergey Podushkin