2011-04-11 199 views
1

我已經實現了在線視頻投票系統,其中訪客只能在任何一天投票一次。我使用他們的電子郵件地址和時間戳的組合來確保每一次投票在當天都是唯一的。如何防止遊戲投票系統,人們可以每天投票一次?

正如你可能猜到的,這導致人們通過在mailinator.com等網站上註冊一次性電子郵件地址來遊戲系統,所以我想知道是否有人試圖實現任何其他投票算法,允許多個選票相同人。另外,這種設置意味着如果視頻#1與視頻#2相比擁有更多的人,則視頻#1已經處於不公平的優勢。

我在考慮排名系統,但我不完全確定如何防止任何人使用虛假的電子郵件地址來遊戲系統。我試圖解決的問題是這樣的:

鑑於3個視頻,A,B和X的有5人在裏面,B具有2和X具有4
假設X是三人中最好的視頻,人們可以每天投票,是否有投票系統可以幫助「B」崛起?

就像我說的,我在我的建議排系統,會斷定,如果#2量的數量超過了#1,它是安全的假設應該成爲最後的贏家,但似乎不完整的。

有沒有人處理過這樣的事情?請記住,這些結果相當低(我們平均約500張/ 7天),所以2人真的可以有所作爲。

這是在共享主機環境中的LAMP(PHP)堆棧上(如果有幫助)。另外,如果您想知道爲什麼我們允許同一個人進行多次投票,那是因爲上級意識到這有助於推動網站流量,並且他們非常喜歡看到圖表上升(儘管事實上後續的命中是相當無意義的)。

在此先感謝,如果您需要任何其他信息,請讓我知道。

+0

聽起來像[EverCookie](http://en.wikipedia.org/wiki/Evercookie)的良好用法。 – drudge 2011-04-11 18:01:41

+2

@jnpcl:這些東西應該被禁止。改爲使用真實的登錄系統(或使用OpenID)。 – 2011-04-11 18:08:42

+0

@亞歷山大:道歉,諷刺在文字中丟失。我應該添加一個笑臉。 ;) – drudge 2011-04-11 18:17:25

回答

2

你實際上是在問兩回事:

首先,你怎麼可以防止有人利用系統漏洞?這很難處理。你可以通過要求註冊,像SO這樣的最低聲譽或其他限制來提高投票的條件,但最終你希望做的只是減少作弊,而不是消除它。考慮到人們多次成功進行實際政治選舉,然後評估可以消除您網站上所有作弊的可能性。

其次,您如何爲不同的項目提供公平的質量排名,這些項目可能會有不同的受歡迎程度,並且會在不同的時間出現? Randall Munroe描述了一個非常好的解決方案here。該文章鏈接到實際的算法,這是相當直接的實施。

+0

您在XKCD上鍊接的解決方案看起來可能有一些問題。我將進一步研究。謝謝! – leo 2011-04-15 18:47:54

1

沒有登錄系統,沒有解決您的問題的方法。除非您爲他們提供真正的身份驗證系統,並需要幾個步驟來創建帳戶,否則人們會一直打敗您的系統。順便說一下,OpenID非常適合這種情況。

不要使用基於重量cookie的東西(特別是不要使用Evercookie)。這對用戶的隱私是一種冒犯。我永遠不會想要我的電腦上的殭屍cookie。

如果他們一直在玩遊戲,那麼除了手動標記垃圾賬戶並刪除相應的投票之外,您無能爲力。

或者你可以做一個基於聲望的系統,並且需要投票的最小代表(比如StackOverflow)。

如果您想要一個快速安全的工作解決方案,請參閱OpenID

+0

openid不會解決識別在線人員的問題,而不僅僅是賬戶。它只會將問題從稍微堅決的問題轉移到稍微更堅決的問題上。 – hop 2011-04-11 18:45:52

+0

@hop:Openid具有以下優點:1)易於實現2)由於打開許多帳戶的時間很長,所以不鼓勵人們創建大量帳戶。僅此一項就會阻礙一些用戶。代表事情也很好。 – 2011-04-11 19:00:35

+0

「一些用戶」正是使這個解決方案無用的東西,而現在什麼是「冗長」的過程(我非常懷疑)將在明天實現自動化。正如我所說的那樣:它只會將問題轉移到那些稍微更堅決的作弊者身上。 – hop 2011-04-11 19:20:38

1

有這種問答&在網絡的平臺 - 不知道你是否聽說過 - 這就是所謂的stackoverflow.com ;-)

也許你可以在這個網站採用的評分系統?我發現只允許具有給定評級的用戶以多種方式操縱系統是非常巧妙的。您可以按其賬戶的年齡(例如投票後2周內的投票數)或某種聲譽系統來選擇用戶。

+0

我發現巧妙的是不允許用戶以零代表(即虛擬帳戶)以任何方式操縱系統。 – 2011-04-11 18:18:22