¿Cómo evitar que un archivo tenga acceso directo a la URL?

Resuelto 夏期劇場 asked hace 12 años • 7 respuestas

Estoy usando Apache y tengo una carpeta web de muestra en mi host local , como:

      http://localhost/test/

Archivos en la testcarpeta:

     index.html  
     sample.jpg  
     .htaccess  

Fuente de muestra de index.html:

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

Cuando ejecuto el sitio web en http://localhost/test/, simplemente mostrará la imagen `sample.jpg' en la página.


Problema:

  • Quiero evitar que la imagen se muestre http://localhost/test/sample.jpgdirectamente en la barra de URL.

Nota: Descubrí que las siguientes soluciones funcionan cuando se prueban en todos los navegadores excepto Firefox .

夏期劇場 avatar Apr 20 '12 04:04 夏期劇場
Aceptado

Pruebe lo siguiente:

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

Devuelve 403, si accede a las imágenes directamente, pero permite que se muestren en el sitio.

Nota: Es posible que cuando abres alguna página con una imagen y luego copias la ruta de esa imagen en la barra de direcciones puedas ver esa imagen, es solo por el caché del navegador, de hecho esa imagen no se ha cargado desde el servidor ( de Davo, comentario completo a continuación) .

Ruslan Osipov avatar Apr 19 '2012 21:04 Ruslan Osipov

¡La regla de Rosipov funciona muy bien!

Lo uso en sitios activos para mostrar un mensaje en blanco o especial;) en lugar de un intento de acceso directo a archivos que prefiero proteger un poco de la vista directa. Creo que es más divertido que un 403 Prohibido.

Entonces, tomando la regla de Rosipov para redirigir cualquier solicitud directa a archivos {gif,jpg,js,txt} a '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]

Lo veo como una forma educada de no permitir el acceso directo a, digamos, archivos sensibles de un CMS como xml, javascript... teniendo en cuenta la seguridad: para todos estos robots que rastrean la web hoy en día, me pregunto qué hará su algoritmo a partir de mi ' mensajeparacurioso'.

tuk0z avatar Mar 27 '2013 20:03 tuk0z

Según tus comentarios, esto es lo que necesitas:

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

Lo probé en mi servidor local y parece funcionar bien.

anubhava avatar Apr 19 '2012 21:04 anubhava

En primer lugar, busque dónde se encuentra el archivo de configuración principal de Apache httpd.conf. Si usas Debian, debería estar aquí: /etc/apache/httpd.conf. Usando algún editor de archivos como Vim o Nano, abra este archivo y busque la línea que se ve así:

Options Includes Indexes FollowSymLinks MultiViews

luego elimine los índices de palabras y guarde el archivo. La línea debería verse así:

Options Includes FollowSymLinks MultiViews

Una vez hecho esto, reinicie Apache (por ejemplo, /etc/init.d/apache restart en Debian). ¡Eso es todo!

Kaushal avatar Jun 14 '2012 06:06 Kaushal