2009-08-07 76 views
6

我真正想要的是限制每人1票,但我能想到的下一個最好的事情是每IP地址限制1票,以防止惡意用戶/黑客嚴重磨損我公司的投票系統。我正在考慮使用數據庫來跟蹤IP地址。每個IP地址限制1票?

更新: 很抱歉,在第一時間aruond沒有說清楚。我想知道如果限制每個IP地址1票是限制每人1票的好策略。基本上,我想知道1個唯一的IP地址是否大致等於1個人。人們已經提到代理和路由器重複使用IP地址,所以不幸的是,許多人可以使用相同的IP地址。

謝謝。我認爲,對我而言,最好不要限制每個IP地址1票。

+2

你的問題是什麼? – Nate 2009-08-07 19:57:14

+2

代理服務器和dyanmic ip地址的存在破壞了您的計劃。 – 2009-08-07 19:57:22

+0

但總比沒有好。 – Amber 2009-08-07 19:58:00

回答

18

我建議不要採用IP方法。當我看到這一點之前,你的一些大型ISP重複使用IP很多(AOL ...),但如果你確實使用IP地址,那麼使用數據庫來跟蹤它們。一個快速的方法是將其作爲一個獨特的關鍵,並將異常看作「已投票」。添加

一件好事並不表明其表決不計入用戶,只顯示結果,或感謝他們的投票。通過不給出具體的錯誤,它是更難,有時甚至沒有注意到你的問題用戶。

+2

另一件我發現能夠很好​​地工作的功能...如果用戶擁有cookie,則會爲用戶添加一個遞增的延遲時間。當然,他們可以刪除它,但再次,並沒有表明你實際上在做任何事情,只是慢慢地花費更長的時間來投票,每次都會減慢投票腳本的速度,直到他們沒有真正工作。 (你可以用IP地址做同樣的事情)。 注意:這也是一個很好的用戶名/密碼技術,而不是鎖定帳戶。 – RiddlerDev 2009-08-07 20:04:38

+0

我不會自動認爲投票腳本將被編程,甚至發佈cookie數據。其他然後JavaScript(在瀏覽器中),我還沒有看到任何默認情況下這樣做的語言。 ruby,php,python似乎都會讓你手工添加cookie頭部到一個請求。 – complistic 2013-03-05 04:57:28

1

是的,使用數據庫。不要依賴cookies,他們可以很容易地刪除。
國際海事組織,迄今爲止,基於IP的語音限制是最好的選擇。

+0

-1對於基於IP的阻塞:不幸的是,互聯網上有許多非常重要的站點,其中有許多用戶位於單一IP之後。 – 2009-08-07 20:37:34

+0

是的,但唯一的工作方式,如果你想壓制投票作弊。 – 2009-08-07 20:42:53

+0

@AndrejsCainikovs:在所有情況下,我們都使用IP地址作爲補充選項,作弊者始終擁有取之不盡用之不竭的用武之地。所以 - 這可能會幫助我的孩子兄弟。這並不壞;但請記住,這只是針對低掛果實的臨時措施,而不是一個完整的解決方案。 – Piskvor 2014-10-13 12:16:14

4

一般來說,是的,你會怎麼做是對的選票數據庫表,並且只存儲選擇+ IP地址 - 然後在插入時,做一個DB查詢,看是否已經進入與給定的IP存在。

理想解決方案將是,以配合票對後者又連接到更具體的存在(例如,信用卡,蜂窩電話,或其他不太容易倍增身份源)的用戶帳戶。

你問的是什麼問題?

12

如果你使用的IP地址,那麼你就大多數企業通過防火牆或代理服務器限制到只有一票,因爲他們路由所有出站互聯網流量。幾年前我們做了這個,發現所有的AOL流量都來自5個IP地址。

+0

你還有問題與美國在線以及呃? – RiddlerDev 2009-08-07 20:00:43

0

IP地址有其侷限性,正如我們從上面提到的那樣,但瀏覽器還有很多其他特性可能會阻礙不合理的選民。例如,BrowserID就幾乎每個瀏覽器都有所不同。您可以使用BrowserID和IP地址的組合來創建唯一的ID。

2

我總是這樣做的方式是將用戶代理和IP地址連接成MD5散列(在某些情況下,這將允許來自同一IP的用戶投票,只要他們使用不同的瀏覽器),並存儲作爲投票數據庫的「指紋」,併爲其添加一個唯一的密鑰。正如IPX Ares所說,從那裏你可以捕獲重複的關鍵異常,並且你應該很好。

如果你想要讓人們投票,每天一次,你也可以在YMD追加到「指紋」,或其他變化,讓x量每天一小時或x量。

+1

這可以改進一點,但仍然不足以解決企業用戶的問題。在一家公司中,很可能有很多人擁有相同的用戶代理並且位於顯示爲一個IP地址的防火牆後面。 – 2012-09-06 14:37:23

0

另一種方式來「幫助」避免作弊是提供1次用散到窗體,然後檢查,如果這是有效的你算在投票前。

例如:

當您創建的投票表格,你做一個隨機哈希值,並將其存儲在數據庫中,並把它放在form作爲hidden場。 (可能要日期字段添加到哈希數據庫,你可以清理未使用的哈希值)

然後,當你得到一個票POST要求,您可以檢查提供的散列是在數據庫中刪除從數據庫,所以它不能再次使用。


缺點:
可能與高IO裝載數據庫如果投票頁面有高流量。
無法將頁面緩存爲計劃html,因此會給web應用程序帶來更多壓力。