Estou tentando escrever o htaccess anti-link "final" ...
Você pode encontrar muitos exemplos / tutoriais / geradores na rede, mas muitos deles estão errados ou incompletos (ou até ambos).
Esses são os recursos que estou procurando:
- É necessário bloquear o vínculo ativo para obter uma lista de extensões de arquivo quando HTTP_REFERER é um site estrangeiro.
- Deve permitir a vinculação ativa para o domínio atual (duh) sem codificá-lo no .htaccess.
- Para o domínio atual, ele deve funcionar em http e https.
- Para o domínio atual, ele deve funcionar com www e sem www.
- É necessário poder adicionar domínios de exceção a essas regras (como nosso amigo Google) e esses domínios devem funcionar em http e https e com www ou sem www.
Isto é o que eu consegui até agora:
<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>
Minhas perguntas:
- Como evitar o código fixo
mydomain.com
no .htaccess? (Seria ótimo poder implantar esse .htaccess em todos os meus domínios sem precisar modificá-lo para cada um deles.) - No meu RewriteRule,
gif|jpe?g|png|zipx?
é equivalente agif|jpg|jpeg|png|zip|zipx
certo? (Desculpe ainda ser novo em expressões regulares.) - Você vê algo ruim no meu acesso. Que eu não conheço?
Para o primeiro, eu sei que é um pouco possível. O mais próximo que encontrei é esse trecho que remove o www da URL sem codificar o domínio. Existe uma maneira de usar esse método para a minha pergunta # 1?
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]
Atualizar:
Estou ciente das soluções que exibirão uma imagem com marca d'água em vez da imagem normal. Mas não estou procurando esse tipo de solução. Eu quero uma solução universal (servir 403 erros) que funcione para todos os tipos de arquivos binários (zip, exe, iso, jpg, png, gif ...).
Respostas:
Não importa o que você faça, estará "desperdiçando" os ciclos da CPU (para determinar se o site de referência (aquele que está fazendo o link) está autorizado ou não, você deve executar algum processamento dos dados da solicitação).
A única coisa que você pode fazer é economizar largura de banda e desperdiçar um mínimo de ciclos de CPU.
Existem alguns exemplos no Apache Docs que fazem exatamente o que você deseja. Este:
parece ser o mais aplicável (e não requer o peso total de mod_rewrite).
Você pode adicionar outros referenciadores válidos com diretivas
SetEnvIf
e adicionaisAllow
.fonte
%{HTTP_HOST}
para menos análise de regex) para inserir o host da URL no seu conjunto de regras, o que deve comprar domínios locais dinâmicos (teste extensivamente), mas você ainda precisará -Code "nice" referências externas, como Google (por referência, agente do usuário, IP, etc.)Que tal escrever uma regra que, se o referenciador for desconhecido (proibido), basta chamar um arquivo Php onde você passa a imagem como um parâmetro e, no arquivo Php, basta colocar em vermelho grande: "esse arquivo vem do MYWEBSITE.COM e não tem autorização oficial para ser mostrada aqui ".
Quanto à sua pergunta, faça sua regra global. Corrija-me se estiver errado, mas se a regra for declarada antes de qualquer vhost, ela será aplicada a todo o vhost (tipo de "regra padrão").
E outra idéia é simples: basta redirecionar para um arquivo Php (aqui
filter.php
), que procurará no site autorizado e retornará o arquivo necessário, se estiver tudo bem:Na
filter.php
carga apenas dinamicamente uma lista de vhost ou algo parecido:fonte
Cloudflare pode ser de alguma ajuda para você: http://www.cloudflare.com
No entanto, isso só funciona para imagens, mas parece ser o que você procura.
Proteção Hotlink
Ative automaticamente a proteção de hotlink para suas imagens para impedir a vinculação externa. Os referenciadores que não estão na zona e não estão em branco terão acesso negado. As extensões de arquivo suportadas são gif, ico, jpg, jpeg e png.
Protegido: http://mydomain.com/images/pic.jpg Para ignorar: http://mydomain.com/images/hotlink-ok/pic.jpg
fonte
questão 1:
Questão 2:
Questão 3
fonte
Ou use o CoralCDN e deixe o folk hotlink ao conteúdo de seus corações?
fonte