web-dev-qa-db-fra.com

Rendre un fichier invisible à distance

J'ai un fichier PHP qui stocke des informations de connexion pour une partie de mon site Web. Ce n'est pas "lisible" sur le Web, ce qui est bien. C'est à dire. il est vide lorsque vous y accédez depuis le Web.

Cependant, même s'il est vide, je préférerais que le serveur renvoie un message d'erreur 403 lorsque les utilisateurs y accèdent. Puis-je utiliser .htaccess pour que le serveur retourne cette erreur? Quelle est la bonne façon de faire cela?

3
posfan12

Ceci peut être facilement fait en utilisant Deny from all:

<Files "filetoblock.php">
    Order Allow,Deny
    Deny from all
</Files>

Cela donnera également un statut 403.

3
Simon Hayter

Ce n'est pas "lisible" du Web

Ce que vous voyez est la sortie après le traitement du fichier PHP. Étant donné que vous ne définissez probablement que quelques variables, il n'y a pas de sortie, mais celle-ci est toujours traitée. Si PHP échouait ou si le fichier était erroné/corrompu, le contenu de PHP pourrait être exposé.

Idéalement, vous placeriez simplement ce fichier en dehors/au-dessus de la racine du document. De cette façon, vous n'avez rien à faire pour empêcher le public de le voir et le sera toujours si quelque chose de répréhensible se produisait (par exemple si votre .htaccess était supprimé accidentellement!).

Pour bloquer ceci avec mod_rewrite dans .htaccess:

RewriteEngine On
RewriteRule ^file-to-block\.php$ - [F]

Ce qui précède devrait être placé près du haut de votre fichier .htaccess.

Notez cependant que si vous incluez un autre fichier .htaccess dans un sous-répertoire, qui utilise également mod_rewrite, cette directive peut être remplacée.


Cependant, il serait préférable de bloquer (403) ces fichiers avec mod_authz_Host (Apache 2.2) ou mod_authz_core (Apache 2.4). Pour Apache 2.2, voir la réponse de Simon.

Sur Apache 2.4, utilisez mod_authz_core:

<Files "file-to-block.php">
    Require all denied
</Files>

Sinon, pour envoyer un 404 non trouvé au lieu d'un 403 interdit, vous pouvez modifier la directive mod_rewrite ci-dessus:

RewriteRule ^file-to-block\.php$ - [R=404,L]
4
MrWhite