今年十月份我的第二本書《基于的電子商務(wù)網(wǎng)站設(shè)計》出版了,在這本書中我不僅介紹了如何利用框架搭建電子商務(wù)網(wǎng)站,也論述了如何利用的類對所創(chuàng)建的電子商務(wù)產(chǎn)品進(jìn)行接口測試。
在書寫極樂口測試代碼過程中,我遇到的最大的困難就是如何通過測試程序繞過的防止CSRF攻擊的插件,通過近一個多月的努力我終于解決了這個問題,但是同時也揭露了框架的防止CSRF攻擊的插件的漏洞。首先我們來看一下什么是CSRF攻擊。
1、什么是CSRF攻擊?
我們假設(shè)一個網(wǎng)站的HTML代碼如下:
大家都知道,采用驗證碼的目的是為了防止“黑客”,利用機(jī)器來通過窮舉的方法來試圖登錄系統(tǒng)。檢查驗證碼是否正確用的往往是前端做的判斷。這樣,“黑客”可以采用自己的網(wǎng)站建立如下頁面:
大家可以看見,在這段代碼中驗證碼沒有了,form的變成了絕對路徑,這樣“黑客”就繞過了前端的驗證,可以對自己代碼進(jìn)行編寫自動化腳本實現(xiàn)用窮舉的方法來試圖登錄系統(tǒng)。這個就是CSRF攻擊。
2、的CSRF插件是如何解決CSRF攻擊的
下面讓我們來看一下的CSR插件是如何解決CSRF攻擊的。利用了一個名為..csrf.的中間件(可以在的.py中設(shè)置)利用CSRF令牌的方式來控制。具體方式生成一個一百個字符的隨機(jī)字符串作為CSRF令牌,在表單中產(chǎn)生一個名為的表單,把這個CSRF令牌的值放入這個字段中,然后在提交這個表單的時候產(chǎn)生一個名為的,這個的值也是CSRF令牌的值。
后臺檢查如果表單的值與的的值一致,則返回200返回碼,進(jìn)入登錄后的頁面,否則返回403返回碼,拒絕進(jìn)入系統(tǒng)。由于這個CSRF令牌是隨機(jī)生成的一百個字符的字符串,“黑客”是很難猜到這個字符的,所以就達(dá)到了CSRF的攻擊防護(hù)。
3、的CSRF插件的漏洞
3.1通過類破解
但是這個CSRF插件是有漏洞的,在頁面.html頁面載入后,黑客可以通過某種手段(比如正則表達(dá)式)獲得這個CSRF令牌(即中的一百個字符值),然后構(gòu)造一個名為的,名為剛才過的的CSRF令牌值,這樣就有了下面的代碼。
代碼“ =str(re.(r"name=\'\' =\'(.+?)\'/>",text))”是通過re.正則方法獲得CSRF令牌,存在變量中,由于用這個方法獲得的值是“["CSRF令牌值"]”格式的,也就是說去前面多了個“["”,后面多了個“"]”,所以后面用語句“ = [2:-2]”過濾出來,然后利用的post方法,先構(gòu)造post參數(shù):“={"":"","":"","":}”,這里“"":”讓表單仍舊為值。通過 = {"":}構(gòu)造值,通過=作為post參數(shù)傳給后臺。這樣表單的值與的值是一致的,所以,登錄通過。
后來,我驚奇的發(fā)現(xiàn)不用這么麻煩,我們直接把表單的值與的值設(shè)置相同,即:
3.2通過框架破解
下面的代碼是利用做基于GUI的自動化測試代碼。
代碼通過 =self..("").("")獲取表單的值,通過elf..({"name":"","":})把這個值放入到名為的中。
3.3通過破解
在也可以破解,如下圖:
通過正則表達(dá)式提取器獲取.html中的值。
把獲得的值放入名為的中
把獲得的值仍舊作為表單參數(shù)傳給后臺處理。
3.4通過破解
在中,錄制完畢,腳本就直接把表單參數(shù)作為名為的傳給后臺,不用做任何代碼修改。正是不可思議。
文:顧翔
圖源:網(wǎng)絡(luò)