2014-02-25 84 views
2

我做了一個網站(使用PHP,JavaScript和MySQL的)具有投票系統,它允許人們匿名只是只有一次投票。如何在網站上支持匿名?

這意味着我的系統必須知道誰投了票(因爲我必須檢查用戶是否已經投票)但我不想將用戶名或用戶的IP地址存儲在數據庫中(破壞了匿名)。我不知道如何開始,我需要一些指導方針;我應該尋找什麼?

+3

如果不進行身份驗證的每一票,那麼你將不能夠在所有的固定。您可能會在客戶端存儲一些cookie,但任何人都可以清除這些cookie並將您帶回原來的位置。 – Lix

+2

甚至可以更改IP地址。我有一個動態的IP分配給我的ISP,每當我重新啓動我的路由器時會發生變化。我曾經通過簡單地通過批處理腳本和提琴手重新啓動路由器來幫助我的侄女贏得多次投票。 – DhruvJoshi

+1

@DhruvJoshi - 啊哈!所以你**承認!**我認爲這場比賽有些腥意! ;) – Lix

回答

5

你最大的問題是如何確保用戶只能投票一次,但是這不是問題的問題:你是問如何確保anonimity

這是相當簡單:對待不管你使用單 - 作爲密碼投票,並散列它。因此,讓我們說出於參數的緣故,您使用的是IP。我意識到這個問題,但讓我們假設這是你的選擇。

  • 用戶投票
  • 您散列IP和保存。
  • ,你甚至可以去儘可能將其保存在不同的位置。沒有必要甚至保存什麼散列表決哪個選項。再次
  • 用戶投票 - > IP哈希是媒體鏈接數據庫。
  • 爲了不放棄,如果有人已經投票,不回覆「你已經投了」,但就是不救表決。這樣就沒有辦法知道是否有來自這臺機器的投票

請注意,這是關於anonimity,而不是如何確保單一投票。

+0

這是真的。如果您正在執行單一投票,系統必須能夠識別用戶已經訪問過的*。 – Lix

+0

順便說一句,我沒有看到你如何輕鬆地做到這一點與鹽漬散列,因爲你有(和應該)沒有一個用戶名相當於保存與您的密碼相當。檢查所有醃製的哈希是不可能的/不切實際的。不知道是否有一個優雅的解決方案。 – Nanne

+0

對於IPv4,只有超過40億個不同的地址。散列(甚至醃製它們)可能不足以保證匿名性,因爲暴力攻擊可以在不太長的時間內測試所有不同組合的哈希值。如果你的鹽是已知的(並且你必須假定它是,如果用戶有權訪問你的數據庫),你將無法保證匿名。 –

1

正如Lix所說,沒有存儲IP地址或強制用戶註冊的唯一方法是存儲與會話鏈接的Cookie,但當然這絕不是解決方案,因爲Cookie可以很容易地清除。

你可以嘗試使用持久性Cookie解決方案,例如evercookie,但是如果我是一個實施類似這樣的網站的用戶,它會讓我煩惱多於註冊,而且不管使用什麼方法,他們總是可以繞過去除Cookie /識別信息。

另一種可能性是它得到了很多的宣傳,去年(抑或是2012 - 我忘了)永久性Cookie的另一種形式,它利用閃存存儲cookie。這些Cookies可以在多個瀏覽器中訪問。一種這樣的解決方案是flash-cookie,但同樣,這可能會讓用戶煩惱,並且不會100%可靠,因爲並非所有用戶都啓用了Flash或安裝了Flash。