Apache Download: Assurez-vous que cette page a été affichée avant le téléchargement

Le travail à accomplir:

Je veux m’assurer que les utilisateurs de mon site Web consultent une page avant de commencer le téléchargement. S’ils n’ont pas regardé la page mais ont essayé de créer un lien direct vers les fichiers, ils doivent aller à la page Web avant que le téléchargement ne soit autorisé.

Toutes les suggestions qui sont meilleures que mon idée d’envoyer un cookie et – avant le téléchargement – de vérifier si le cookie existe (via .htaccess)?

La page Web et les fichiers de téléchargement seront situés sur différents serveurs.

Environnement:

  • Apache 2 sur toutes les machines
  • PHP 5 sur toutes les machines
  • MySQL 5 disponible sur le serveur “webpage” (pas d’access depuis les serveurs de téléchargement)

Nathan a demandé quel est le problème que j’essaie de résoudre, et en fait c’est que je veux empêcher les liens dynamics – par exemple – les forums. Si les gens téléchargent depuis notre serveur, en utilisant notre bande passante, je veux leur montrer une page avec une annonce avant le téléchargement. Il n’est pas nécessaire d’être totalement sécurisé, mais nous devons gagner de l’argent pour financer les serveurs, n’est-ce pas? 🙂

Au lieu d’autoriser le lien vers les fichiers, stockez-les en dehors d’un itinéraire accessible par le Web. A la place, faites des demandes de téléchargement aller dans un script php qui lance le téléchargement. Vous pouvez mettre en place des contrôles pour vous assurer que la page de demande est celle que vous vouliez lire.

Un Apache mod_rewrite RewriteRule peut le faire.

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

Fondamentalement, si une demande de file.exe n’était pas page.html de la page référencée, elle redirectait l’utilisateur vers page.html .

Vous pouvez utiliser des sessions côté serveur dissortingbuées au lieu de cookies, mais cela représente probablement plus de problèmes que cela en vaut la peine.

Vous pouvez également interdire l’access aux demandes sans référent ou avec un mauvais référent. Mais c’est encore plus fakable qu’un cookie.

Cela dépend de combien vous vous souciez.

La solution dépend du problème que vous essayez de résoudre. Si vous essayez juste de vous assurer qu’un lien direct ne soit pas publié dans les forums, alors vérifier le référent avec .htaccess devrait suffire. Bien sûr, le référent peut être falsifié assez facilement, donc si le risque que quelqu’un le fasse soit un problème, alors vous devrez faire autre chose.

Un cookie devrait faire l’affaire si vous avez besoin de quelque chose de plus sécurisé. Nous ne pouvons pas simplement utiliser les sessions php car le serveur de fichiers et le serveur Web se trouvent dans des boîtes différentes. Mais nous pourrions créer un cookie basé sur un hachage de temps et une valeur secrète.

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

Lorsque l’utilisateur demande le fichier actuel, le serveur de fichiers génère à nouveau ce cookie et s’assure qu’il correspond aux utilisateurs. Cela signifie que même si l’utilisateur forge le cookie, il sera invalide après une heure, alors qui s’en soucie, et il ne peut pas en générer un nouveau, car il ne connaît pas la valeur secrète.

J’étais sur le sharepoint suggérer l’astuce de référence .htaccess, mais ce n’est pas une méthode très sécurisée. Il est facile de créer un script PHP, avec une référence http personnalisée ajoutée. Si vous entrez la page de téléchargement, vous penserez que vous venez de cette page.

Est-ce un problème pertinent? Pouvez-vous dire quelque chose sur le contexte de votre page de téléchargement?

Je vais utiliser mod_auth_token pour m’assurer que l’utilisateur dispose d’un “lien récent”.

Avec mod_auth_token, vous pouvez créer des liens qui arrivent à expiration, c’est-à-dire que si quelqu’un décide de prendre un lien existant et de le publier sur un autre site Web, ce lien expirera après un délai spécifié. Cela se traduira par un 403 FORBIDDEN que je peux attraper et redirect l’utilisateur vers la page HTML sur laquelle je le souhaite.