首頁  >  文章  >  後端開發  >  投票與刷票的攻防-如何防止刷票

投票與刷票的攻防-如何防止刷票

*文
*文原創
2017-12-25 11:38:114945瀏覽

在專案中,投票是應用非常廣泛的功能,同時也衍生了許多刷票的行為。如何防止刷票就成了非常重要的問題,本文透過分享一些防止刷票的思路,希望對大家有幫助。

1. IP限制
這是使用的最多,也是最廣泛,不可少的刷票限制。而且由於專題都沒有使用者模組,使得這個方法,幾乎成了唯一可行的手段。該方式,透過取得存取遊客的IP位址,來限制其在一段時間內所能使用的票數。當然,正常訪問頁面投票的遊客,肯定都能很好的被這個手段所限制,但是,各種投票的活動和專題,以及豐厚的獎品,使得一些人想方設法的想要進行刷票。

ADSL用戶,可以透過斷線重撥來更換IP位址。
使用代理程式存取的用戶,我們也無法取得其真實的IP位址。
還有我們未知的刷票工具。
以上都是我們沒有辦法克服的難題,對於網咖/內網用戶來說,這樣的設定也會顯得不夠公平。

2. Cookies 驗證
這也是網路上所用到較多的手段,不過,所有來自於客戶端的資訊和內容都是不可靠的。熟知cookies原理的人,就可以輕易的繞過限制。

cookies 可以停用。
使用代理程式存取的用戶,我們也無法取得其真實的IP位址。
Cookies可以隨意清除、修改。
3. Session 驗證
session會給所有造訪的遊客,指定一個唯一的sessionID。這樣,似乎對於防止刷票有一些作用。可惜session有致命的缺點。

關閉瀏覽器,session就會被銷毀。
客戶端停用cookies,session也會失效。
4. 驗證碼
註冊,登陸,回复,發文…驗證碼使用的範圍很廣,很多。可惜,至於具體效果呢,長久下來,只發現這樣的方式,其實只是加大了普通遊客的投票難度,而且刷票頻繁的訪問驗證碼,也大大加大了服務器負擔。

有一種驗證碼是可行的,google推出的圖形驗證碼,旨在讓使用者將圖片翻轉至正確的方向,方可完成驗證。想必很少有軟體或電腦操作可以很好的繞過這樣的驗證碼。不過,缺點呢,實現難度很高。

5. MAC位址限制
作為web程序,很難取得真實的Mac位址(我用php/js實驗過,並沒有成功的取得到Mac位址)。當我們讀取客戶端Mac位址時,讀取的也是儲存於註冊表的一個訊息,它也是可以進行修改的。

6. 使用者模組
這應該算很有用的方式。每個遊客,必須註冊了帳戶才能進行投票,透過限制帳戶ID來限制投票,並且可以限制初始註冊用戶,一段時間內不能參與投票。而且,真有大量的註冊用戶湧入,也可以增加網站的流量。可是,對於小地區網站來說,這樣會讓網友覺得很麻煩,可能放棄投票,可能會流失網站的使用者。

7. 行為記錄
其實,很多刷票行為我們是沒辦法進行限制的。可是有時候,我們卻可以很好的記錄下來。而且當偵測到非正常投票的時候,自動提出票數,要嘛返回投票成功的假象,也可以很好的限制刷票。

缺點就是,記錄過多的數據,會讓伺服器壓力很大。而且,如果記錄行為的記錄點不夠多,不夠複雜,也可能被刷票的專業戶所參透。

8. 回答問題
第一次使用這個方式限製刷票的時候,我們很欣慰的看到了不錯的效果。可惜,如果沒有足夠海量的題庫,很快問題的內容和答案就會被收集起來。反而讓正常投票的用戶,覺得投票很噁心、很麻煩,產生厭惡心理。漸漸的也被我們拋棄了。

9. 隨機投票地址
該方法, 讓每個造訪頁面的使用者得到一個隨機唯一的KEY,透過這個KEY,產生一個投票地址,該地址只能訪問一次,使用過後便作廢。

可惜,指定的KEY的內容,我目前是採用的sessionid+ip+隨機數 產生的MD5碼,而sessionid和ip在上面的內容都提到,是可以銷毀和篡改的。這樣的方式,也不過是在ip限制和session限制無效時候的垂死掙扎。

10. 填寫資訊
投票時,讓遊客填寫身分證,姓名,手機號碼等可以表示一個人身分的信息,來進行唯一性驗證。不過,身分證你知道格式,姓名隨便填,手機號碼隨便填寫,也是沒辦法限制的。反而讓正常投票的人覺得麻煩。

11. 投票碼/排號系統
投票前,使用者都需要在其他頁面/郵箱先取得到一個唯一投票的編碼/卷,使用一次作廢。不過,如何驗證『人』的唯一呢,如果有用戶,他的郵箱夠多,是不是就可以無限取得投票碼呢。

對!所以,這也只是治標不治本的方法了。不過,至少,這個方式也會讓刷票的人覺得很麻煩。但是同時,也會讓正常投票的人覺得不方便。不過,能夠讓刷票黨,刷得沒那麼痛快,也算是有用了。

12. 人民幣投票
虎,這樣最好,不管是發短信,打電話,還是支付寶,一票一元人民幣,你如果是足夠捨得,當然,隨便你投,隨便你刷,咱也樂意不是。透過支付介面的結合,作弊是相當難的了。

不過,公平性有待考究,畢竟不是所有人的支持者都有錢,都捨得花錢,可能讓好的作品因為'窮'而得不到票數,這是在咱公平、民主的社會中,是不提倡的!

好了,差不多就以上這些方式。引用一個網友的原文:「要完全杜絕刷票,基本上只能靠人」。

拋磚引玉:

flash投票,不過不是很清楚原理,有空的時候會投入測試。
外掛程式。 web插件,可能需要用戶下載安裝,一般用戶會覺得很麻煩,可行性有待考究。
一些有趣的設定例如,短時間內的多次投票,可能導致投票數下降;可以給作品投負票數,不過有一定幾率無效或者反射到其他作品;類似農場的'偷菜',我們可以投票等。也許可以增加一點可玩性,可是公平性就無法保證了。
總結:個人覺得目前最有效的只能是人民幣投票了,可以很好的限製刷票行為。

相關推薦:

php 投票(調查)

php 高並發競標

詳細介紹php redis實作文章發布系統(使用者投票系統)的實例

#

以上是投票與刷票的攻防-如何防止刷票的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn