什麼是 Cross-Site Request Forgery (CSRF)
簡單來說,CSRF 就是使用者在不知情的情況,讓瀏覽器送出請求給目標網站以達攻擊目的。使用者進行網路驗證後,瀏覽器會將驗證資訊存在 Cookie , 若使用者未登出,此 Cookie 仍視為有效, 而使用者瀏覽其他網站時,會將此驗證資訊回傳 server 以便進行操作, 此時使用者在不自覺的情況下,瀏覽含有攻擊程式碼的網頁, 駭客可使用相同一份驗證資訊(使用者身份)進行攻擊。
如何預防 CSRF
在 View 上 加入 @Html.AntiForgeryToken()<!-- Contained in xxxxx.cshtml --> @model MileageStats.ServicesModel.User @Html.AntiForgeryToken()
在 client 端,即可檢視會產出 hidden input html
<!-- Rendered HTML in the client browser --> <input name="__RequestVerificationToken" type="hidden" value="H4zpQFvPdmEdGCLsFgeByj0xg+BODBjIMvtSl5anoNaOfX4V69Pt1OvnjIbZuYrpgzWxWHIjbn zFOLxP5SzVR4cM9XZeV78IPi8K4ewkM3k2oFkplrXL4uoAqy+aoSOg8s1m1qxrE7oeBBtvezEHCAs6nKE h2jAwn3w0MwmhkcDQiJfJK7hGvN0jXA4d7S8x7rbLxp4Y8IJZS9wka2eOLg==" />
在 controller action 加上 ValidateAntiForgeryTokenAttribute
// Contained in xxxxController.cs [HttpPost] [ValidateInput(false)] [ValidateAntiForgeryToken] public ActionResult Edit(....)
透過 AntiForgeryToken 來檢查連線是否是正常的,
簡單的兩個步驟就完成囉!
參考:https://msdn.microsoft.com/en-us/library/hh404095.aspx
沒有留言:
張貼留言