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