MVC学习之开发技巧总结(1)

一、强化网站安全性:避免跨网站脚本攻击(XSS)

跨网站脚本攻击(XSS):是指利用网站既有的漏洞将不应该输入的信息从一个网站传送到另一个网站。这种类XSS攻击分为两类:

1、自己的网站攻击别人的网站

2、别人的网站攻击自己的网站

对应措施:

自己的网站攻击别人的网站:在MVC中,可以使用Html.Encode 、Url.Encode或是Ajax.JavaScriptStringEncode辅助方法。

1、html.Encode辅助方法:

如果使用Razor语法,任何通过@方式输出的内容预设都是经过Html编码过的,因此不需要特别使用Html.Encode辅助方法。

如果是使用WebFormView写撰写Aspx风格的视图页面,那就要清楚使用时机。

1)如果是ASP.NET 3.5 以前的语法,那么在输出任何内容到网页上都需要Html.Encode辅助方法来避免XSS攻击:

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

2)如果是ASP.NET 4.0之后提供的特殊语法,那么预设输出也将会是Html编码过的版本:

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

2、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>

3、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】

 

写写博客,方便自己也方便有需要的人 *_*!

posted @ 2015-08-03 16:28  会编程的厨子  阅读(370)  评论(0编辑  收藏  举报