asp.net MVC 安全性[筆記]

1. 跨站腳本(XSS)javascript

1.1 介紹html

1.1.1 被動注入,利用輸入html,javascript 等信息僞造連接,圖片等使用提交信息,調轉頁面等java

1.1.2 主動注入,黑客主動參與攻擊,不會傻等倒黴的用戶上鉤web

 

1.2 防護安全

1.2.1 HTML 編碼cookie

Html.Encodeasp.net

1.2.2 HTML 屬性編碼ide

Html.AttributeEncodepost

1.2.3 url 編碼網站

URL.Encode

1.2.4 java script 編碼

Ajax.JavaScriptStringEncode

1.2.5 CSS 編碼

 

1.3 使用AntiXSS的NuGet包

install-package AntiXSS

1.3.1 AntiXss使用的是白名單,而asp.net默認是黑名單,着用AntiXSS的安全性比ASP.NET 高

1.3.2 AntiXss注重安全漏洞, asp.net注重HTML頁面的不被破壞

1.3.3 使用

@using Microsoft.Security.Application

@Encoder.JavaScriptEncode();

 

2.請求僞造(CSPF)

2.1 介紹

 在網站上經過圖片連接等僞造銀行等機構的請求(混淆代理),例如如今不少銀行用的get 請求,url 會在地址欄上顯示,這就給了黑客機會,黑客能夠經過任何吸引你的內容,讓你點擊,僞造相同的請求發給銀行,正好你銀行在登錄狀態,就能夠轉帳盜取金錢。

2.2 令牌驗證

經過驗證用戶是否資源提交站點數據來達到防護目的,能夠在Html隱藏元素來實現。

MVC 中

@Html.AntiForgeryToken(), 會輸出一個加密值做爲隱藏元素

在提交表單時,ActionFilter就會驗證2個值是否匹配:

[ValidateAntiForgertToken]

public ActionResult Register(..)

2.3 冪等的get 請求

僅經過post 請求來修改數據或內容,就可有效的防護所有僞造攻擊。

2.3 HttpReferrer 驗證

ActionFilter 來阻止CSRF攻擊:

[csharp]  view plain copy print ?
 
  1. public class IsPostedFromThisSiteAttribute : AuthorizeAttribute  
  2. {  
  3. public override void OnAuthorize(AuthorizationContext filterContext)  
  4. {  
  5. if (filterContext.HttpContext != null)  
  6. {  
  7. if (filterContext.HttpContext.Request.UrlReferrer == null)  
  8. throw new System.Web.HttpException("Invalid submission");  
  9. if (filterContext.HttpContext.Request.UrlReferrer.Host !=  
  10. "mysite.com")  
  11. throw new System.Web.HttpException  
  12. ("This form wasn't submitted from this site!");  
  13. }  
  14. }  
  15. }  

 

而後再Register 上面添加自定義的過濾器

 

[csharp]  view plain copy print ?
 
  1. [IsPostedFromThisSite]  
  2. public ActionResult Register(…)  

 

 

3.cookie盜竊

3.1 介紹

利用XSS獲取用戶cookie,用用戶的Id登錄目標網站

3.2HttpOnly 阻止

web.config 裏設置

<HttpCookies httpOnlyCookies="true" ...>

3.3單獨設置httponly

Response.Cookies["MyCookie"].HttpOnly=true;

 

4.重複提交

4.1 介紹

MVC 尊順命名約束把輸入元素映射到模型屬性中,惡意用戶能夠向查詢字符串或提交的表單中添加其餘屬性(模型中存在,但用戶沒權操做的屬性)來干預表單提交。甚至能夠獲得其餘帳戶的權限。

4.2 使用bind 特性防護重複提交,下面展現的Product 模型只能映射name 和age 屬性。無權操做其餘的屬性。

[Bind(Include="Name","Age")]

pulbic class Product{

......

}

4.3 使用UpdateModel 後TryUpdataModel 的重載本版接受bind 列表。

UpdateModel(product,"product",new string[] {"Name","Age"} ")

4.4 避免直接綁定試圖

使用view model.

相關文章
相關標籤/搜索