Estoy tratando de escribir el "último" enlace caliente .htaccess ...
Puede encontrar muchos ejemplos / tutoriales / generadores en la red, pero muchos de ellos son incorrectos o están incompletos (o incluso ambos).
Estas son las características que estoy buscando:
- Debe bloquear el enlace activo para una lista de extensiones de archivo cuando HTTP_REFERER es un sitio extraño.
- Debe permitir el enlace activo para el dominio actual (duh) sin codificarlo en .htaccess.
- Para el dominio actual, debe funcionar bajo http y https.
- Para el dominio actual debe funcionar con www y sin www.
- Debe poder agregar dominios de excepciones a estas reglas (como nuestro amigo Google) y estos dominios deben funcionar bajo http y https y con www o sin www.
Esto es lo que he logrado hasta ahora:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]
</IfModule>
Mis preguntas:
- ¿Cómo evitar codificar
mydomain.com
en el .htaccess? (Sería genial poder implementar este .htaccess en todos mis dominios sin tener que modificarlo para cada uno de ellos). - En mi RewriteRule, ¿
gif|jpe?g|png|zipx?
es equivalente a lagif|jpg|jpeg|png|zip|zipx
derecha? (Lo siento, todavía es nuevo en las expresiones regulares). - ¿Ves algo malo en mi .htaccess que desconozco?
Para el # 1 sé que es algo posible. Lo más cercano que encontré es este fragmento que elimina el www de la URL sin codificar el dominio. ¿Hay alguna manera de usar este método para mi pregunta # 1?
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]
Actualizar:
Soy consciente de las soluciones que servirán una imagen con marca de agua en lugar de la imagen normal. Pero no estoy buscando este tipo de solución. Quiero una solución universal (servir 403 errores) que funcione para todo tipo de archivos binarios (zip, exe, iso, jpg, png, gif ...).
Respuestas:
Independientemente de lo que haga, perderá los ciclos de la CPU (para determinar si el sitio de referencia (el que realiza el enlace) está autorizado o no, debe realizar un procesamiento de los datos de la solicitud).
Lo único que puede hacer es ahorrar ancho de banda mientras desperdicia un mínimo de ciclos de CPU.
Hay algunos ejemplos en los documentos de Apache que hacen exactamente lo que quieres. Éste:
parece ser el más aplicable (y no requiere el peso completo de mod_rewrite).
Puede agregar referencias válidas adicionales con directivas
SetEnvIf
y adicionalesAllow
.fuente
%{HTTP_HOST}
para un menor análisis de expresiones regulares) para insertar el host de la URL en su conjunto de reglas, lo que debería comprarle dominios locales dinámicos (prueba exhaustiva), pero aún necesitaría hacerlo -code "buenos" los referentes externos como Google (por el referente, el agente de usuario, IP, etc.)¿Qué tal escribir una regla que, si el árbitro es desconocido (prohibido), simplemente llame a un archivo Php donde pase la imagen como parámetro, y en el archivo Php, simplemente ponga en rojo: "este archivo proviene de MYWEBSITE.COM y no tiene autorización oficial para mostrarse aquí ".
En cuanto a su pregunta, haga que su regla sea global. Corríjame si me equivoco, pero si la regla se declara antes de cualquier vhost, se aplicará a todos los vhost (tipo de "regla predeterminada").
Y otra idea es simple: simplemente redirija a un archivo Php (aquí
filter.php
) que buscará en el sitio web autorizado y devolverá el archivo requerido si todo está bien:En
filter.php
solo cargar dinámicamente una lista de vhost o algo así:fuente
Cloudflare puede ser de alguna ayuda para usted: http://www.cloudflare.com
Sin embargo, esto solo funciona para imágenes, pero eso parece ser lo que buscas.
Protección Hotlink
Habilite automáticamente la protección de hotlink para sus imágenes para evitar enlaces externos. A los referentes que no estén en la zona y que no estén en blanco se les negará el acceso. Las extensiones de archivo admitidas son gif, ico, jpg, jpeg y png.
Protegido: http://mydomain.com/images/pic.jpg Para omitir: http://mydomain.com/images/hotlink-ok/pic.jpg
fuente
Pregunta 1:
Pregunta 2:
Pregunta 3
fuente
¿O usar CoralCDN y dejar que la gente haga hotlink al contenido de su corazón?
fuente