web-dev-qa-db-fra.com

Comment empêcher un fichier d'accéder directement à une URL?

J'utilise Apache et j'ai un exemple de dossier Web sur mon hôte local, comme:

      http://localhost/test/

Fichiers dans le dossier test:

     index.html  
     sample.jpg  
     .htaccess  

Exemple de source de index.html:

<html>
  <body>
    <img src="sample.jpg" />
  </body>
</html>

Quand je lance le site web à http://localhost/test/, cela affichera simplement l’image `sample.jpg 'sur la page.


Problème:

  • Je veux empêcher que l'image s'affiche comme http://localhost/test/sample.jpg directement dans la barre d’URL.

Remarque: J'ai constaté que les solutions ci-dessous fonctionnent lorsqu'elles sont testées sur tous les navigateurs sauf Firefox.

61
夏期劇場

Essayez ce qui suit:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

Renvoie 403, si vous accédez directement aux images, mais leur permet d'être affichées sur le site.

Remarque: Il est possible que lorsque vous ouvrez une page avec une image, puis que vous copiez le chemin de cette image dans la barre d'adresse, vous puissiez voir cette image, c'est uniquement à cause du cache du navigateur. pas été chargé à partir du serveur (de Davo, commentaire complet ci-dessous) .

99
Ruslan Osipov

la règle de Rosipov fonctionne très bien!

Je l'utilise sur des sites en direct pour afficher un message vide ou spécial;) à la place d'une tentative d'accès direct à des fichiers que je préfère protéger un peu de la vue directe. Je pense que c'est plus amusant qu'une 403 Forbidden.

Donc, en prenant la règle de rosipov pour rediriger n'importe quelle directe requête en {gif, jpg, js, txt} vers "messageforcurious":

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

Je le vois comme un moyen poli d’interdire l’accès direct, par exemple, à un CMS fichiers sensibles comme xml, javascript ... avec la sécurité à l’esprit: à tous ces robots qui parcourent le Web de nos jours, je me demande quoi leur algo fera de mon 'message forcé'.

22
tuk0z

Tout d’abord, recherchez où se trouve le fichier de configuration principal d’Apache, httpd.conf. Si vous utilisez Debian, cela devrait être ici: /etc/Apache/httpd.conf. En utilisant un éditeur de fichier comme Vim ou Nano, ouvrez ce fichier et trouvez la ligne qui se présente comme suit:

Options Includes Indexes FollowSymLinks MultiViews

puis supprimez Word Indexes et enregistrez le fichier. La ligne devrait ressembler à celle-ci:

Options Includes FollowSymLinks MultiViews

Ensuite, redémarrez Apache (par exemple, /etc/init.d/Apache restart dans Debian). C'est ça!

8
Kaushal

Selon vos commentaires, voici ce dont vous avez besoin:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

Je l'ai testé sur mon hôte local et il semble bien fonctionner.

7
anubhava

Lorsque je l'utilise sur mon serveur Web, puis-je renommer uniquement l'hôte local, comme ceci:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]
0
Newbie