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
Essayez de désactiver l'option engine
dans votre fichier .htaccess:
php_flag engine off
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>
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
<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 à 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)
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.
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.
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.