XSS和CSRF详解与防御
生活随笔
收集整理的這篇文章主要介紹了
XSS和CSRF详解与防御
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
開(kāi)年遇到的第一個(gè)問(wèn)題就是解決XSS攻擊>_<,可見(jiàn)要時(shí)刻保證網(wǎng)站的安全性至關(guān)重要。做好網(wǎng)站安全,不僅維護(hù)網(wǎng)站的穩(wěn)定性,更保證用戶數(shù)據(jù)的一致性。對(duì)此,總結(jié)一下筆者在工作中遇到的安全問(wèn)題以及防御方法。 用戶向信任站點(diǎn)如example.com發(fā)送請(qǐng)求 用戶驗(yàn)證通過(guò)、獲得信任站點(diǎn)的身份信息,并放入cookie中,用戶此時(shí)可以在站內(nèi)進(jìn)行其他請(qǐng)求; 用戶未退出登錄example.com,然后訪問(wèn)hack.com網(wǎng)站,該網(wǎng)站返回攻擊性代碼并且在頁(yè)面中存在訪問(wèn)example.com的請(qǐng)求; 瀏覽器在用戶可能不知情的情況下向example.com發(fā)送請(qǐng)求; 由于同域名可以帶上cookie信息,因此信息認(rèn)證通過(guò),請(qǐng)求偽造成。
前端中常見(jiàn)的兩種網(wǎng)站應(yīng)用安全漏洞攻擊的方式是 XSS 與 CSRF,本文詳細(xì)介紹兩種攻擊方式的概念、原理以及防御方式。
XSS
XSS(Cross-site scripting)跨站腳本攻擊是惡意用戶在網(wǎng)站中注入的腳本,當(dāng)正常用戶打開(kāi)網(wǎng)站時(shí)受到影響并可能獲取用戶cookie等信息一種安全攻擊行為。常見(jiàn)的例子是用戶進(jìn)入某個(gè)網(wǎng)站的時(shí)候一直彈出alert框等。
常見(jiàn)的 XSS 方式分為兩類:持久性和非持久性,也有機(jī)構(gòu)將其分為傳統(tǒng)型(由服務(wù)器端代碼缺陷引起)和基于 DOM 型(有客戶端引起)。下面介紹三種類型:
- 反射型 反射型跨站腳本攻擊最常見(jiàn)的方式是客戶端輸入查詢信息,服務(wù)器端將其返回并且顯示在頁(yè)面上造成攻擊。如直出頁(yè)面,后面根據(jù)參數(shù)查詢返回對(duì)應(yīng)的查詢信息和結(jié)果。或者用戶在input輸入框中進(jìn)行查詢等,值得注意的是,使用 innerHTML 插入 <script>alert(document.cooke)</script 并不會(huì)執(zhí)行 script 中的代碼,需要構(gòu)造對(duì)應(yīng)事件觸發(fā)。如: <img src="xxx.jpg" width="0" height="0" border="0" onload="javascript:alert(document.cookie);">
- 存儲(chǔ)型存儲(chǔ)型與反射型 XSS 攻擊的區(qū)別在于是否存儲(chǔ)在數(shù)據(jù)庫(kù)中,如用戶寫博客和評(píng)論等,這種方式的影響是持久的。
- 基于 DOM惡意用戶構(gòu)造的腳本并不會(huì)經(jīng)過(guò)服務(wù)器端,完全發(fā)生在客服端,如通過(guò)鏈接(?userName=<img onload="javascript:alert(document.cookie)"/>)的查詢參數(shù)來(lái)顯示用戶名等。
針對(duì) XSS 攻擊,經(jīng)常有以下兩個(gè)方式來(lái)進(jìn)行防御:
- 設(shè)置重要的cookie信息為 httpOnly 對(duì)于重要的 cookie字段,如:可以通過(guò) cookie 某個(gè)字段和某個(gè)接口獲取好友關(guān)系的,需要將其設(shè)置為 httpOnly,使得惡意用戶無(wú)法獲取。
- 對(duì)輸入進(jìn)行檢測(cè)和轉(zhuǎn)義 對(duì)用戶輸入的或者從鏈接獲取參數(shù)需要展示到頁(yè)面中需要校驗(yàn)合法性和使用轉(zhuǎn)義函數(shù)進(jìn)行轉(zhuǎn)義,如常見(jiàn)的函數(shù)如下:
CSRF
CSRF(Cross-site request forgery)是一種攻擊,迫使用戶在受信任網(wǎng)站上執(zhí)行不需要的一些操作。具體過(guò)程如下:
針對(duì) CSRF 攻擊,常用的防御方式如下:
- 檢測(cè)請(qǐng)求來(lái)源 在請(qǐng)求頭中有一個(gè)refree字段,refree記錄了發(fā)送請(qǐng)求的域名,比如:hack.com向example.com中發(fā)送請(qǐng)求,那么refree就為hack.com,只要在處理請(qǐng)求中做相應(yīng)的校驗(yàn)就可以中斷請(qǐng)求。
- 加入token校驗(yàn) crsf之所以能夠偽造請(qǐng)求成功,其原因之一在于所有的用戶信息放于cookie中;因此可以在每次請(qǐng)求中加入token,然后后臺(tái)進(jìn)行校驗(yàn),如果校驗(yàn)通過(guò)則進(jìn)行處理。生成token方式之一如下:
具體攻擊示例點(diǎn)擊查看
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的XSS和CSRF详解与防御的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 图解JavaScript原型链继承
- 下一篇: 编写自适应高度的 textarea