我想建立一個不需要人登錄的投票系統,但他們可以按自己的意願進行投票。PHP投票系統,如何阻止垃圾郵件?
如何阻止人們在投票中發送垃圾郵件(發送請求添加投票)?我知道使用客戶端腳本可以很容易地阻止它(來自正確的用戶),但服務器端(PHP)又如何呢?我不希望人們擁有這個網址,並不斷地增加它的數量。
乾杯
我想建立一個不需要人登錄的投票系統,但他們可以按自己的意願進行投票。PHP投票系統,如何阻止垃圾郵件?
如何阻止人們在投票中發送垃圾郵件(發送請求添加投票)?我知道使用客戶端腳本可以很容易地阻止它(來自正確的用戶),但服務器端(PHP)又如何呢?我不希望人們擁有這個網址,並不斷地增加它的數量。
乾杯
實施reCAPTCHA - 實施起來非常容易(可能需要10分鐘),是一種很好的反垃圾郵件措施,並且具有更大的用途(數字化書籍)。
如果你真的想去用cookies,看看evercookies。他們是超級侵入,而且非常不道德的,但是,嘿,這是你的網站:)
你必須登錄自己的IP和/或設置cookie。 Cookie的問題是客戶端可以清除它們,IP跟蹤的問題在於,如果NAT防火牆處於混合狀態,它可以阻止多個用戶,但大多數情況下它會很好地工作。
另外,您可以使用必須以投票方式提交的表單中隱藏值的安全令牌。如果令牌不存在,那麼您不計數投票。這樣,一個人不得不至少寫一個能夠從表單中提取代碼的刮板,而不是試圖發送假票。 – drew010 2012-02-09 00:33:30
您可以添加vote_tracking表:
vote_tracking
id
poll_id
session_id
當在特定輪詢用戶的投票,你可以更新與他們的會話ID行。
然後,您需要實施一些代碼,以確保您不會繼續發出查詢以確定用戶是否已在投票中投票。如果你有一個'主動'民意調查,你可以做一次查詢,然後註冊一個表明他們已經投票的會話var,所以不管這個民意調查有多少次被渲染,你都不會繼續點擊數據庫。顯然這隻會在當前session_id匹配時才起作用,當它不同時,您將不得不發出第一個查詢,然後重置會話var。
我建議收集機制,以便您的表最終不會有一百萬行。如果您創建一個新的「活動」民意調查,則截斷vote_tracking表,或者通過重命名該表進行歸檔。
此外,IP跟蹤的問題在於,您將bork用戶置於代理之後,在第一個人投票後沒有其他人將能夠投票。
只是一個說明,「使用客戶端腳本可以很容易地停止(垃圾郵件)」是不正確的。任何客戶端腳本都可以輕鬆繞過。 – CanSpice 2012-02-09 00:30:43
沒有登錄,首先想到的就是存儲IP地址和每個投票,並用它來檢查用戶還沒有投票。這不是一個防彈解決方案,但它可能會擺脫你的大部分問題。 – 2012-02-09 00:31:32
在CanSpice的評論上詳細闡述一下 - 只是禁用Javascript會使您的所有客戶端驗證毫無意義。如果一份工作值得做,那麼值得做一個服務器端的工作;客戶端代碼只是給合法用戶更容易的時間,在提交表單之前給他們反饋。 – Joe 2012-02-09 00:35:25