十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
Python爬蟲教程:教你用200行代碼實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼

做網(wǎng)絡(luò)爬蟲的同學(xué)肯定見(jiàn)過(guò)各種各樣的驗(yàn)證碼,比較高級(jí)的有滑動(dòng)、點(diǎn)選等樣式,看起來(lái)好像挺復(fù)雜的,但實(shí)際上它們的核心原理還是還是很清晰的,本文章大致說(shuō)明下這些驗(yàn)證碼的原理以及帶大家實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼。
實(shí)際上這類驗(yàn)證碼的校驗(yàn)是分為兩個(gè)步驟的:
1.第一步就是前端的校驗(yàn)。一般來(lái)說(shuō),登錄注冊(cè)頁(yè)面在點(diǎn)擊提交的時(shí)候都會(huì)伴隨著一個(gè)表單提交,在表單提交的時(shí)候會(huì)有 JavaScript 事件的觸發(fā)。如果加入了驗(yàn)證碼,那么在表單提交的時(shí)候會(huì)多加一個(gè)額外的驗(yàn)證,判斷這個(gè)驗(yàn)證碼是否已經(jīng)成功完成了操作。如果沒(méi)有的話,那就直接取消表單的提交,然后順便提示說(shuō)”您的驗(yàn)證沒(méi)通過(guò),請(qǐng)重新驗(yàn)證“,諸如此類的話。所以這一步就能防范”君子“之為了。
2.第二步就是服務(wù)端的校驗(yàn)。意思就是說(shuō)表單提交之后,會(huì)有請(qǐng)求發(fā)送到服務(wù)器,這個(gè)請(qǐng)求中包含了很多數(shù)據(jù),比如用戶名、密碼,如果對(duì)接了驗(yàn)證碼的話,還會(huì)有額外的驗(yàn)證碼的值,或者更復(fù)雜的加密后的 Token 值,服務(wù)器會(huì)對(duì)發(fā)過(guò)來(lái)的信息進(jìn)行校驗(yàn),如果驗(yàn)證通過(guò),那么整個(gè)請(qǐng)求就成功了,返回正常的響應(yīng),否則返回錯(cuò)誤的響應(yīng)。所以如果想要通過(guò)程序來(lái)直接構(gòu)造表單提交的時(shí)候,服務(wù)端就可以做進(jìn)一步的校驗(yàn),由于提交的驗(yàn)證碼相關(guān)的信息都是和服務(wù)端的 Session 相關(guān)聯(lián)的,另外再加上一些 CSRF 等的校驗(yàn),所以這一步就能防范”小人“之為了。
上面就是驗(yàn)證碼校驗(yàn)的兩個(gè)階段,一般來(lái)說(shuō)為了安全性,在開(kāi)發(fā)一個(gè)網(wǎng)站時(shí)需要客戶端和服務(wù)端都加上校驗(yàn),這樣才能保證安全性。
本文章主要來(lái)介紹一下第一個(gè)階段,也就是前端校驗(yàn)的驗(yàn)證碼的實(shí)現(xiàn),下面來(lái)介紹一下拖動(dòng)驗(yàn)證碼的具體實(shí)現(xiàn)。
需求
那么前端完成一個(gè)合格的驗(yàn)證碼,究竟需要做成什么樣子呢?
1.首先驗(yàn)證碼有個(gè)大體的雛形,既然是拖動(dòng)驗(yàn)證碼,那就要拖動(dòng)塊和目標(biāo)塊,我們需要把拖動(dòng)塊拖動(dòng)到目標(biāo)塊上就算校驗(yàn)成功。
2.驗(yàn)證碼的一個(gè)功能就是來(lái)規(guī)避機(jī)器的自動(dòng)操作,所以我們需要通過(guò)軌跡來(lái)判斷這個(gè)拖動(dòng)過(guò)程是真實(shí)的人還是機(jī)器,因此我們需要記錄拖動(dòng)的路徑,路徑經(jīng)過(guò)計(jì)算之后可以發(fā)送到后端進(jìn)行進(jìn)一步的分類,比如對(duì)接深度學(xué)習(xí)模型來(lái)分類拖動(dòng)軌跡是否是人。
以上就是驗(yàn)證碼的兩個(gè)基本要求,所以我們這里就來(lái)實(shí)現(xiàn)一下看看。
結(jié)果
這里就先給大家看看結(jié)果吧: