日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

利用Jmeter测试CSRF令牌验证的Web API

發(fā)布時(shí)間:2025/3/20 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Jmeter测试CSRF令牌验证的Web API 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事情的起因是最近收到的一批測(cè)試需求,要測(cè)試公司HR系統(tǒng)的接口性能。這個(gè)是需要測(cè)試的接口列表:

所有的接口請(qǐng)求,都基于登錄驗(yàn)證成功,否則將無法獲得正確的應(yīng)答。

首先想到的是在瀏覽器上捕捉請(qǐng)求。打開Chrome瀏覽器,調(diào)出開發(fā)者工具欄,在地址欄輸入登錄模塊的地址,訪問登錄頁(yè)面:

?

輸入賬號(hào)和密碼,錄制登錄過程;然后定位到開發(fā)工具的Network頁(yè)面,找到登錄的事務(wù)。如下圖:

注意右下方的Form Data,這是登錄POST方法提交的三個(gè)參數(shù),我們需要捕捉的就是_csrf的那個(gè)動(dòng)態(tài)令牌。

通過在網(wǎng)上的一番查找和本地實(shí)驗(yàn),成功的完成腳本的調(diào)試。

以下是整個(gè)過程:

?首先啟動(dòng)Jmeter UI,新建一個(gè)線程組;然后添加一個(gè)HTTP請(qǐng)求,取名UserLogin – Open,意在獲得首次打開登錄頁(yè)面的CSRF Token。

?

方法使用GET,而實(shí)際的登錄提交將為POST;這里并不是實(shí)際登錄,不用在意。

這里一定要勾選【跟隨重定向】,包括之后創(chuàng)建的HTTP請(qǐng)求,都勾選此選項(xiàng)。

請(qǐng)求參數(shù)部分,填寫用戶名和密碼。由于現(xiàn)在還不能獲取CSRF?Token,此時(shí)登錄并不會(huì)成功,但目的不在于登錄,而在獲得CSRF Token的內(nèi)容。

?

完成后,創(chuàng)建一個(gè)【后置處理器 - 正則表達(dá)式提取器】,這里抽取登錄頁(yè)面響應(yīng)報(bào)文中的CSRF Token。內(nèi)容如下圖:

?

Apply?to選項(xiàng):選中僅應(yīng)用于主Sample。

這里需要注意的是“要檢查的響應(yīng)字段”,在網(wǎng)上查到的指導(dǎo)都是“消息頭”,但在本人的測(cè)試中,從消息頭中未能獲取CSRF Token的信息;因此要設(shè)置在“主體”。

引用名稱:可以隨便寫;

正則表達(dá)式:也就是希望提取的內(nèi)容,格式需要從應(yīng)答報(bào)文中去找。這里可以參考LoadRunner的關(guān)聯(lián)的寫法(左邊際、右邊際、正則表達(dá)式匹配的規(guī)則)。

實(shí)在沒有頭緒的朋友,可以從【察看結(jié)果樹】的應(yīng)答報(bào)文中找到,如下圖:

?

模版:$1$,表示取第一次的值;也只有一個(gè);

缺省值:隨意,默認(rèn)為空。

?

接下來,再創(chuàng)建一個(gè)HTTP請(qǐng)求,這次是實(shí)現(xiàn)真正的登錄請(qǐng)求。

創(chuàng)建第二個(gè)HTTP請(qǐng)求,取名UserLogin – POST;因?yàn)榈卿浀姆椒镻OST,和前一個(gè)進(jìn)行區(qū)分:

?

這次需要把登錄提交的三個(gè)參數(shù)都填上,CSRF Token需要引用上一步從【正則表達(dá)式提取器中獲取】的,寫法是: ${token} 。

完成后,理論上我們就可以運(yùn)行登錄的腳本了;但是別急,還需要添加一個(gè)HTTP Cookie管理器。

我們先看看沒有HTTP Cookie管理器的情況:

?

兩處CSRF Token內(nèi)容不一致,說明被當(dāng)成兩次不相關(guān)的訪問。

再看看第二個(gè)HTTP請(qǐng)求提交的信息,此處的CSRF?Token的內(nèi)容已經(jīng)和第一個(gè)應(yīng)答報(bào)文一樣了,說明我們前面的努力是正確的;可是為何還是沒有登陸成功呢?

?

稍微想一想就能理解了,服務(wù)器端判斷兩次請(qǐng)求是否來自同一個(gè)客戶端,不止一個(gè)CSRF Token,還有別的,比如會(huì)話ID。

我們翻回瀏覽器的開發(fā)者工具的頁(yè)面看看:

?

Cookie中顯然有三個(gè)參數(shù),可以預(yù)料每次提交的請(qǐng)求,這三個(gè)參數(shù)都是動(dòng)態(tài)取值;

而要保持會(huì)話過程中始終一致,我們需要在JMeter腳本里添加HTTP Cookie管理器:

?

添加以后也不需要設(shè)置什么項(xiàng)目,保持最初狀態(tài)就夠用了。

補(bǔ)充一下,為了確保HTTP Cookie管理器生效,需要修改jmeter\bin目錄下的jmeter.properties。

找到選項(xiàng)CookieManager.save.cookies,將值修改為true,并刪除句首的 # 號(hào),讓配置生效。

完成修改后,需要重啟JMeter。

重啟之后,我們?cè)賵?zhí)行一次看看結(jié)果:

?

對(duì)比前一次的執(zhí)行結(jié)果,UserLogin – POST的響應(yīng)數(shù)據(jù)發(fā)生了變化,顯示的標(biāo)題是【我的工作臺(tái)】,這是登錄成功的重要標(biāo)志;

而且兩次HTTP請(qǐng)求獲得的CSRF Token內(nèi)容相同,登錄操作完美成功。

后面就是添加其他業(yè)務(wù)API 的請(qǐng)求了,由于都是GET方式,很容易完成腳本的編寫。

完成后,添加聚合報(bào)告和監(jiān)控的Backend Listener就齊活了。

?

比如,我們查看一下這個(gè)用戶的考勤記錄:

?

執(zhí)行一遍看看響應(yīng)報(bào)文:

?

?

和期望的一樣,登錄之后,再訪問其他功能的API 也能獲得正確的應(yīng)答。

腳本編寫工作基本完成了。

總結(jié)

以上是生活随笔為你收集整理的利用Jmeter测试CSRF令牌验证的Web API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。