1.Csrf攻擊概念:前端
csrf攻擊(Cross-site request forgery):跨站請求僞造;面試
2.Csrf攻擊原理:數據庫
用戶是網站A的註冊用戶,且登陸進去,因而網站A就給用戶下發cookie。api
從上圖能夠看出,要完成一次CSRF攻擊,受害者必須知足兩個必要的條件:跨域
(1)登陸受信任網站A,並在本地生成Cookie。(若是用戶沒有登陸網站A,那麼網站B在誘導的時候,請求網站A的api接口時,會提示你登陸)瀏覽器
(2)在不登出A的狀況下,訪問危險網站B(實際上是利用了網站A的漏洞)。安全
咱們在講CSRF時,必定要把上面的兩點說清楚。服務器
舒適提示一下,cookie保證了用戶能夠處於登陸狀態,但網站B其實拿不到 cookie。cookie
舉個例子,前端事假你,微博網站有個api接口有漏洞,致使不少用戶的粉絲暴增。網站
3.Csrf如何防護
方法1、Token 驗證:(用的最多)
(1)服務器發送給客戶端一個token;
(2)客戶端提交的表單中帶着這個token。
(3)若是這個 token 不合法,那麼服務器拒絕這個請求。
方法二:隱藏令牌:
把 token 隱藏在 http 的 head頭中。
方法二和方法一有點像,本質上沒有太大區別,只是使用方式上有區別。
方法3、Referer 驗證:
Referer 指的是頁面請求來源。意思是,只接受本站的請求,服務器才作響應;若是不是,就攔截。
4.XSS
一、XSS的基本概念
XSS(Cross Site Scripting):跨域腳本攻擊。
接下來,咱們詳細講一下 XSS 的內容。
預備知識:HTTP、Cookie、Ajax。
2XSS的攻擊原理
XSS攻擊的核心原理是:不須要你作任何的登陸認證,它會經過合法的操做(好比在url中輸入、在評論框中輸入),向你的頁面注入腳本(多是js、hmtl代碼塊等)。
最後致使的結果多是:
盜用Cookie破壞頁面的正常結構,插入廣告等惡意內容D-doss攻擊XSS的攻擊方式
一、反射型發出請求時,XSS代碼出如今url中,做爲輸入提交到服務器端,服務器端解析後響應,XSS代碼隨響應內容一塊兒傳回給瀏覽器,最後瀏覽器解析執行XSS代碼。這個過程像一次反射,因此叫反射型XSS。
二、存儲型存儲型XSS和反射型XSS的差異在於,提交的代碼會存儲在服務器端(數據庫、內存、文件系統等),下次請求時目標頁面時不用再提交XSS代碼。
XSS的防範措施(encode + 過濾)
三、XSS的防範措施主要有三個:
一、編碼:
對用戶輸入的數據進行HTML Entity編碼。
如上圖所示,把字符轉換成 轉義字符。
Encode的做用是將
$var
等一些字符進行轉化,使得瀏覽器在最終輸出結果上是同樣的。
好比說這段代碼:
<script>alert(1)</script>
若不進行任何處理,則瀏覽器會執行alert的js操做,實現XSS注入。
進行編碼處理以後,L在瀏覽器中的顯示結果就是
<script>alert(1)</script>
,實現了將$var做爲純文本進行輸出,且不引發JavaScript的執行。
參考連接:4類防護XSS的有效方法
二、過濾:
移除用戶輸入的和事件相關的屬性。如onerror能夠自動觸發攻擊,還有onclick等。(總而言是,過濾掉一些不安全的內容)移除用戶輸入的Style節點、Script節點、Iframe節點。(尤爲是Script節點,它但是支持跨域的呀,必定要移除)。三、校訂
避免直接對HTML Entity進行解碼。使用DOM Parse轉換,校訂不配對的DOM標籤。備註:咱們應該去了解一下
DOM Parse
這個概念,它的做用是把文本解析成DOM結構。
比較經常使用的作法是,經過第一步的編碼轉成文本,而後第三步轉成DOM對象,而後通過第二步的過濾。
還有一種簡潔的答案:
首先是encode,若是是富文本,就白名單。
CSRF 和 XSS 的區別
面試官還可能喜歡問兩者的區別。
區別一:
CSRF:須要用戶先登陸網站A,獲取 cookie。XSS:不須要登陸。區別二:(原理的區別)
CSRF:是利用網站A自己的漏洞,去請求網站A的api。XSS:是向網站 A 注入 JS代碼,而後執行 JS 裏的代碼,篡改網站A的內容。