2015-01-09 91 views
-1

所以我有一個網絡應用程序將收集人們的意見(人們必須選擇選項1或選項2)。我不希望任何人兩次或更多次提交自己的意見,這讓我想到一個觀點是比較流行的,當它是不是,所以我認爲的幾種方式,但他們都有自己的缺點:防止設備多次執行操作

  • 檢查用戶的IP地址:用戶可以通過使用網絡代理或類似的東西輕鬆地更改他們的IP。像我做了其他桌面應用程序
  • 檢查用戶的HWID:看起來這是不可能用PHP

您能否給我建議的方式是最適合我的web應用程序的問題?理想的解決方案是每臺設備只有一個投票,但我不知道如何使用PHP進行投票。

編輯:請給我你的意見:cookie工作與網絡代理?如果應用程序存儲了一個cookie,那麼用戶使用web代理打開網站或者只是使用隱私瀏覽,cookie是否仍然存在?如果是這樣,IP地址和cookie之間的組合可能會起作用。

+2

IP地址也有相反的效果。如果有多人在NAT後面,只有一個人可以投票。 – 2015-01-09 18:57:04

+2

您可以使用cookie,但它們也是可編輯的 – Neat 2015-01-09 18:57:28

+4

您無法防止這種情況,但您可以讓他們難以投票多次。也許要求他們先登錄。大多數用戶不會真的需要第二次註冊他們的電子郵件。 – 2015-01-09 18:58:28

回答

3

爲防止意外多次提交,需要登錄並將投票保存在數據庫中,或者創建一個與用戶會話相關的隨機唯一標識,並將該標識保存在投票中,拒絕其ID已存在的投票,或者在用戶已經投票的會話中保存一個標誌。

您可以使用ever/super-cookies來刻意僞造投票,但除非您有一些手段來驗證身份並確保沒有人可以擁有多個身份,否則您無法阻止它們。由政府頒發的具有電子商務和電子商務(無論),社會安全號碼功能的身份證。但是,您必須與執行驗證的機構進行交流。

永遠/超級餅乾和瀏覽器指紋識別容易受到多個瀏覽器的使用,並在面對偏執狂用戶時中斷。

如果要防止多次故意選票的安全性和可靠性較低,可以在StackExchange/StackOverflow(即基於信譽)上建立標識,並在獲得某些信譽級別之前阻止投票。或者您可能需要基於電話/帳戶/信用卡/付款的驗證信心低(例如,發送包含驗證碼的短信到電話號碼,Facebook,Google,Amazon,PayPal,Stripe ...) - 人們可以擁有多個電話,賬戶,信用卡/借記卡等。

最後,沒有易於使用的身份驗證系統,可以防止多重身份信心(我知道的)。

+0

謝謝你的回答。可悲的是,我真的需要一個易於使用的系統來完成我的工作。請給我你的建議:cookie是否可以與Web代理一起工作?如果應用程序存儲了一個cookie,那麼用戶使用web代理打開網站或者只是使用隱私瀏覽,cookie是否仍然存在?如果是這樣,IP地址和cookie之間的組合可能會起作用。 – user76757 2015-01-09 19:24:00

+0

常規Cookie應與網絡代理一起使用,但在退出隱私瀏覽時將被刪除(或根本不存儲)。有可能使用一些超級曲奇來回避這個問題,例如瀏覽器中存在的[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security)持久性機制 - 它保留在私密瀏覽會話中(但可能很快會被修復)。正如其他人所說的那樣,依靠IP地址是不好的 - 它可能會在會話期間發生變化(當ISP斷開連接時,或者從無線連接切換到3G時),並且可能會在多個用戶之間共享。 – Archimedix 2015-01-09 19:33:43