2009-08-25 5 views
1

Travailler sur une application Web "achat et vente" avec PHP MySQL où les utilisateurs peuvent publier des publicités pour les articles et services. Avant qu'une nouvelle publicité ne soit affichée sur le système, il doit y avoir une méthode de vérification pour s'assurer que l'adresse courriel fournie par l'utilisateur est correcte et que l'annonce est légitime. Je veux envoyer au créateur de toute nouvelle publicité un email contenant une URL qui redirige vers une page dont la fonctionnalité principale est de recevoir une variable affichée, $ advert_id, et de sélectionner l'annonce de la base de données pour la mise à jour/édition/suppression.MySQL PHP Vérifier une annonce/message par e-mail avant d'afficher sur le site Web?

Cette variable est intégrée dans l'url avec la syntaxe PHP ie. [http://www.example.com?content=modify_advert&advert_id=2246317].

Cette partie est assez simple à implémenter, MAIS, si un utilisateur devait modifier cette variable appelée "advert_id = 2246317" à tout autre entier, il peut accéder à d'autres messages/publicités dans le système. Le système est basé sur la publicité, et les utilisateurs n'ont pas besoin d'un compte ou d'un login pour publier, donc nous ne pouvons pas demander un login au point de vérification qui aurait été pratique.

Des idées sur la façon dont nous pourrions protéger les publicités/messages dans le système d'être accessible via l'URL précitée ???

Des suggestions?

+0

Bonne réponse les gars - merci beaucoup ... – DJDonaL3000

Répondre

1

Si les visiteurs ne seront affichés que la page du lien que vous envoyez par e-mail, vous pouvez inclure un hachage à cette adresse au lieu du advert_id - essentiellement aléatoire, mot de passe unique. Un truc commun et «souvent assez bon» pour générer un tel mot de passe aléatoire consiste à prendre une seule chaîne secrète et vraiment aléatoire (j'utilise habituellement grc.com), à la concaténer avec l'unique advert_id, et à hacher le tout avec disons SHA1(). Comme si:

UPDATE advert SET advert_hash = SHA1(CONCAT(advert_id, 'lots-of-randomness-here')) 

Vous pouvez même varier en ajoutant time(), ou (mieux) un nombre aléatoire à la fin. Le résultat est une chaîne de 40 caractères stockée dans votre base de données que personne ne pourrait prédire (sans connaître les données secrètes que vous avez utilisées pour le générer).

Par exemple, je pourrais obtenir ce lieu de advert_id=1:

f2db832ddfb149522442c156dadab50307f12b62 

Si je voulais modifier sneakily advert_id=2 (qui a créé quelqu'un d'autre), je dois d'abord deviner que le hachage est-ce complètement autre chaîne:

e5c6a3a9473b814b3230ee7923cbe679fcebc922 

Ainsi, inclure dans l'URL au lieu du advert_id (ou, si vous le souhaitez, en plus du adve rt_id), et soudainement vos utilisateurs sont impuissants à ruiner le contenu des autres.

0

Vous pouvez ajouter un salt à l'ID, puis le hacher.

sha1($advert_id . $salt); 

Envoyer cette page à l'utilisateur dans l'URL au lieu du advert_id, et le stocker dans votre base de données, ainsi que le advert_id.

Ensuite, quand ils cliquent sur le lien, vous trouvez l'annonce correspondante pour cette valeur hachée. Faire du secret est la façon dont vous empêchez les utilisateurs de deviner une URL valide qui leur permettra de modifier une annonce qu'ils n'ont pas publiée. Peut-être que vous pourriez utiliser l'adresse e-mail des utilisateurs, l'heure affichée et/ou un nom ou quelque chose que l'utilisateur entre quand ils font un post.

0

Générez un GUID en tant qu'ID de l'annonce afin que les attaques par devinettes d'ID simples ne puissent pas aboutir.

Questions connexes