前幾天用JMeter模擬登陸,但是這個(gè)網(wǎng)站開(kāi)啟了csrf認(rèn)證,因此在post表單需要提供csrftoken認(rèn)證。這里我用到了Jmeter正則提取器。
1 CSRF
CSRF(Cross-site requestforgery跨站請(qǐng)求偽造,也被稱為“one click attack”或者session riding,通??s寫(xiě)為CSRF或者XSRF,是一種對(duì)網(wǎng)站的惡意利用。它通常發(fā)生在當(dāng)某個(gè)惡意Web站點(diǎn)誘騙用戶不知不覺(jué)的從一個(gè)信任站點(diǎn)下載某個(gè)URL之時(shí),這個(gè)信任站點(diǎn)已經(jīng)被通過(guò)信任驗(yàn)證,因此惡意站點(diǎn)就利用了這個(gè)被信任狀態(tài)。下圖便是csrf攻擊的思想:

我在博客上也轉(zhuǎn)載一篇關(guān)于csrf的介紹,有關(guān)csrf的攻擊實(shí)例可以看這篇博客。
http://blog.csdn.net/lion19930924/article/details/50955000
2 解決方案
在模擬具有csrf認(rèn)證的網(wǎng)站的登陸時(shí),我們需要先訪問(wèn)一次該網(wǎng)站,獲取服務(wù)器返回的cookie,在下次發(fā)送請(qǐng)求的時(shí)候帶上這個(gè)cookie,則可以完成登陸。
3 JMeter CSRF TOKEN認(rèn)證登陸
用JMeter模擬登陸的過(guò)程,需要用到正則提取器,獲取服務(wù)器返回的cookie,具體的過(guò)程如下:
1 添加一個(gè)HTTP request sampler,命名為logintest
2 在這個(gè)request sampler中填寫(xiě)需要登陸的地址,以及需要登陸的用戶名和密碼

3 在logintest中添加regular expression extractor,我們把它命名為csrf_token

4 在csrf_token中我們將 Reference Name命名為 CSRF_TOKEN,regular expression是Set-Cookie: csrftoken=(.+?);,Template是

5 同樣的方法我們?cè)偬砑右粋€(gè)regular expression extractor,命名為session_id,這里我們要獲取的是服務(wù)器返回的session_id,所以它的正則表達(dá)式和csrf_token的寫(xiě)法是相似的。這里不再做詳細(xì)描述。
6 再添加一個(gè)HTTP request sampler,命名為login,這里的地址和用戶名和密碼和logintest填寫(xiě)的保持一致,不過(guò)需要添加一個(gè)csrfmiddlewaretoken,它的值是我們?cè)趌ogin中獲取的csrf_token的值。

7 這里我們?cè)冱c(diǎn)擊運(yùn)行,就可以發(fā)現(xiàn)登陸成功了,JMeter模擬成功。
有關(guān)JMeter的正則表達(dá)式,大家可以通過(guò)下面這個(gè)網(wǎng)站進(jìn)行了解:
(http://jmeter.apache.org/usermanual/regular_expressions.html)
原文:https://blog.csdn.net/lion19930924/article/details/51189210