新聞中心
背景

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括齊齊哈爾網(wǎng)站建設(shè)、齊齊哈爾網(wǎng)站制作、齊齊哈爾網(wǎng)頁制作以及齊齊哈爾網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,齊齊哈爾網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到齊齊哈爾省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
以前做等級(jí)保護(hù)的時(shí)候漏掃經(jīng)常掃描出來一些網(wǎng)站有CSRF的漏洞,由于一般掃描器提示為中風(fēng)險(xiǎn)必須要解決經(jīng)常和開發(fā)人員扯皮要怎么改怎么改,每次都描述的不清楚經(jīng)常感覺心累。
最近看到OWASP的一本《安全測(cè)試指南第四版》的書就隨手翻了二頁其中談到了關(guān)于會(huì)話管理測(cè)試的一欄目比較感興趣就從網(wǎng)上隨便下載了一個(gè)開源的CMS做一下黑盒測(cè)試,練練手萬一失業(yè)了還能轉(zhuǎn)化寫寫代碼做做測(cè)試,過程中發(fā)現(xiàn)CMS對(duì)于很多表單請(qǐng)求都采用了Token認(rèn)證做的挺好的于是寫個(gè)筆記方便日后來看。
抓包分析
架起代理burpsuit開啟準(zhǔn)備大干一場(chǎng),首先找到了一個(gè)表單的提交頁面,表單主要采用Post方法進(jìn)行提交,隨便填了點(diǎn)數(shù)據(jù)就提交了。
通過burpsuit攔截下來之后看一下各個(gè)參數(shù)
通過Post提交到一個(gè)Task的action,看這么多參數(shù)萬一有過濾不嚴(yán)格的情況方法說不定能出現(xiàn)一些XSS或者sql注入的漏洞于是就稍微看了一下就發(fā)送到了scanner。
Proxy放過之后頁面卻出現(xiàn)了異常提示Token驗(yàn)證不通過。
然后認(rèn)真一看發(fā)現(xiàn)除了一些表單提交的參數(shù)外還有一個(gè)token=20e168c64ce1f1f98f89e4c8ff9e3aba的字段。表單提交之后response數(shù)據(jù)包當(dāng)中也有一個(gè)新的token”:”e40fe4b3afedc40f95903fef92eb79ed,這樣導(dǎo)致這一個(gè)請(qǐng)求包只能請(qǐng)求一次,Burpsuit Scanner基于原有請(qǐng)求包的參數(shù)測(cè)試的掃描模式就基本上沒有什么用了。
Token普遍有二個(gè)作用:
- 防止表單重復(fù)提交
- anti csrf攻擊(跨站點(diǎn)請(qǐng)求偽造)
由于token具有較好的隨機(jī)性,不容易被猜測(cè)出來具有良好的安全性,于是看一下源碼當(dāng)中的實(shí)現(xiàn)。
源碼分析
通過請(qǐng)求的路徑找到對(duì)應(yīng)的php文件,當(dāng)請(qǐng)求這個(gè)表單的時(shí)候會(huì)自動(dòng)執(zhí)行$label->token()這么一個(gè)方法
查看label.php的源碼,token這個(gè)方法構(gòu)造hidden表單定義了一個(gè)token的變量后賦值Core\Func\CoreFunc::$token
繼續(xù)再查看CoreFunc的源碼,包含了對(duì)token生成的過程
調(diào)用microtime生成毫秒數(shù)之后打散成數(shù)組增加隨機(jī)性,通過substr提取數(shù)字與隨機(jī)數(shù)相乘之后計(jì)算md5保證了token的不可預(yù)測(cè)性。
Token的隨機(jī)性取決于當(dāng)前時(shí)間、rand隨機(jī)、md5散列算法
將生成的token存如session服務(wù)器會(huì)話當(dāng)中
提交的表單主要由task.php處理task類當(dāng)中只是讀取了session中userid的字段,使用父類Content的 parent::action($jump, $commit)方法進(jìn)行驗(yàn)證通過之后再處理表單數(shù)據(jù)。
一層又一層,感覺真復(fù)雜。Content類繼承了Controller中的checkToken()檢查
Token無論驗(yàn)證是否通過都會(huì)刪除當(dāng)前token的值保證了不會(huì)被重用
總結(jié)
session應(yīng)用相對(duì)安全但也繁瑣,同時(shí)當(dāng)多頁面多請(qǐng)求時(shí)必須采用多Token同時(shí)生成的方法,這樣占用更多資源,執(zhí)行效率會(huì)降低。但是對(duì)安全性的提升是明顯的,對(duì)于表單的重復(fù)提交、基于單個(gè)數(shù)據(jù)包的變形掃描、解決CSRF漏洞也不是一種不錯(cuò)的方式。
本文標(biāo)題:淺談PHP表單安全中Token的實(shí)際應(yīng)用
當(dāng)前地址:http://www.fisionsoft.com.cn/article/cocsggj.html


咨詢
建站咨詢
