XSS篇:
XSS,(cross site scripting),跨站腳本注入,指攻擊者利用一些技巧向頁面注入腳本代碼并讓其執(zhí)行,從而達(dá)成攻擊效果。
XSS原理
攻擊者利用頁面輸入和輸出的功能,在輸入時使用閉標(biāo)簽再加腳本代碼等技巧,當(dāng)服務(wù)器輸出這些輸入信息到頁面時,就會插入并執(zhí)行腳本代碼。解決方法是可以在服務(wù)端對客戶端的輸入進(jìn)行過濾或轉(zhuǎn)義。注意:這里不一定只用script標(biāo)簽,還可以用img等其他標(biāo)簽,或者用onclick等事件方法達(dá)到執(zhí)行腳本代碼。簡單例子如下:
//Web 請求如下所示:
GET http://www.somesite.com/page.asppageid=10&lang=en&title=Section%20Title
//在發(fā)出請求后,服務(wù)器返回的 HTML 內(nèi)容包括:
<h1>Section Title</h1>
//攻擊者可以通過擺脫 <h1> 標(biāo)記來注入代碼:
http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section%20Title</h1><script>alert(‘XSS%20attack’)</script>
//最終這個請求的 HTML 輸出將為:
<h1>Section Title</h1><script>alert(‘XSS attack’)</script>
XSS危害與防范
攻擊者可以使用 XSS 漏洞搞惡作劇,竊取 Cookie,劫持帳戶,執(zhí)行 ActiveX,執(zhí)行 Flash 內(nèi)容,強(qiáng)迫您下載軟件,官網(wǎng)掛釣魚網(wǎng)站,或者是對硬盤和數(shù)據(jù)采取操作。防范的方法就是服務(wù)端對能被攻擊的輸入進(jìn)行過濾或轉(zhuǎn)義。
CSRF篇
CSRF,(Cross-site request forgery),跨站請求偽造,指通過偽裝來自受信任用戶的請求來進(jìn)行對受信任的網(wǎng)站一些操作。
CSRF原理
攻擊者一般通過XSS使用戶在已經(jīng)授權(quán)的網(wǎng)站中不知不覺發(fā)起某些請求,從而實現(xiàn)自己的目的。XSS是實現(xiàn)CSRF的有效方法,但不是唯一方法。常見的例子有:
//假如一論壇網(wǎng)站的發(fā)貼是通過 GET 請求訪問,點擊發(fā)貼之后 JS 把發(fā)貼內(nèi)容拼接成目標(biāo) URL 并訪問:
http://example.com/bbs/create_post.php?title=標(biāo)題&content=內(nèi)容
//那么,我只需要在論壇中發(fā)一帖,包含一鏈接:
http://example.com/bbs/create_post.php?title=我是腦殘&content=哈哈
//只要有用戶點擊了這個鏈接,那么他們的帳戶就會在不知情的情況下發(fā)布了這一帖子。
CSRF危害與防范
既然發(fā)貼的請求可以偽造,那么刪帖、轉(zhuǎn)帳、改密碼、發(fā)郵件全都可以偽造。CSRF不能絕對的防范,因為他是通過偽造請求來實現(xiàn)的,而請求可以來自各自各樣的方式。我們可以通過提高CSRF的攻擊門檻進(jìn)行適當(dāng)?shù)姆婪叮龇ㄓ校褐匾恼埱髴?yīng)該通過post方式進(jìn)行(杜絕通過點擊鏈接進(jìn)行攻擊)、服務(wù)端生成隨機(jī)token,保存在頁面隱藏域中,在發(fā)出請求的時候一并發(fā)出,服務(wù)端在驗證其在session中的token,兩者一致后才處理請求,處理請求后必須馬上銷毀token。(這種做法可以提高攻擊難度)、防范XSS攻擊(這樣能有效防范CSRF)。