ASP.NET MVC 应用程序的安全性,看一眼你就会了

1.使用Authorize特性登陆
对于我们开发程序而言,基本上都是要求角色成员使用Authorize特性,比如,对于管理员而言角色是Admin,对于登陆注册登陆用户而言是User那么我们在用户登陆的时候添加

1 ///角色验证
2 FormsAuthentication.SignOut();  ///清空角色
3 FormsAuthentication.SetAuthCookie("User", false);

这样就添加了一个User角色,然后,我们再控制器上添加角色验证,如下:

1 [Authorize(Users = "User")]
2 public ActionResult Index()
3 {
4 return view();
5 }

这样一来,Index页面就只能是有User角色的人才能访问,

如果用户没有User角色,但是强制访问会怎么呢?下面我们再web.config配置文件中添加一个跳转页面,没有通过角色验证的用户会跳转到指定的页面,下面是跳转到登录页面Login

1     <authentication mode="Forms">
2       <forms loginUrl="~/Login" timeout="2880" />
3     </authentication>

好了,这就有搞定了,简单吧。

2.防止XSS攻击

   1.对所有的内容进行HTML编码, 使用@Html.Encode 或者 @Html.AttributeEncode

   2.对Url进行编码,使用@Url.Encode

   3.对javascript编码,使用@Html.JavaScriptEncode

3.令牌验证

    在form表单中添加  @Html.AntiForgeryToken(),然后在控制器中添加  [ValidateAntiforgeryToken]

4.使用HttpOnly阻止Cookie盗窃

   在webconfig中添加 <httpCookies domain="" httpOnlyCookies="true" requireSSL="false" />

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

5.使用Bind特性只接收表单中有的属性

   如:[bind(Include="UserName,PassWord")]

   这里我是有个疑问, 为什么这个能防御重复提交攻击,本人认为这应该是不能达到的。而是避免提交攻击性的数据,比如视图提交表单之外的其他数据。

以上都是项目中经常会用到的,当然,也许你有更好的办法。

本群提供ASP.NET MVC,EF,LINQ,WEB API技术支持,不在乎人多,在乎人精。
ASP.NET MVC群 171560784  
诚邀各路高手、初学者加入。

原文地址:https://www.cnblogs.com/kezhiping/p/3875460.html