2012-12-29 85 views
1

如我們所知,Reddit允許每個鏈接每個IP地址大約1票,以避免垃圾郵件發送者的問題。我正在開發一個Slim應用程序,該應用程序將具有投票功能,坦率地說,我不知道如何實現這樣的系統,因爲我沒有使用Cookie和本地會話的經驗。另外我的大部分函數都有像(example)localhost:8888/myapp/voteup/item-to-vote這樣的路徑。防止投票垃圾郵件的最佳方法是什麼?即reddit如何做到這一點

+0

這是一個「匿名網站」嗎?這意味着你需要在投票前先註冊用戶,否則任何發現該網站的人都可以投票。 (差異的投票行爲與知識產權或會員資料耦合) –

+0

任何人都可以投票 – user1923948

回答

0

在我的網站上,我允許成員每24小時對1到5之間的代碼進行一次評分。我通過添加哈希碼並使用ajax提交投票來阻止垃圾郵件。自2012年6月我添加它以來,我還沒有收到任何垃圾郵件投票。我以前每天從殭屍工具中獲得約40張選票,但現在已經被淘汰。

例如,這是我的鏈接是什麼樣子:
http://phpsnips.com/process/vote.php?id=43&vote=3&enc=a560e4320af4e13e4170947cd42de18b

就這樣,ENC是不同的每次頁面加載,一旦投票提交它再次改變。

我的步驟

  • 使用會話鏈接創建一個MD5哈希
  • 地方散或形成隱藏字段
  • 在提交頁面測試,以確保會議符合鏈接/字段
  • 重置散列
  • 重定向回原始頁面(如果不使用ajax)
+0

你可以提供一些代碼,顯示我可以自己做這個嗎?......我很困惑。 – user1923948

+0

這是一個類似的答案,我提供它基本上是相同的東西:http://stackoverflow.com/questions/14059199/check-if-form-is-called-from-correct-page/14059309#14059309 –

0

對抗自動機器人的最好方法是混淆它們。隱藏一些文本輸入字段,將它們命名爲其他名稱(名稱字段,將它們命名爲電子郵件以及網站,命名它們的名稱等)

更喜歡使用Javascript提交,所以它可以幫助緩解表單提交。 CSRF的使用也可以提供幫助。強制使用cookie,HTTP自定義標題,以確保只有瀏覽器和自動方式才能重現。

邏輯問題也可以提供幫助,比如「多少是1 + 1,寫下來」(答案必須是兩個,並且是隨機的)或「以W開頭的一週中的哪一天」。

+0

以及我說我的應用程序是API驅動(和API將公開)所以我需要一個傻瓜安全的方法 – user1923948

+0

好吧,API是公衆你需要問一個訪問密鑰,然後是一個API祕密,所以它是公開的,但沒有那麼多。 – pocesar

+0

公共API可以在不需要密鑰的情況下訪問GET調用,但只有POST/PUT需要API密鑰,否則您將有一種適度的方式,這遠比避免第一個問題 – pocesar

相關問題