asp.net MVC 安全性[笔记]

1. 跨站脚本(XSS)

1.1 介绍

1.1.1 被动注入,利用输入html,javascript 等信息伪造链接,图片等使用提交信息,调转页面等

1.1.2 主动注入,黑客主动参与攻击,不会傻等倒霉的用户上钩

1.2 防御

1.2.1 HTML 编码

Html.Encode

1.2.2 HTML 属性编码

Html.AttributeEncode

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 plaincopyprint?

  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 plaincopyprint?

  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.

时间: 2024-08-30 06:18:55

asp.net MVC 安全性[笔记]的相关文章

Asp.Net Mvc 学习笔记总结(自学第一天)

今天是第一天学习,主要总结了下面两个问题.由于是自学,总结的可能会有纰漏希望大家积极指正(微笑). 1.什么是Mvc?为什么要用Mvc? 2.如何使用Mvc快速实现入门级别的开发? 这里先说一下什么是Mvc:首先Mvc是一种架构模式:第二Mvc不等同于三层:第三Asp.net Mvc是延用了Mvc思想做出来的一款基于三层中的UI层的一款产品:那么Mvc架构模式是什么意思呢?当然这个架构模式20世纪80年代就已经提出来了.当时的提出的时候并没有标准的输入输出设备,只是为了单纯的区分开来输入.输出和

ASP.NET MVC 学习笔记(1)

从头开始系统地学习ASP.NET MVC

ASP.NET MVC 项目笔记汇总

ASP.NET MVC 5 + EntityFramework 6 + MySql 先写下列表,之后慢慢补上~ 对MySql数据库使用EntityFramework 使用域用户登录+记住我 画面多按钮提交 使用权限+角色 下载CSV文件 保留上次的检索条件 后台修改的Model值反映不到客户端的问题 检索结果分页 下拉框内容 下拉框联动 日期选择控件DatePicker 使用资源文件实现国际化 MVC5中如何追加JS文件 MVC5发布到IIS7.5上遇到的一些问题(500.400.13)

【转】ASP.NET MVC学习笔记-Controller的ActionResult

1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome to asp.net MVC!";       return View();   }  public ActionResult Index(){    ViewData["Message"] = "Welcome to ASP.NET MVC!";    re

ASP.NET MVC 学习笔记-2.Controller

MVC中,Controller用来响应对ASP.NET MVC网站的请求,每个浏览器请求都会被映射到特定的Controller实例上,Controller针对请求可能会进行以下处理:向浏览器返回特定的视图或者对请求进行重定向到别的Controller. Controller实质是一个类,都派生于Controller(System.Web.Mvc.Controller基类). Controller上公共的方法称为ControllerAction,ControllerAction不能重载且不能为静态

ASP.NET MVC 学习笔记-2.Razor语法

1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“:”结尾.代码块中定义的变量可能会被同一个域中的其他块使用.比如,定义在视图顶部的变量可以被同一视图中的代码块和代码段访问. 3.         布局 Razor通过layouts保持网页外观布局的一致性.布局模板包含基本的标签,并可以指定渲染视图内容的位置.比如 基本布局文件(_Layout.cshtml) <!DOCTYPE Html> <ht

【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)

本文参考:http://www.cnblogs.com/willick/p/3331521.html 1.继承IController接口,示例代码将当前请求的Controller和Action打印到浏览器: public class BasicController : IController { public void Execute(RequestContext requestContext) { string controller = (string)requestContext.Route

【ASP.NET MVC 学习笔记】- 13 Child Action

本文参考:http://www.cnblogs.com/willick/p/3410855.html 1.Child action 和 Patial view 类似,也是在应用程序的不同地方可以重复利用相同的子内容.不同的是,它是通过调用 controller 中的 action 方法来呈现子内容的,并且一般包含了业务的处理.任何 action 都可以作为子 action .示例: //1.ChildActionOnly 特性保证了该 action 只能作为子action被调用(不是必须的) [

【ASP.NET MVC 学习笔记】- 14 HtmlHlper的扩展方法

本文参考:http://www.cnblogs.com/willick/p/3428413.html 1.在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 HtmlHelper 中的(扩展)方法叫 HtmlHelper Method,简称为Helper Method.它的作用是把生成 Html代码的任务交给 MVC,以便 MVC 能完成很多自动处理的工作.我们在 View 中使用的 Html.ActionLink.H