【原創】 隨著網路的發展,越來越多的評選活動採取了網路投票的制度,也因此刷票這個概念便出現在了大眾面前。作為乙個程式設計師如何維持網路投票的公正和嚴謹,如何盡可能的避免刷票出現的機率成為了開發此類程式不得不考慮的問題。就目前而言著實是沒有乙個完美的解決方案。現行的所有機制其實都只是做到了「防君子不防小人」。
刷票分為兩個大類:一類是人為主體,通過人力去刷票。另一種更為可怕,通過特定的刷票機去代替人力完成令人恐怖的批量刷票。
現行的防刷票機制
2、cookie:這個應該是很老很原始的一種方式來防止刷票了。對使用者的每次投票進行cookie的記錄,當下次投票時進行檢測發現cookie中已經存在了此投票記錄則禁止此次投票。很遺憾的是此方式對於大多數網民已經失去作用(當然除了特別嫩的菜鳥外)。只需要通過ie清掉cookie限制就將解除。
3、ip限制(+時段):這種方式也是目前最多的防刷機制。能遮蔽掉部分的刷票。但是其存在很多侷限,因此程式設計師也不得不放棄小群體(採用統一出口的群體,例如網咖等)來顧全大群體。人們上網大都是活動ip位址,因此是不存在真正意義上的ip防刷的。筆者認為其實ip的方案並不是真正的防刷,更應該說他是採用了一種策略:加大投票操作難度和時間成本從而使部分投票者放棄刷票。只不過這種投票操作的難度增加不會影響到當前使用者的流程,他是在後台由程式設計師完成的。也就是說在前台使用者操作上沒有任何變動因此具有一定的友好性。
現行方案中都沒有乙個很好的防止方案。防止刷票之所以很難有完美的解決主要原因在於人。人是一種很聰明、很勤奮、很有耐心的天才動物,有這麼一句話「天才就是重複次數最多的人」。因此不論你如何設定防範規則都很難湊效。即便你的規則可以難倒恐怖的刷票機,你卻沒有辦法難倒勤奮有耐心的人。你防止ip我就重複著撥號,你cookie限制我就重複著清cookie,你做mac限制我跟著換,只要我肯花時間沒有辦不到的。這也再一次應徵了那句話「防君子不防小人」
探索新的方法或解決辦法
在上面提到了人的恐怖性,所以這裡也不是說我能**出乙個突破障礙的方法,只是想想研究研究罷了。
2、從程式上考慮。這裡我將提出乙個新的方式,通過實際測試又防止了一批小人,但是明白人還是可以突破的。這裡要先從一場經歷說起。
以前讀書時在學校學工處任**部長,學工通常喜歡在每年舉辦一些投票的評選活動,什麼「風采女生」啊「感動人物」啊的網路投票。當初就是採取了cookie+ip的限制,然後靜觀其變。不久就發現了刷票情況,換著ip的情況越來越嚴重再加上學校機房公用乙個出口因此必須解除ip限制。為此不得不採取別的方式。因為身處學工我們能夠拿到在校生的學號和身份證號,於是企圖通過這兩者匹配登陸的方式進行刷票防治。前幾日情況穩定,後來情況惡化,出現有人通過花名冊來刷票,由於撤銷了ip限制,這種刷票一下子暴增。我們又不得不去總結和尋找新的辦法。
使用者嘗試登陸-檢測登陸資訊是否正確-正確則置過度變數(session)值-進入有此flash檢測的頁面(當然此頁面你要盡可能偽裝,切不可以自自報家門,我偽裝成類似於**登入時證書檢測的效果)-如果flash檢測正常則將此賬號通過flash追加到本機-呼叫js跳轉到轉正頁面(即清掉過度變數session,將過渡值轉給正式的session儲存)-這樣使用者就可以投票了
關於flash的檢測,其實flash只是load後台的設定(包括 單機允許登入的賬號個數+時間戳)然後再和本機儲存了的登入個數+時間戳匹配並返回結果即可
通過此方式後,發現情況大有好轉,多次活動結果表示此方案能一直穩定到活動結束。從資料庫中的記錄看出,同一ip同一天幾乎都是5個賬戶的投票資訊(當初限制的是單機限制5賬戶),而且此方式即便使用者清除cookie,重新撥號,重啟電腦都是沒有用的,至於為什麼,那得研究flash了,其實他是將變數儲存在了乙個特定的位置哦。所以這種方式由於不太常規因此知道突破的人就少。當然這裡說到的是需要登入的方式,如果匿名方式可以用此方法麼?其實也是可行的,只不過需要後台自動根據當前時間戳分配乙個唯一標示給客戶並自動模擬登入供flash記錄,流程上就又得麻煩了。
總之:防止刷票不可能有乙個完美的方式,也不可能有乙個長久的方式。如何防止刷票關鍵在於如何「蒙蔽使用者」,讓他不知道你的限制規則,再加上合理增加投票的難度和成本開銷,這樣可以減少刷票的產生。多限制方案下手多管其下也許能達到比較好的效果。
ps:技術這個東西是乙個雙刃劍,如果好的想法和方法固守保留,他也許會活的更久,但他絕對不會成長進步;如果你將其公之於眾也許他會死的很慘,但是馬上會激起新的浪潮。在網上搜尋了很多防刷票的方法,都未曾發現flash的這種防治措施,因此只好冒大不韙先抖出來,做一次罪人了。 這次算是我「此地無銀三百兩」了。
school下次舉行投票,看到了的明了人應該難不倒他了!哎~~~~~
微信防刷票限制
一 判斷上一級頁面 通過http請求header中的refere,來判斷投票操作的上級頁面,可以防止直接傳送請求來進行投票的部分自動投票軟體。判斷上一級頁面 通過請求頭部資訊中的agent來判斷開啟的客戶端。三 驗證碼 在投票的頁面上新增驗證碼資訊並加密,傳遞給後台,判斷驗證碼是否一致。1 在htm...
幾條簡訊驗證碼防刷機制
1 時間限制 60秒後才能再次傳送 這種方法不是非常有用,技術好點的人可以繞過這個限制傳送簡訊。2 手機號限制 同乙個手機號,24小時之內不能夠超過5條 這只能避免手動刷簡訊,對於批量使用不同手機號碼刷簡訊的機器是無用的。3 簡訊驗證碼限制 30分鐘之內傳送同乙個驗證碼 30分鐘之內,所傳送的簡訊驗...
基於PHP給大家講解防刷票的一些技巧
刷票行為,一直以來都是個難題,無法從根本上防止。但是我們可以儘量減少刷票的傷害,比如 通過人為增加的邏輯限制。基於 php,下面介紹防刷票的一些技巧 1 使用curl進行資訊偽造 2 驗證碼 採用非常複雜的驗證碼 確切的說驗證碼的出現不是針對於人,而是針對於機器。通過複雜度和識別難易度的控制來阻攔掉...