Kullanıcıların gönderilere oy sağlamak için bir PHP web uygulaması oluşturma - nasıl kötüye aza indirebilirsiniz

8 Cevap php

Ben sadece bir kaç küçük php web uygulamaları yazdım ve ben kullanıcıların kısa hikayeler göndermek için izin vermek için hemen araya kodunu atıyorum. Bu hikayeler gösterilecek ve bunları başkalarının kadar oy sağlayacak. Kazanan oldukça değerli bir şey alır ve ben paranoyak insanlar işlemek için denemek için gidiyoruz değilim.

Debian / Apache / PHP 5.2 / jquery

kullanıcılar / authenticate, giriş için gerekli değildir.

kullanıcılar her hikaye için ama sadece bir kez birden hikayeler oy verebilirsiniz

Bir IP adresi ile her hikaye etiketleme ve bu IP diğer başvuru sayma değil gibi basit mi? Herhangi bir tavsiye için teşekkürler.

8 Cevap

Hayır, o kadar basit değil. Bu IP adresleri parodi ve insanlar sadece birkaç yerlerden oy verebilirsiniz oldukça kolay. Ayrıca, aynı IP adresini kullanan bağlı farklı insanlar / bilgisayar olduğu çok olasıdır. Bu farklı insanlar aynı bilgisayarı (ve tarayıcı) kullanarak oy deneyin bile (yüksek) mümkündür.

Hatta bir giriş sistemi su geçirmez değil: sadece insanların kimliklerini doğrulamak olamaz. Kullanıcılar giriş e-posta adresleri ve isimleri ve doğum tarihleri ​​gibi sahte verilerin farklı.

Öte yandan, belirli bir bilgisayardaki belirli bir tarayıcı benzersiz bir kimlik istiyorsanız (zıt benzersiz users), Panopticlick bir göz ve [(2) {oku }].

Bunun dışında, hala bir oy döküm edildiği ile bir tarayıcıyı tanımlamak için bir tanımlama kullanabilirsiniz (denemek için) olabilir.

Birlikte bir kullanıcı profili veritabanı koyabilirsiniz. Yani, vb IP gibi, tarayıcı, yer, OS sürümü, vb, belirli kullanıcı bilgilerini çizmek Ve daha sonra standart bir eşleştirme veya eğer onlar insanları eler ağırlıklı eşleme sistemi ya oluşturmak "çok şüpheli." Evet, hala orada burada yanlış pozitif alırsınız, ama sen meşruiyeti hakkında söyledikleri gibi paranoyak gibi iseniz, muhtemelen en iyi doğrulama üzerine overboard Biraz gidiyor demektir. Onlar oyun sistemi konum ve bunu yenmek için yollar bulmaya çalışmayın düşünüyorum o kadar daha iyi sonuçlar için, her zaman bir "başarılı" iletisi döndürebilir.

Eğer bir giriş / parola arabirimi uygulamak için karar eğer, bir ikili doğrulama sistemi kullanmanız gerekir. Hiçbir şey mükemmel değildir, ama sağduyu ile ben iyi bir şey kurmak inanıyorum.

  1. Kurabiye ile başlayın. Sadece story_id, datetime ve tanımlanmış bir sona erme zamanı gibi verileri ile biraz kurabiye kaydedin. Bu makine zaten olarak eğer bu şekilde, bu alışkanlık bir süre için tekrar oy mümkün olacak, 24 saat Diyelim ki.

  2. Farklı hikayeler oy veren bütün IP'ler bir liste ile bir DB tablo var. Bu IP özellikle hikaye için listede olup olmadığını Yani, birisi oylama olduğunda, sadece kontrol. Bu tablo aynı zamanda bu IP gerçekleştirildi kaç çalışır kaydetmek için ek bir sütun olmalıdır. IP listesinde olduğunu, ve çerez ayarlı değilse, o zaman birisi zaten IP, bunun için olası senaryolar olduğunu kullanılarak oy:

    • Belki de bir ev vardır ve hepsi oylama vardır.
    • Belki bir ofiste, ve hepsi farklı makineleri oy veriyor.
    • Belki bir kafe ya da havaalanı gibi ortak bir ağ vardır.

    Bu normal bir durum senaryoları için, herhangi bir IP aynı hikaye için fazla 20 kez oy çalışacağız ki çok nadirdir. Sen "aynı IP oy verebilirsiniz ev birçok kez" bir eşik ayarlamanız gerekir. Hiçbir çerez ve bir IP olarak kaç kez miktarı eşiğin üzerinde ise Yani, o zaman yanlış bir şey olduğunu biliyorum ve IP belki daha uzun bir bekleme süresi ya da oylama süreci tamamen bloke olduğunu verir.

  3. Bir captcha kullanın. Oylamak için çok kolay, ama zor ya etmeyin. Hatta sistemi doğrulamak önceden bahsedilen yolları ile, ayrıca "Gönder" düğmesine tıklamadan önce bir şeyler yazmak / kullanıcı düşünmek zorlamak için bir captcha koyabilirsiniz. Re-Captcha (http://recaptcha.net/) veya m-kaptan (http://code.google.com/p/m-captcha) / 'gibi birini arayan bir dost gibi can sıkıcı bir şey kullanabilirsiniz. Bu şekilde, bir hacker güvenlik önlemleri geçersiz kılmak için çalışırken bir acı zaman olurdu.

Hayır, IP adresi iyi bir tanımlayıcı değil. Mesela dan gezen birisi Bir cep telefonu aynı IP adresine sahip asla (ve hatta ev kullanıcıları düzenli olarak IP adresini değiştirebilirsiniz).

Öte yandan, aynı ev / ofis / proxy sunucu tarama Birden çok kişi yöntemiyle tarafından engellenmiş olur

php ile bunu gibi bir IP adresi ve tarayıcı kullanıcı Ajan alabilirsiniz

IP: $_SERVER['REMOTE_ADDR']

User Agent: $_SERVER['HTTP_USER_AGENT']

ne yazık ki, onun değil mükemmel bir yoldur ama kötüye minimize gelmez.

Eğer bir giriş sistemi kullanılarak ve kişi çerezleri kullanarak olarak ne depolayarak bu güçlendirebilir. ama o zaman bile onun hala mükemmel değil.

Uniquely identifying voters

  1. Otomatik girişimlerini engeller (Güvenlik kodu) gibi güçlü bir sınamayı var. Bu bloklar IP'leri ve botlar sahte.
  2. Bir tanımlama bir tanımlayıcı depolamak. Bu, farklı IP ile aynı bilgisayar ve tarayıcı üzerinde yakalamak insanlara yardımcı olur.
  3. Sunucuda IP saklayın. Bu aynı ev ağında birden fazla bilgisayar ya da tarayıcı ile yakalamak insanlara yardımcı olur. Ne yazık ki, bu da caddede büyük GM fabrikasında oy herkesi ama Bob engelleyebilir. Evden oy söyle.

Eğer yukarıdan IP tarafından doğrulanması eğer kullanıcı aracısı endişe etmeyin. Bu gereksizdir.

Eğer üç yönergeleri takip ederseniz yukarıdaki kriterleri geçerse her türlü oylamayı diskalifiye çünkü, siz de gerçek zamanlı oy güncelleme olabilir. Onlar oy veremezsiniz eğer insanlar geç girdi olacaksa da iyi bir fikir olduğu, oylarını değiştirmek izin gidiyoruz sürece Muhtemelen bile, oy düğmesini göstermek gerekir.

Ben oylama olsaydı, ben daha iyi sevdim bir hikaye bulursa, ben oyumu değiştirmek mümkün olmak isterdim, ben okumak hemen sonra bir hikaye için oy edebilmek isterdim.

Voting system

Şimdi, oylama ile ilgili olarak, size herhangi bir oy sayımı önce aynı "kişi" den en az üç farklı kısa öyküler üzerinde oy gerektiren isteyebilirsiniz. Sen en popüler hikaye galibi olarak bu şekilde sona sahip olan daha iyi bir şans olacak.

Benim hikaye için oy tüm arkadaşlarıma linki göndermek Örneğin, onlar da diğer bazı hikayeler, muhtemelen daha iyi olanları seçmek gerekir. Kötü film insanlar pratikte, ancak, oy almak için en kötü iki ve kendi için oy edebileceğiniz gibi kazanan biter şans var, ben bunun hiç görmedim. Bu, tüm bu sistemi kullanmak film festivallerinden 7 yıl dayanmaktadır.

Ayrıca, bir internet yarışma için, herkesin sayfanın üst kısmında eşit zaman alır, bu yüzden döndürmek için bir yol anlamaya, ya da en azından, girdileri rastgele gerektiğini kesinlikle önemli.

Her zaman son sözü alma hakimler hakkında yarışma kuralları içinde bir şey koymak.

Yapılacak en iyi şey, 2 yerde bilgi depolamak için denemek olacaktır:

  1. Onların oyları ve hikayenin bir veritabanı tablosunda, ve bir çek onlar zaten olmadığını görmek için oylama çalıştığınızda her zaman yapıyor ile birlikte kullanıcının IP adresini Mağaza
  2. Denemek ve onlar oy şeyin takip etmek kullanıcının tarayıcısına bir çerez koymak. Bunu bir veri ton saklamak istemiyorum varsayarsak, sadece çerez bir kimliği atamak ve Yukarıdaki tabloda o kadar maç ve bir çek bu şekilde yapabiliriz.

Birlikte iki yöntem birleştiren sen olarak kim olduğunu bilmek için izin ve biri ikinci kez oy icar değil, ne için. Gerekir Tabii ki, onlar birden fazla makineye giderseniz, çerezi silmek ve / veya IP değiştirmek, bunu durdurmak için yapabileceği hiçbir şey yok.

İşte ben geçmişte yaptık ne:

  • Cookie kontrol edin
  • Zaman penceresi içinde IP adresini kontrol edin
  • Tamam, set çerez ve güncelleme IP adresi ve zaman (bu IP için zaman penceresi artırmak?) Ise
  • Zaman kullanıcıların oy sayılır var olduğu izlenimini vermeye çalışın

Bu anonim oylama ise daha çok, tüm sahtekarlardan yakalamak imkansız.