網站的後台技術人員是如何反制搶票軟體的?

例如演唱會門票、學校搶課或者食品搶購,網站肯定希望所有人公平競爭不希望搶票腳本的介入,那網站後台是如何反制搶票腳本的,是從ip、伺服器時間還是js本身入手?


其實這個問題就是反爬蟲的問題,或者說如何區分人和機器的問題。

常見的辦法無非是用更複雜的驗證碼、更細緻的訪問頻率控制策略、更複雜的訪問流程。

歸根結底,我們能做的就是在成本可接受的範圍內提高對方的成本,只要你還想正常提供服務,就不可能杜絕bot。

---------------------------------------------------------------

不計成本的情況下,倒也有些喪心病狂的玩法。

一個頁面十幾二十個請求,請求裡面有真有假,其中還有些必須要是半真半假。
所謂半真半假,就是說就算沒有這些請求,看起來也能正常訪問,但是其實後台已經可以逐步將其分入爬蟲組,並給他一個蜜罐環境,隨便折騰。

但是如果真的做到這一步,別的不說,多了多少代碼要管控要測試要迭代?
你是加班加點了,但是老闆也未必加工資啊。

---------------------------------------------------------------

按鍵精靈或者無頭瀏覽器模擬人工操作,可以靠行為模式統計,不過這個技術難度就大了,對大多數公司來說是無法接受的成本。

---------------------------------------------------------------

所以一般只要別人別做的太過分,睜隻眼閉隻眼就算了,無產階級的命操什麼資本家的心。

爬蟲流量太大?那就半推半弄個容易抓出來的API故意讓人用,總好過別人抓那麼大一個頁面就為了一丟丟數據吧?

比正經公共API好的就是,改了的時候不用通知。


簡訊驗證是一種常用方法,可以對付一般的bot,就是在普通確認機制上加一層簡訊驗證,只有驗證通過,操作才通過,因為自動化手機簡訊驗證需要手機號碼,而偽造手機號碼的難度和成本比較高,一般的bot都不具備。

另一種方法是使用實時token,比如steam的安全機制就用到了手機上事實更新的令牌,也是比較好的方法。

這些方法都要犧牲一點操作效率,但安全和效率通常就是互斥的兩個指標,看怎麼權衡了。


其實是比較容易處理的,在頁面上使用js採集用戶提交數據前的行為(手機app更方便,什麼都能做),然後存起來。然後人工對這些數據分類作為樣本,根據樣本編寫神經網路模型,用分類出的樣本對模型進行訓練,反覆測試誤傷率,上線!其實這個方向目前門檻已經比較低了,簡單花幾小時學習一下python,再撿一下線性代數的知識,就夠用。

關鍵點:

採集數據的js編碼演算法要盡量複雜,不容易分析,要複雜到「真有水平分析出來的人不願意去做這個」的程度。

使用這種模型以後,去掉驗證碼之類的,提高用戶體驗。或者研究誤傷原因,將誤傷的數據作為驗證碼生產條件,利用人腦驗證碼算力影響模型正確率。


補充:有答主說頁面多加幾個請求,讓對方很難抓出想要的內容。其實我們在投票的時候,不一定完全按照爬蟲的方式,有的時候會採用按鍵精靈模擬操作,或者是在網頁用js模擬操作表單一類。

正文:

1.滑動驗證碼

2.簡訊驗證

3.微信驗證

4.限制ip

其實以上幾種只能做到相對安全,對於一般的反灌水是夠了的,但是別說買票,連投票機器人都放不住。如果你得票真有價值的話,技術手段作用微乎其微。

①極驗之類滑動驗證碼算是比較難難的,但是三四線城市找一個體校或者專科學生,一天200打碼足夠了,管你是什麼驗證碼,況且有專門的打碼工作室可以遠程代打,價格不貴。

②收簡訊驗證碼的價格一般是1元左右,對方直接提供api。

③微信驗證,比簡訊驗證稍微麻煩。也是對方提供api。價格不穩定,不了解最近價格,之前用是1塊錢一次。

④限制ip…… 你逗我?

(曾經做過刷票,對於搶票幾乎沒有研究,因為需要投入成本稍大。不過感覺上搶票更簡單,因為投票需要控制單個成本。搶票幾乎不用。)


限制ip和ip訪問次數,還有ip段!最好弄點驗證碼。越複雜的越好,還有手機驗證碼,最好再加個郵箱的,


推薦閱讀:

Chrome 對 JS 的支持似乎不是很好,為什麼有些 JS 腳本執行不了?要怎麼解決這個問題?
怎麼理解元編程?
這種前端架構好嗎?
js到底應該由誰來寫?
Web前端需要熟悉大學裡[高大上]計算專業課嗎?

TAG:JavaScript | 計算機網路 | 腳本語言 | App後台管理和數據統計 |