MySQL PHP web sitesinde görüntülemeden önce e-posta yoluyla bir reklam / yazı doğrulayın?

3 Cevap php

Bir web tabanlı çalışan "alış ve satış" kullanıcıların ürün ve hizmetler için Reklamlara gönderebilirsiniz PHP MySQL ile uygulama.

Yeni bir reklam sisteminde görüntülenir önce orada kullanıcı sağlanan e-posta adresinin doğru olduğundan emin olmak için doğrulama yöntemi olarak, ve reklam meşru olduğunu gerekir.

Ben herhangi bir yeni reklam yaratıcısı olan birincil işlevi nakledilen bir değişken, $ advert_id almak ve güncelleme / düzenleme / silme işlemi için db reklam seçmek için bir sayfaya yönlendiren bir url içeren bir e-posta göndermek istiyorum.

This variable is embedded in the url with PHP syntax ie. [http://www.example.com?content=modify%5Fadvert&advert%5Fid=2246317%5D.

Bu bölüm uygulamak oldukça basit, ama, bir kullanıcı başka bir tamsayı "advert_id = 2246317" adı verilen bu değişkeni değiştirmek olsaydı, onlar sistemindeki diğer ileti / reklam erişebilirsiniz.

Sistem reklam merkezli olduğunu ve kullanıcıların bir hesap gerekir ya da yazmak için giriş yok, bu yüzden biz rahat olurdu doğrulama noktasında bir oturum için istemi olamaz.

Biz yukarıda belirtilen url aracılığıyla erişilen sistemde reklamlar / mesajları korumak nasıl olarak herhangi bir fikir??

Herhangi bir öneriniz?

3 Cevap

Aslında rastgele, bir kez - ziyaretçiler sadece e-posta yoluyla göndermek bağlantıdan o sayfayı inceleyen olacak, bunun yerine advert_id bu adrese bir hash içerebilir şifre.

Böyle rastgele şifre üretmek için bir ortak ve "sık sık yeterince iyi" hile, benzersiz advert_id ile birleştirin (genellikle grc.com kullanın), ve bütün karma bir tek, gizli, gerçekten rastgele bir dize almaktır bir şey, diyelim ki, SHA1(). Şöyle:

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

Hatta sonuna rastgele bir sayı time() ekleyerek veya (daha iyisi) tarafından bu değişebilir. Sonuç kimse muhtemelen (bunu üretmek için kullanılan gizli verileri bilmeden) öngörebileceğini veritabanında saklanan 40 karakter dizesidir.

Örneğin, ben yerine bu olsun advert_id=1 olabilir:

f2db832ddfb149522442c156dadab50307f12b62

Ben sinsice advert_id=2 (ki başkası oluşturulan), ilk karma bu completely, farklı bir dize olduğunu guess olurdu düzenlemek istedim:

e5c6a3a9473b814b3230ee7923cbe679fcebc922

Yani, yerine aniden advert_id (ya da, isterseniz, advert_id ek olarak), ve URL içinde kullanıcılar başkalarının içeriğini bozmak için güçsüz olduklarını içerir.

Sen id bir salt ekleyebilir ve daha sonra karma olabilir.

sha1($advert_id . $salt);

Yerine advert_id URL'sini kullanıcıya gönder, ve advert_id ile birlikte veritabanında saklayabilirsiniz.

Bu linki tıkladığınızda Sonra, o karma değeri eşleşen reklam bulmak.

Tuzdan bir sır yapma onları göndermeden olmadığını bir reklam değiştirmek sağlayacak geçerli bir URL 'tahmin' den kullanıcıların tutmak nasıl. Belki, zaman yayınlanmıştır ve / veya bir gönderi yapmak kullanıcının girdiği bir isim ya da bir şey, kullanıcıların e-posta adresini kullanabilirsiniz.

Reklam kimliği olarak bir GUID oluşturmak çok basit Kimlik tahmin saldırıları başarılı olmak olası değildir.