Générer ip et limité dans le temps lien de téléchargement
il y a un lien direct pour télécharger un fichier. les utilisateurs peuvent télécharger ce lien après paiement, comme ceci:
http://example.com/download/webapp.rar
Mais j'ai besoin de générer ip et limité dans le temps lien de téléchargement pour empêcher la sangsue le fichier avec d'autres personnes. Je veux faire cela sans l'utilisation de bases de données. quelque chose comme ceci :
http://example.com/download.php?a5fds588fgdf
ou
http://example.com/download/a5fds588fgdf
est-il des astuces?
- "Sans les bases de données"? Ce genre d'exigence est qui? Vous devez absolument pour stocker des données afin de résoudre ce problème, et une base de données est le meilleur endroit en mesure de le faire. Pourquoi sur la terre sont que vous essayez d'éviter d'utiliser une base de données?
- Sans la base de données, vous pouvez atteindre cet objectif en utilisant
cookies
en définissant leursexpiry
. Cependant, la difficulté, c'est que vous pouvez supprimer les cookies. donc ce n'est pas fiable. - outre le fait que les cookies peuvent être usurpée si facilement à les rendre assez inutile pour cette...
- WTF serais sur le dur "pas de base de données" chose que je n'avais pas remarqué le "bind-à-IP' chose. C'est une idée terrible. IPs ne sont pas fixes, et l'adresse à payer pour le téléchargement et l'adresse utilisée pour lancer le téléchargement ne pas correspondre. C'est pourquoi personne ne le fait. Le modèle typique que j'ai remarqué, c'est de plafonner le nombre de téléchargements à 5, ou de quelque chose. Réduire au minimum les "sangsues" sans totalement vissage certains de vos légitimes des utilisateurs.
- Je ne veux pas utiliser la DB en raison de mon site web n'est pas DB conduit.
- accepté réponse est erronée. On ne doit jamais divulguer les pièces utilisées pour générer le hachage. jetez un oeil à TOTP mécanismes: en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
Vous devez vous connecter pour publier un commentaire.
Il y a vraiment une bonne nginx module de cela.
L'URL obtient deux paramètres - appelons-s (sécurité) et t (timestamp). La sécurité est un secure hash généré à partir de l'horodatage, le chemin d'accès et un sel (dans votre cas, il suffit d'ajouter la propriété intellectuelle).
À vérifier:
Maintenant, vous avez juste besoin de réécrire les téléchargements à ce "man in the middle"script-et vous avez terminé.
Exemple de réécriture pour nginx:
Je ne suis pas vraiment familier avec apache réécrit de sorte que vous pouvez vérifier par vous-même.
Si vous utilisez l'un des modules suivants, vous n'avez pas besoin de vérifier tout cela vous-même et c'est beaucoup mieux en terme de performance, mais remarque qu'il accorde plus de la configuration et parfois une autre façon de générer l'url et de hachage (voir le module docs ici).
Ou vous venez d'utiliser la nginx lien sécurisé module: http://wiki.nginx.org/HttpSecureLinkModule
Il y a aussi un pendentif pour lighty: http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload
Ou la nginx secure module de téléchargement: http://wiki.nginx.org/HttpSecureDownload
Peut-être il ya quelque chose pour apache trop... Peut-être que vous pourriez faire quelque chose avec réécrit là...
$path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
de sorte que le haché chemin dans le récepteur script ne tirez pas dans la requête de vars, et$timestamp <= time()
devrait être$timestamp >= time()
$timestamp <= time()
est correct puisque vous voulez invalider le lien sur ce timestamp pas valide à partir de là.Si vous n'êtes pas préoccupé par les gens d'être en mesure de décoder certains paramètres comme l'adresse IP ou l'horodatage vous pouvez essayer quelque chose comme ceci :
Maintenant c'est pour l'obtention d'une clé unique, valable 1 heure, pour les ip $key->ip.
Pour le vérifier :
Et vous avez terminé 🙂 Pas de base de données concernées. Juste le hachage et la correspondance des hachages par la suite.
Mais je suppose qu'un simple
$_SESSION[$file_id] = time()+3600;
ferait l'affaire en une seule ligne...Pas aussi amusant même si.Mon meilleur conseil serait d'utiliser une base de données!
Mais si vous avez absolument, positivement le faire sans alors je vous suggérons d'utiliser une bibliothèque de mise en cache comme le cache-lite: http://pear.php.net/manual/en/package.caching.cache-lite.intro.php
De nombreux frameworks PHP (si vous en utilisez un) viennent également avec une mise en cache de la bibliothèque
Vous pouvez mettre en cache l'adresse IP et clé aléatoire vous attribuer avec une date d'expiration (certains cache bibliothèques vous permettra aussi d'affecter la validité du cache de temps)