今天是春運的第一天,大家都搶到票了嗎?有多少打工人是定時搶票,不停地刷新網(wǎng)頁,最后仍然不得不花大價錢買“搶票加速包”才買到票的?
這兩天關(guān)于“12306已申請防止自動搶票專利”的新聞沖上熱搜,引發(fā)廣大網(wǎng)友的關(guān)注。
那么,為什么有了軟件加持,就真的能買到緊缺的車票呢?如何才能防止自動搶票呢?今天從技術(shù)的角度來聊聊。
圖片來源:網(wǎng)絡截圖
網(wǎng)上購票時,到底發(fā)生了什么?
在12306上買火車票,和在淘寶、京東這些電商網(wǎng)站上買東西,基本的流程是相似的,大概可以分成登錄、查詢、選擇、確認、支付這樣幾個步驟。
登錄是購票的前提,它會驗證使用者的身份是否是自己聲稱的身份,涉及個人信息的確認。
其原理也很簡單:用戶輸入自己的用戶名和登錄密碼,購票系統(tǒng)在自己的用戶數(shù)據(jù)庫中查詢,看看用戶名和密碼是否正確。如果正確的話,就認為用戶身份可信。
圖片來源:網(wǎng)絡截圖
在這一階段,風險在于用戶身份可能被仿冒。仿冒者可能會大量嘗試不同的密碼,或者使用其他網(wǎng)站泄露的密碼,來仿冒真正的用戶身份。
而通用的解決方案是雙管齊下:當用戶連續(xù)幾次輸錯密碼,就在一段時間內(nèi)禁止登錄;以及在用戶輸入密碼后,再經(jīng)過一個驗證步驟,來讓用戶拖拽拼圖,或者在一系列圖片中找到符合要求的圖片。
過去的12306曾因為驗證難度過高而為人詬病——在早期,12306的第一次驗證通過比例只有可憐的8%。當然,在經(jīng)過多年持續(xù)改進后,這一問題已經(jīng)被解決得差不多了。
確認了用戶身份后,接下來就是一路坦途。用戶先根據(jù)自己的出發(fā)地和到達地查詢余票情況,然后選擇自己想要的車次;然后選擇乘車人和座位信息,確認選擇正確后,支付票款。
這個過程,其實和用戶把身份證遞給火車站售票處的工作人員、由工作人員代為選票的過程是一樣的,只不過實現(xiàn)了完全自助而已。
有余票時,這個過程當然沒有問題,大家按照先來后到的順序逐一購票就好。但若是余票不足,而大家又都想買到票,那么就不免有人想要上一些技術(shù)手段了。
為什么技術(shù)手段可能可以搶到票?
購票時的技術(shù)手段,就是自動化搶票。自動化搶票的基本思路,是讓計算機模擬人的行為。
個人使用:若是開發(fā)一個僅僅自己使用的自動化搶票程序,還是比較簡單的。先用自己的個人信息登錄,人工通過身份驗證,然后以較高的頻率持續(xù)查詢想要的車次,當查詢返回的數(shù)據(jù)表示有余票時,馬上下訂單。
此時的關(guān)鍵,在于分析返回的查詢結(jié)果。而這也不難,畢竟查詢結(jié)果是返回的一串文字,從中提取信息比較容易。這就像是站在售票處窗口,過兩分鐘就問一次有沒有票一樣,反正12306的服務器是機器而不是售票處工作人員,只要計算能力允許就能做到有問必答,不會覺得這樣問來問去很煩。
多人使用:而若是要為許多人搶票,就會麻煩一些。幫助用戶登錄和通過驗證比較麻煩,畢竟讓計算機像人那樣識別圖形、通過驗證過程還是有些難度的——驗證碼發(fā)明出來,就是為了讓計算機難以冒充人。
圖片來源:網(wǎng)絡截圖
不過既然是技術(shù)問題,那往往也就會有技術(shù)解決方案。隨著計算機視覺技術(shù)的發(fā)展,攻破圖形驗證碼并不是難以做到的事情,只是拉高了技術(shù)門檻而已。
所以自動化搶票的過程,就像是一群人堵在售票處窗口,過幾秒鐘就有人過來問一遍有沒有票,直到買到票或者過了售票時間才罷休。
圖庫版權(quán)圖片,轉(zhuǎn)載使用可能引發(fā)版權(quán)糾紛
自動化搶票會帶來幾個后果:對那些規(guī)規(guī)矩矩排隊買票的用戶不公平;浪費了12306服務器的計算資源,可能降低12306用戶的購票體驗;以及降低了所有用戶的幸福感——沒有買到票的用戶自然不高興,而加了錢搶到票的用戶也未必開心。
所以當然,為了防止自動化搶票,也該有相應的技術(shù)手段才是。
如何防止自動化搶票?
有幾個基本思路可以提高自動化搶票的技術(shù)難度。
1.識別來自自動化搶票軟件的行為,找到那些自動化搶票的機器黃牛。
具體而言,可以通過分析服務器的訪問情況,篩選出那些短時間內(nèi)頻繁查詢車票信息的機器,禁止它們訪問;而自動化搶票軟件為了對應這一方案,則往往會采取頻繁更換IP地址的方式。所以這種思路,只能作為基礎。
2.讓自動化搶票軟件無法獲得有效的余票信息。
如前所述,我們向12306上發(fā)起的每次余票查詢,都會向用戶的瀏覽器返回一串文字,而搶票軟件會分析這串文字,獲取余票信息。如果返回的不是文字,搶票軟件要處理起來就會麻煩得多。畢竟計算機視覺和人類視覺很不一樣,人能一眼看出來的東西,計算機識別起來并不容易。
圖片來源:網(wǎng)絡截圖
2021年11月,中國鐵道科學研究院電子計算技術(shù)研究所申請了一項名叫《一種防止自動搶票方法及系統(tǒng)、設備和存儲介質(zhì)》的專利,采用的就是這種思路。在這項專利中,研究者把查詢后的余票信息轉(zhuǎn)換成了可伸縮矢量圖像(SVG,ScalableVectorGraph),再發(fā)送回用戶的瀏覽器上。
SVG是一種很有意思的圖像格式。它是圖像,但卻用文字來描述圖像中的位置、顏色、線條寬度等等信息;它使用相對點來保存數(shù)據(jù),因此可以縮放到任意大小而不會失真。這兩個特征,讓它既可以容易地通過程序繪制,也適合出現(xiàn)在任意大小的顯示器上。
在放自動化搶票上,它的這兩個特征就很有用了:查詢返回的是圖片,傳統(tǒng)的自動化搶票軟件無法從中提取出和車票信息相關(guān)的文字,自然也就無法搶票。而手動購票的用戶,能識別出這些圖片中的車票信息,依然只需點擊想要的車次信息,就可以繼續(xù)購票。
在上文所述專利中,也提出了一種巧妙的驗證方式:使用文字組合,實現(xiàn)基于文字推理的行為驗證。就是讓用戶在購票前再通過一次行為驗證。
具體而言,大概像是這樣:首先,隨機選擇幾個漢字,把它們轉(zhuǎn)成SVG圖像,再分成上下兩部分。然后,展示這些漢字的上半部分,和其中一個字的下半部分。最后,讓用戶找到正確的拼合方式,只有組成正確的漢字,才算通過驗證。
只有圖5才是正確的。圖片來源:上述專利說明書
自動化搶票軟件要通過這種驗證,則需要“認字”才行,也就是說需要擁有一個字庫,以及能夠?qū)φ兆謳鞂ふ艺_的拼合方法,這無疑會增加自動化搶票的難度。
總而言之,要防自動化搶票,就要為購票系統(tǒng)設計一些障礙,這些障礙對于人來說不難,而對于計算機來說暫時還很難。
畢竟需求就是動力,計算機的能力也會提升。技術(shù)會逐步升級,自動化搶票和反自動化搶票會是一場持續(xù)的拉鋸戰(zhàn)。
本文為科普中國-星空計劃作品
出品|中國科協(xié)科普部
監(jiān)制|中國科學技術(shù)出版社有限公司、北京中科星河文化傳媒有限公司
作者|猛犸 哈爾濱理工大學
審核|于旸 騰訊玄武實驗室負責人