◆王馬龍 劉 健
?
一種基于Apache的CSRF防御模塊的實現
◆王馬龍 劉 健
(四川大學計算機學院 四川 610065)
跨站請求偽造(CSRF)漏洞的存在十分廣泛,而且是開放式web應用安全項目(OWASP)統計的Top 10 Web攻擊列表中最具威脅的漏洞之一。目前最具代表性的兩種CSRF防御工具是CSRFGuard[2]和jCSRF[3]。針對CSRFGuard會將JS動態創建的動態HTTP請求誤認為是CSRF攻擊;jCSRF以代理模式部署,會增大web服務器的響應時間這兩大問題,本文通過重寫XMLHttpRequest對象onsend的方法,向HTTP頭注入CSRF防御Token,基于Apache web 服務器實現了一個CSRF防御模塊mod_anticsrf,去除了代理的網絡通信開銷。實驗結果表明,mod_anticsrf支持動態HTTP請求,且幾乎不影響web服務器的響應時間。
CSRF;Apache;動態HTTP請求;性能
跨站請求偽造(Cross-Site Request Forgery,CSRF)攻擊是一種當今互聯網上廣泛存在的Web攻擊。近幾年來,CSRF在OWASP(Open Web Application Security Project)每年的十大安全漏洞中[1]始終能夠穩居前列。它并不是一種新型的攻擊,但是其攻擊原理簡單,極具破壞性。由于CSRF漏洞存在于大量的Web應用程序中,如果通過手動修改程序源代碼的方式來修復漏洞,工作量將十分巨大。基于此,本文基于ApacheWeb服務器實現了一種CSRF防御模塊。
CSRFGuard[2]和jCSRF[3]都是基于一次性Token的方法實現的CSRF防御工具。CSRFGuard是由OWASP發布的CSRF防御技術。它是一個實現了 Token模式的JAVA類庫[4],通過生成隨機的Token,而攻擊者無法構造有效請求,從而對CSRF攻擊進行防御。它的缺點是:(1)只有Javaweb應用服務器能使用;(2)它使用JavaScript DOM注入Token的方法是在頁面加載完后遍歷頁面所有元素,對“form”或“a”等元素或屬性插入Token。因此,CSRFGuard比較適合處理靜態頁面。如果有表單在頁面加載完后由JavaScript腳本動態創建,其提交的請求不能被CSRFGuard插入Token,相關頁面的操作也可能因缺少Token被阻止或者可能遭受CSRF攻擊。jCSRF解決了CSRFGuard的第二個缺點,并提出了一種同域和跨域CSRF防御的協議。但是jCSRF也有兩個不足之處:(1)目前不支持GET方法;(2)它以HTTP代理的方式部署,會增大系統時延。
2.1 基于Apache的CSRF防御模塊的設計

圖1 jCSRF部署圖
如圖1所示,jCSRF以http代理的形式部署在Web服務器的前方,用戶的每次請求都必須由jCSRF轉發一次,給系統帶來了很大的網絡時延。
為減少了瀏覽器與代理之間的網絡IO造成的開銷,本文將mod_anticsrf設計為一個可動態加載的模塊,它可根據用戶的配置由Apache Http服務器動態加載/卸載。它的部署模式如下圖2所示:
mod_anticsrf的工作流程如圖3所示:
(1)接收用戶的HTTP請求;
(2)判斷該請求是否為此會話的初始請求(即第一次請求),如果是,則跳轉至第(3)步;否則,跳轉至第(4)步;
(3)生成隨機Token,構造CSRF防御js腳本,然后將js腳本注入到HTTP響應中,跳轉至第(7)步;
(4)從HTTP請求中提取Token,成功則跳轉至第(5)步;否則,跳轉至第(6)步;
(5)判斷Token是否合法,如果合法,則跳轉至第(3)步;否則,跳轉至第(6)步;
(6)阻斷當前HTTP請求,視配置決定是否需要記錄日志,跳轉至第(1)步;
(7)將HTTP響應頁面發送給用戶,跳轉至第(1)步。

圖3 mod_anticsrf工作流程
2.2 基于Apache的CSRF防御模塊的實現
mod_anticsrf從架構上來看主要分為兩個部分。一部分是用C語言實現的Apache模塊,這部分主要負責Token的構造、JS代碼的注入和Token的驗證;另一部分是要注入到用戶響應頁面的JS代碼,這段JS代碼負責在用戶發起請求的時候將Token添加到HTTP的頭部或請求體里面。在實現mod_anticsrf的過程中,主要解決以下幾個技術問題:
2.2.1 Token的構造
Token的構造過程是mod_anticsrf的重要部分,為了區分攻擊者和正常用戶傳遞過來的Token,我們從用戶請求中提取一個能唯一標識用戶的特征來構造Token,構造過程如下:
2.2.2 Token的注入
在服務器端添加Token至HTTP響應頁面是一種注入Token的方法,但是這樣添加Token會對整個頁面進行遍歷,從而導致服務器的延遲增大。本文采用了在用戶瀏覽器中通過JS腳本(anticsrf.js)的方式,動態地在用戶的HTTP請求中添加Token。具體方法如下:
為值;
對于表單,遍歷dom樹,找到所有的
標簽,在它的前面插入對anticsrf.js中的主函數insertToken的調用代碼以傳入生成的Token,即:
insertToken("csrfToken",tokenValue);
2.2.4 Token的提取和驗證
當Apache接收到的HTTP請求不是當前會話的初始請求時,mod_anticsrf就要提取該請求中的Token,過程如下:
(1)在HTTP請求頭中尋找csrfToken域,如果找到,說明這是一個Ajax請求,取出它的Token值,跳轉至第(3)步;否則,跳轉至第(5)步;
(2)在HTTP的請求參數和表單參數中尋找csrfToken域,如果找到,取出它的Token值,跳轉至第(3)步;否則跳轉至第(5)步;
(6)提取本次請求的源IP地址,如果,則說明請求合法,將該請求的控制權交還給Apache;否則,跳轉至第(7)步;
(7)驗證失敗,阻斷請求。
為測試mod_anticsrf能否支持JS動態創建的HTTP請求,本文設計了一個簡單的網頁:changePassword.php,這個頁面模擬的是用戶改密碼的功能,它提交數據的方式是Ajax。從圖4可以看出,頁面能正常訪問,不會被誤認為是CSRF攻擊。

圖4 Ajax請求抓包
本文還針對無CSRF防御、開啟mod_anticsrf和使用jCSRF三種情況進行了性能測試,測試方法為使用Apache開源性能測試工具ab向服務器發起10000次請求,并發為100rps(具體命令為:ab -n 10000 -c 100 -p post.txt http://192.168.11.120/ changePassword.php),最終比較各種情況下的總耗時。結果如圖5所示:Apache在開啟mod_anticsrf模塊之后基本不影響系統性能,而使用jCSRF卻會導致系統時延增加大約1/2。

圖5性能對比圖
由實驗結果可以看出,由于Ajax請求頭里面被成功地注入了CSRF防御Token,所以它不會被判定為CSRF攻擊;而且,由于mod_anticsrf直接運行在Apache進程內,不會像jCSRF那樣需要與代理之間的網絡通信,所以幾乎不會增加系統時延。
本文基于Apache實現了一種CSRF防御模塊mod_anticsrf,可以避免mod_anticsrf將JS動態創建的HTTP請求誤判為CSRF攻擊;此外,將mod_anticsrf以動態模塊的方式部署于Apache服務器中,幾乎不會影響系統響應時間。現在,mod_anticsrf暫不支持jQuery等三方JS庫;該模塊有待改進以支持Web應用中存在XSS漏洞的情況。
[1]OWASP.“Top ten most critical web application security vulnerabilities”.http://www.owasp.org/index.php/OWASP_Top_Ten_Project,2013.
[2]Boyan Chen,Pavol Zavarsky,Ron Ruhl and Dale Lindskog A Studyof the Effectiveness of CSRF Guard. 2011 IEEE International Conferenceon Privacy,Security,Risk,and Trust,and IEEE InternationalConference on Social Computing .
[3]Riccardo Pelizzi,R. Sekar. A server- and browser- transparent CSRF defensefor web 2.0 applications[C]// ACSAC'11:Proceedings of the 27th AnnualComputer Security Applications Conference. New York:ACM,2011.
[4]OWASP.Category:OWASP CSRFGuard Project [EB/ OL].https://www.owasp.org/index.php/CSRFGuard,2016.
國家重點研發計劃(2016yfb00604,2016yfb00605),國家自然科學基金項目(61572334)。
主站蜘蛛池模板: 中文字幕第4页| 无码日韩精品91超碰| 免费在线国产一区二区三区精品| 72种姿势欧美久久久久大黄蕉| 欧美成人手机在线视频| 免费观看无遮挡www的小视频| 国产97公开成人免费视频| 国产亚洲精品va在线| 亚洲精品国产综合99久久夜夜嗨| 91色在线观看| 最近最新中文字幕在线第一页| 91精品亚洲| 久久久波多野结衣av一区二区| 国产99视频精品免费视频7| 亚洲综合片| 免费va国产在线观看| av性天堂网| 精品国产黑色丝袜高跟鞋| 欧美啪啪一区| 国产一在线观看| 四虎影视无码永久免费观看| 国产在线欧美| 亚洲日韩精品欧美中文字幕| 成年人免费国产视频| 国产精品高清国产三级囯产AV| 亚洲视频四区| 青青草原国产| 亚洲天堂自拍| 69av在线| 亚洲无线一二三四区男男| 久久久久久久久久国产精品| 欧美精品在线视频观看| 国产精品第页| 国产福利微拍精品一区二区| 免费亚洲成人| 理论片一区| 日韩二区三区| 又猛又黄又爽无遮挡的视频网站| 国产免费观看av大片的网站| 日韩欧美国产三级| 国产成人一级| 国产免费羞羞视频| 成人字幕网视频在线观看| 激情综合网激情综合| 天天综合网在线| 制服丝袜国产精品| 久久亚洲中文字幕精品一区| 日本AⅤ精品一区二区三区日| 国产理论最新国产精品视频| 精品综合久久久久久97超人| 日韩福利在线观看| 久久香蕉国产线看精品| 欧美精品v欧洲精品| 91精品aⅴ无码中文字字幕蜜桃 | 九九热这里只有国产精品| 香蕉伊思人视频| 91在线一9|永久视频在线| 亚洲精品制服丝袜二区| 99精品在线视频观看| 91色在线视频| 日韩高清在线观看不卡一区二区 | 狠狠色狠狠色综合久久第一次| 日本高清有码人妻| 欧洲av毛片| 波多野结衣一区二区三区四区| 成人午夜天| 国产成人精品男人的天堂| 在线另类稀缺国产呦| 亚洲天堂色色人体| 日韩在线视频网站| 欧美精品亚洲精品日韩专| 色综合网址| 91午夜福利在线观看| 欧美国产日本高清不卡| 国产美女免费| 国产黄色免费看| 成人亚洲视频| aaa国产一级毛片| 国产午夜福利在线小视频| 无码内射中文字幕岛国片| 欧美精品v日韩精品v国产精品| 在线观看视频99|