探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正)

汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc

本章Demohttps://github.com/dunitian/LoTCodeBase/blob/master/NetCode/6.网页基础/BMVC5/MVC5Base/Controllers/ModelController.cs

 

说重点,先简单说下过度提交,一般黑客利用这个和其他漏洞结合可以产生各种反应。(黑客最喜欢 type="hidden" 这种的,有时候也会解猜一些其他字段)

举个很简单的例子:大家都知道有忘记密码是发个邮件给用户,然后点击链接之后就可以修改密码了,很多系统里面没有防止过度提交,用户ID都是如123,124之类可猜编号,黑客只要一个脚本基本上批量修改用户密码

再举个例子,多店模式下的商铺,如果我是一个懂点代码的店主,我又看竞争对手各种不爽,完全可以利用过度提交+权限漏洞来修改对手的商品价格和库存,双十一跟我斗?库存改成0,回家歇菜去吧~

以上两个案例我就不演示了,上次演示一个爆破就被屏蔽了,咳咳, 这次要是再演示估计真得蛋疼了

模拟一个不太准确的案例吧

------------------------------------------------------------------------------------------------------------------------------

就这么低价买走了~~~~

URL参数防止黑客修改一般都是这么玩的====》》

  私钥+公钥+参数进行加密,可以是md5,可以是其他,然后当其中的一个参数传递过去。

  接受方用传过来的公钥和参数+私钥进行同样的加密,然后对比加密结果,不一样则拒绝访问

------------------------------------------------------------------------------------------------------------------------------

eg: URL: xxx?name=a&price=b&count=1&key=C5954C83-6B13-4215-9E4C-192C4A45C049&check=xxxxxxxxxxxxxxxxxxxxxxxxx

黑客要修改url参数,那么至少满足这2个条件:

1.得到私钥

2.解猜加密方式(不建议直接用md5或者sha1之类的,可以和其他加密相结合)

------------------------------------------------------------------------------------------------------------------------------

好了,我们步入正规,继续说过度提交的防御。

过度提交其实在开发过程中已经有意无意的有这种概念了,比如ViewModel的产生,其刚开始是为了性能,其实也可以避免了一些过度提交的攻击

Net里面其实有很好的方案==》模型绑定,可以设置一个Model只能修改哪些属性或者不允许设置哪些属性

通过Bind就可以实现了:

黑名单模式

或者用白名单模式:(建议用这种,安全性更高【ps:你后期有可能再加属性,到时候忘了不over了?】)

======================效果================================

-------------------------扩展---------------------

很多人去面试的时候有可能会被问到,Net里面这种传参原理是啥?

来看一下传统方式:

革命性:

其实这个就是通过模型绑定来实现的.比如这种方式也是利用了模型绑定

模型绑定会从请求中(不一定是表单,路由,url之类的也可以)查找相关参数(Product的相关属性)

eg:从路由获取相关参数

eg:从url获取参数

 手动绑定=》(里面有很多重载方法可以自行研究)

 

 

下面说下模型常用特性:

上次简单说了点:http://www.cnblogs.com/dunitian/p/5724872.html#form

看图

其他系列:

ErrorMessage ="邮箱格式不正确"

视图部分:(这次用另一种方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
@model Register
 
@ using  (Html.BeginForm())
{
     @Html.AntiForgeryToken()
     
     <div  class = "form-horizontal" >
         <h4>Register</h4>
         <hr />
         @Html.ValidationSummary( true "" new  { @ class  "text-danger"  })
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.Age, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.Age,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.Age,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.Money, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.Money,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.Money,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.NiName, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.NiName,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.NiName,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.Pass, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.Pass,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.Pass,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.RPass, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.RPass,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.RPass,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.Email, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.Email,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.Email,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             @Html.LabelFor(model => model.CreateTime, htmlAttributes:  new  { @ class  "control-label col-md-2"  })
             <div  class = "col-md-10" >
                 @Html.EditorFor(model => model.CreateTime,  new  { htmlAttributes =  new  { @ class  "form-control"  } })
                 @Html.ValidationMessageFor(model => model.CreateTime,  "" new  { @ class  "text-danger"  })
             </div>
         </div>
 
         <div  class = "form-group" >
             <div  class = "col-md-offset-2 col-md-10" >
                 <input type= "submit"  value= "Create"  class = "btn btn-default"  />
             </div>
         </div>
     </div>
}

效果:

 

送福利:

http://www.cnblogs.com/dunitian/p/5640147.html (最下面)

http://www.cnblogs.com/dunitian/p/4667038.html (最上面)


本文转自毒逆天博客园博客,原文链接:http://www.cnblogs.com/dunitian/p/5741874.html,如需转载请自行联系原作者

相关文章
|
26天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
5月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
150 4
|
2月前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
111 7
|
2月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
45 4
|
3月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
52 1
|
3月前
|
存储 编译器
.Net特性Attribute的高级使用
【10月更文挑战第14天】在.NET中,特性(Attribute)是一种强大的机制,用于在代码中添加元数据。本文介绍了特性的高级用法,包括自定义特性、通过反射读取特性、条件编译与特性结合、多个特性应用以及特性继承。通过示例展示了如何创建自定义特性类、应用自定义特性,并通过反射获取特性信息。此外,还介绍了如何利用条件编译符号实现不同版本的代码控制,以及如何在一个代码元素上应用多个特性。最后,探讨了如何通过`AttributeUsage`控制特性的继承行为。
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
58 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
104 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
76 0
|
8月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
236 0