2012-04-19 20 views
52

Esta es mi segunda publicación por el mismo problema. Porque la publicación anterior necesitaba un poco más de ejemplo.(htaccess) ¿Cómo prevenir un archivo de ACCESO DIRECTO a URL?

Ok permite decir una vez más, que estoy usando Apache y tengo una carpeta muestra de banda (en mi localhost) como:

En la carpeta, los archivos estarán :

  • index.html
  • sample.jpg
  • .htaccess

El "index.html" simplemente se incluyen:

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

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

ENTONCES El problema aquí es:

  • Quiero evitar la proyección de imagen como http://localhost/test/sample.jpg directamente en la barra de direcciones.

Nota:
Después de un día de conseguir respuestas a continuación, he encontrado todas las soluciones lógicamente funcionan, pero un problema con Firefox. Quiero decir, las respuestas a continuación dan la solución al probar en cada navegador pero no con Firefox.

Respuesta

84

intente lo siguiente:

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

devoluciones 403, si tiene acceso a las imágenes directamente, pero permite que se muestren en el sitio.

Nota: Es posible que al abrir una página con imagen y luego copiar la ruta de esa imagen en la barra de direcciones pueda ver esa imagen, solo por la memoria caché del navegador, de hecho esa imagen no tiene se ha cargado desde el servidor (de Davo, comentario completo a continuación).

+1

¿por qué es el primer 'RewriteCond'? Ese caso debería estar cubierto por la segunda directiva '. * $'? –

+0

He intentado esto y funciona muy bien en localhost. esta es probablemente una pregunta tonta, pero ¿seguirá funcionando este código si lo cargué en mi servidor? –

+0

@GilbertMendoza Sí a ambas preguntas. –

7

Sobre la base de sus comentarios parece que esto es lo que necesita:

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

que he probado en mi localhost y parece estar funcionando bien.

+0

Una cosa le sugiero que borre la caché de su navegador y reinicie. Y cuando acceda a 'http: // localhost/test/sample.jpg', asegúrese de presionar' ctrl + R' varias veces para asegurarse de que proviene del servidor web. Cuando lo haga, agilice su access.log para asegurarse de que vea 200 o 403 para esta imagen. – anubhava

+0

@ _ @ Cuando pruebo como sugiere, el FIREFOX está haciendo lo mismo que antes (sin embargo, borro el caché y la actualización, e incluso reinicio el Apache) pero el IE funciona bien. Entonces, ¿cómo debería entender esto? –

+1

No es necesario que rebote Apache. Lo que está sucediendo para usted es que cuando visita 'http: // localhost/test' FF almacena en caché los recursos estáticos en esa página, es decir' sample.jpg'. Luego, una vez que abre esta URL: 'http: // localhost/test/sample.jpg' y FF la sirve desde su caché. Es por eso que te sugerí que alinees tu access.log. Sin embargo, en FF 'si abre una nueva pestaña e ingresa su URL de imagen y presiona' ctrl + R' algunas veces', verá el mensaje Prohibido. ** PD: Probé esto en Firefox, Chrome, Safari e IE y funcionó en todas partes ** – anubhava

7

En primer lugar, encuentre dónde se encuentra el archivo de configuración principal de apache httpd.conf. Si usa Debian, debería estar aquí: /etc/apache/httpd.conf. El uso de algunos editor de archivos como vim o nano abrir este archivo y busque la línea que se ve de la siguiente manera:

Options Includes Indexes FollowSymLinks MultiViews 

luego retire índices de texto y guardar el archivo.La línea debe ser similar a éste:

Options Includes FollowSymLinks MultiViews 

Después se hace, reinicie Apache (por ejemplo, el reinicio /etc/init.d/apache en Debian). ¡Eso es!

+0

Gracias, funciona como un encanto – Anup

21

¡La regla de rosipov funciona muy bien!

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

Así que teniendo la regla de rosipov para redirigir cualquier solicitud directa a {GIF, JPG, JS, txt} archivos 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 para no permitir acceso directo a , por ejemplo, un CMS archivos sensibles como xml, javascript ... con seguridad en mente: a todos estos bots que garabatean la web hoy en día, me pregunto qué hará su algo a partir de mi 'mensaje de curioso'.

Cuestiones relacionadas