Böyle Stackoverflow adlı gibi benzersiz kullanıcı oylama için bir strateji?

3 Cevap php

Ben oylama için SO bir mesaj kontrolöre bir XHR yöntem mesajlarını uygulayan ve URL yoluyla sonrası kimliği ve oy türünü gönderirse ek bir fkey parametre gönderilir, örneğin fark:

http://stackoverflow.com/posts/1/vote/2

Ben bu uygulama zaman aynı kullanıcı tarafından yinelenen oylamayı önlemek ve genel mantık ek olarak, spam önlemek için kullanabilirsiniz ne mantık merak ediyorum, benzer bir tekniğin uygulanması için gidiyorum.

Onları saklamak olacak tablo için şema:

thread_id   user_id   vote_type
2334        1         2

Şimdiye kadar bu mermi puan ile geldi:

  • sağlamak Kullanıcı oturum
  • geçerli bir gönderi ID ve geçerli oy tipi gönderildiğinden emin
  • yazdıktan sonra, kullanıcının daha önce oy değil emin
  • karma yaratan kod bir kullanıcı farklı bir tarayıcı, farklı bir işletim sistemi üzerinde olabilir bu yana, böyle bir kullanıcı aracısı gibi dinamik bilgileri içeren, doğru değil mi?

Update:

"SO muhtemelen kullanıcıyı tanımlamak için giriş çerez kullanıyor." - Andrew

Birisi bu yapılabilir nasıl göstermek, ya da başka bir deyişle özellikle fkey, bir alfanümerik 32-bit dize olan, nasıl oluşturulur bir örnek verebilir misiniz?

Question:

  • Benim XHR kod ile her yerde gerçek kullanıcı kimliğini göndererek değilim beri, bu ben, yerine diyelim ki fkey saklayabilirsiniz ki benim tablo şemasını güncelleştirmek zorunda demek {[(1)] }? fkey muhtemelen her bir kullanıcı için benzersiz olması gerekir, ve bu yüzden muhtemelen bir satır neyse bir fkey olan oylama tabloda olup olmadığını sorgulayabilirsiniz.

Benzer bir tekniğin uygulanacağı kimseye herhangi bir ipucu veya fikir takdir ediyorum.

3 Cevap

alanlara (thread_id, User_id) UNIQUE dizin oluşturmak ve DBENGINE bir iş parçacığı üzerinde multy yorumlardan sizi koruyacaktır :)

Sadece valuse manipüle engellemek amacıyla nasılsa URI'lere oturum açabilirsiniz. Örneğin, bir sır ile URI parçalarını karma verebilir ve URI karma ekleyin. Kullanıcıların URI ve değerleri değiştirmek, URI ve geçersiz hale imzalı kısmını kopyalamak zaman.

Bu genellikle sığınakta API'ler yapılır, ve geçerli bir yaklaşım benzer olmasıdır.

Ben bunu yeniden göndererek ya da veri ile işe yaramaz insanları tutmak istiyorum ne kadar kötü bağlıdır düşünüyorum. (Bütçeniz çatıdan sürece) hiçbir şey% 100 olacak, ama sen tarafından resubmitting çoğu insan tutarak iyi bir iş yapabilirsiniz:

  • veya UID oluşturulan ID (Ben açıklayacağım) - kendi kimliğini kontrol
  • IP adresini kaydedebilir, ve (üretilen UID) ile birlikte IP ve teslim kimliği için DB karşı kontrol edin

Yalnız IP çözümünü kullanarak, tabii bir vekil, ya da DSL şehrimde taşıyıcı (ama o zaman bile, gün onun her çift) gibi sık sık IP en değiştiren bir bağlantı kullanarak mağlup olabilir. Ben şahsen bu kişilerin UID dayanan benzersiz bir anahtar oluşturmak ve bu geri ve gerekirse dördüncü geçmektedir. MD5 çok zayıf olarak görülüyor eğer bir tuzlu MD5 hash genellikle ince, hatta bir AES uygulama çalışır. Araya, iyi bir başlangıç ​​yeri olmalıdır.