Como faço para desativar links diretos e links diretos para arquivos no meu site?

1

Ok, eu bati a cabeça contra a parede por algumas horas e isso não está funcionando. Abaixo estão os conteúdos do meu arquivo .htaccess. O que estou tentando fazer é bloquear o acesso a um conjunto de arquivos pdf e mp3 no meu site, a menos que o usuário clique nesses arquivos a partir de links nas páginas do meu site.

Em todos os lugares que eu olhei, o código é basicamente o mesmo que eu estou usando e simplesmente não está funcionando. Minhas perguntas são:

1) Estou fazendo algo errado? 2) Se não, como consegui depurar isso?

# BEGIN CustomRedirects
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(mp3|pdf)$ - [F,NC,L]
# END CustomRedirects

Os mp3 e os pdf não são sensíveis a maiúsculas e o mod_rewrite está ativado. Eu tenho o Wordpress instalado no meu site, mas ele está em um diretório mais alto na árvore do que esse arquivo .htaccess. Minha impressão da documentação é que meu arquivo .htaccess deve ter precedência, pois está localizado no diretório onde quero que essa reconfiguração ocorra. Se eu estragar o arquivo .htaccess o suficiente, recebo o erro 500, então só posso assumir que ele está sendo lido em algum momento.

Eu também tentei o seguinte, que eu encontrei de outra questão de falha de servidor e isso não funcionou:

SetEnvIf Referer . hotlink=1
SetEnvIfNoCase Referer ^http://(www\.)?mydomain\.com/.*$ !hotlink
<LocationMatch *.pdf>
      Order allow,deny
      Deny from env=hotlink
      Allow from all
</LocationMatch>

Alguém tem alguma ideia?

Atualização: Eu também tentei o seguinte para o RewriteRule sem efeito.

RewriteRule .*\.(mp3|pdf)$ - [F,NC,L]

Uma coisa que eu encontrei foi que, se eu deixar de fora a parte RewriteCond %{HTTP_REFERER} !^$ , funciona bem com a exceção do fato de que alguém ainda pode digitar a URL diretamente e acessar os arquivos. Isso é algo que eu gostaria de evitar.

    
por Mike Taber 02.01.2010 / 16:00

2 respostas

2

O problema com o primeiro trecho pode ser a linha RewriteRule.

Onde você tem:

RewriteRule \.(mp3|pdf)$ - [F,NC,L]

talvez você queira:

RewriteRule .*\.(mp3|pdf)$ - [F,NC,L]

Como é, acho que você está combinando os arquivos específicos '.mp3' ou '.pdf'. Você quer combinar 'foo.mp3' ou 'bar.pdf' (para variar foo e bar).

No segundo trecho. O começo parece suspeito. Eu não sei porque você precisa da combinação SetEnvIf e SetEnvIfNoCase. Talvez tente algo assim:

SetEnvIf Referer "^http://(www\.)?mydomain.com/.*$" legit_referal
SetEnvIf Referer "^$" legit_referal
<LocationMatch "\.(pdf|mp3)$" >
   Order Deny,Allow
   Deny from all
   Allow from env=legit_referal
</LocationMatch>
    
por 02.01.2010 / 16:36
1

O que você está descrevendo é definitivamente possível. Você pode facilmente retornar um status 403 proibido se o referenciador não corresponder ao seu próprio domínio.

Você também pode considerar essa opção: link

Em relação ao seu código atual, notei que errou erroneamente a barra invertida \ para escapar do arquivo. em meudominio.com .

    
por 17.12.2010 / 12:48