Pergunta

O trabalho em questão:

Quero garantir que os usuários do meu site visualizem uma página antes de iniciar o download.Se eles não visualizaram a página, mas tentaram fazer um link direto para os arquivos, eles deverão acessar a página da Web antes que o download seja permitido.

Alguma sugestão melhor do que a minha ideia de enviar um cookie e - antes de iniciar o download - verificar se o cookie existe (via .htaccess)?

A página da web e os arquivos de download estarão localizados em servidores diferentes.

Ambiente:

  • Apache 2 em todas as máquinas
  • PHP 5 em todas as máquinas
  • MySQL 5 disponível no servidor "webpage" (sem acesso dos servidores de download)

Nathan perguntou qual é o problema que estou tentando resolver e, na verdade, quero evitar hotlinks de - por exemplo - fóruns.Se as pessoas fizerem download do nosso servidor, usando nossa largura de banda, quero mostrar a elas uma página com um anúncio antes de o download começar.Não precisa ser totalmente seguro, mas precisamos ganhar algum dinheiro para financiar os servidores, certo?:)

Foi útil?

Solução 6

eu vou usar mod_auth_token para garantir que o usuário tenha um "link recente".

Com mod_auth_token você pode criar links expirados, ou seja,se alguém decidir pegar um link existente e publicá-lo em outro site, esse link irá expirar após um período especificado.Isso resultará em um 403 FORBIDDEN que posso capturar e redirecionar o usuário para a página HTML que desejo.

Outras dicas

Em vez de permitir hotlinks para os arquivos, armazene-os fora de uma rota acessível pela web.Em vez disso, faça as solicitações de download irem para um script php que inicia o download.Você pode fazer verificações para garantir que a página solicitante seja aquela que você deseja ler.

Um mod_rewrite RewriteRule do Apache pode fazer isso.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.example.com/page.html$
RewriteRule file.exe http://www.example.com/page.html [R=301,L]

Basicamente, se um pedido de file.exe não veio com page.html como referenciador, ele redirecionará 301 o usuário para page.html.

Você poderia usar lado do servidor distribuído sessões em vez de cookies, mas isso provavelmente é mais problemático do que vale a pena.

Você também poderia proibir acesso para solicitações sem referenciador ou com referenciador errado.Mas isso é ainda mais falsificado do que um biscoito.

Dependeria de quanto você se importa.

A solução aqui depende do problema que você está tentando resolver.Se você está apenas tentando garantir que um link direto não seja postado em fóruns e outros enfeites, apenas verificar o referenciador com .htaccess deve ser suficiente.É claro que o referenciador pode ser falsificado com bastante facilidade; portanto, se o risco de alguém fazer isso for um problema, você precisará fazer outra coisa.

Um cookie deve resolver se você precisar de algo um pouco mais seguro.Não podemos simplesmente usar sessões php porque o servidor de arquivos e o servidor web estão em caixas diferentes.Mas poderíamos criar um cookie baseado em um hash da hora e em algum valor secreto.

cookievalue = sha1('secretvalue'.date('z-H'));

Quando o usuário solicita o arquivo real, o servidor de arquivos gera esse cookie novamente e garante que ele corresponda aos usuários.Isso significa que, mesmo que o usuário falsifique o cookie, ele será inválido depois de uma hora, então quem se importa, e eles não poderão gerar o seu próprio novo, pois não sabem o valor secreto.

Eu estava prestes a sugerir o truque de referência .htaccess, mas não é um método muito seguro.É fácil criar um script PHP, com uma referência http personalizada adicionada.Se você entrar na página de download lá, ele pensará que você veio dessa página.

Este é um problema relevante?Você pode dizer algo sobre o contexto da sua página de download?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top