MVC學習之開發技巧總結(1)

1、強化網站安全性:避免跨網站腳本攻擊(XSS)html

跨網站腳本攻擊(XSS):是指利用網站既有的漏洞將不該該輸入的信息從一個網站傳送到另外一個網站。這種類XSS攻擊分爲兩類:數據庫

一、本身的網站攻擊別人的網站瀏覽器

二、別人的網站攻擊本身的網站安全

對應措施:工具

本身的網站攻擊別人的網站:在MVC中,能夠使用Html.Encode 、Url.Encode或是Ajax.JavaScriptStringEncode輔助方法。測試

一、html.Encode輔助方法:網站

若是使用Razor語法,任何經過@方式輸出的內容預設都是通過Html編碼過的,所以不須要特別使用Html.Encode輔助方法。編碼

若是是使用WebFormView寫撰寫Aspx風格的視圖頁面,那就要清楚使用時機。加密

1)若是是ASP.NET 3.5 之前的語法,那麼在輸出任何內容到網頁上都須要Html.Encode輔助方法來避免XSS攻擊:spa

示例:<%=Html.Encode("<script>alert('XSS');</script>")%>

2)若是是ASP.NET 4.0以後提供的特殊語法,那麼預設輸出也將會是Html編碼過的版本:

示例:<%:"<script>alert('XSS');</script>"%>

二、Url.Encode輔助方法:

在MVC中,若是使用Html.ActionLink()或是Url.ActionLink()輔助方法輸出超連接,在設定RouteValues參數時,有些參數會自動變成網址的查詢字串(Query String),這個轉換的過程ASP.NET MVC也會自動幫你將查詢字串進行Url編碼 。可是,若是想要額外進行Url編碼的haunted,仍是能夠使用Url.Encode輔助方法來實現:

示例:<a href="/Index/Index?link=@Url.Encode("http://www.baidu.com")">點擊</a>

輸出結果是:<a href="/Index/Index?link=http%3a%2f%2fwww.baidu.com">點擊</a>

三、Ajax.JavaScriptStringEncode輔助方法:

有時咱們可能會把數據庫讀出來的文字輸成JavaScript字符串,並使這個字符串可以讓頁面上的JavaScript程序來使用。若是輸出的文字裏麪包含了惡意的XSS攻擊字串,只要沒有通過適當的編碼,就有可能會致使網站遭受各類不一樣的XSS攻擊。例如:Stored XSS。爲了不這個工具,就能夠使用Ajax.JavaScriptStringEncode輔助方法來進行編碼以免攻擊。

示例:

public ActionResult Index()
{
       ViewBag.JsInfo = "alert('OK')";
       return View();
}

<script>
var Jsinfo = '@Html.Raw(Ajax.JavaScriptStringEncode(ViewBag.JsInfo))'
alert(Jsinfo);
</script>

@Html.Raw(「XXX」)的做用是:若是XXX中有Html標籤,就會進行解析,不會將標籤以字符串的形式輸出而是輸出對應的標籤。

示例:

 ViewBag.input = "<input id='t' Value='測試'/>";

使用:@ViewBag.input。結果是:
使用:@Html.Raw(ViewBag.input)。結果是:

 

別人的網站攻擊本身的網站:使用AntiForgeryToken輔助方法。

主要是應用在表單提交的時候 :

在頁面的表單裏添加這樣一個屬性@Html.AntiForgeryToken() :

該屬性會在頁面生成一個隱藏的input組件,在提交表單的時候驗證這個字段。用來防止跨站請求僞造(CSRF:Cross-site request forgery)攻擊的一個措施

另外還須要在對應的方法上套用這樣的屬性:   [ValidateAntiForgeryToken] 

【該輔助方法會寫入一個加密過的數據到用戶端瀏覽器的Cookies中,而後在表單內插入一個名爲_RequestVerificationToken的隱形欄位,該隱藏欄位的內容,在每次從新整理頁面後都會不同。每次執行Action動做時,都會讓這個隱藏欄位的值與Cookies的加密數據進行驗證對比,符合驗證後纔會容許執行這個Action】

 

寫寫博客,方便本身也方便有須要的人 *_*!

相關文章
相關標籤/搜索