AJax技术

《Pro ASP.NET MVC 3 Framework》学习笔记之三十三 【安全性】(5)

字号+ 作者:H5之家 来源:H5之家 2016-07-17 13:00 我要评论( )

View Code public class PasswordController : Controller { public ActionResult Change( string oldpwd, string newpwd, string newpwdConfirm){ string username = HttpContext.User.Identity.Name; ((newpwd ==

View Code

public class PasswordController : Controller { public ActionResult Change(string oldpwd, string newpwd, string newpwdConfirm) { string username = HttpContext.User.Identity.Name; ((newpwd == newpwdConfirm) && MyUsers.VerifyPassword(username, oldpwd)) DoPasswordChange(username, newpwd); // ... } public void DoPasswordChange(string username, string newpassword) { // 请求已经经过验证 User user = MyUsers.GetUser(username); user.SetPassword(newpassword); MyUsers.SaveUser(user); } }

这里将DoPasswordChange()标记为public,开了一个后门,局外人可以调用它来修改任何人的密码。
通常请求下,除非方法作为action方法否则没什么理由将Controller里面的方法设置为public。然而,如果我们想有一个不是action的public方法,可以使用[NonAction]特性,如:
[NonAction]
public void DoPasswordChange(string username, string newpassword) {...}
标记了【NonAction】的地方,MVC不会让它服务任何请求。

不要让模型绑定改变敏感的属性(Don’t Allow Model Binding to Change Sensitive Properties)

当模型绑定填充对象时,默认情况下会把值写到每一个请求对象的属性。例如,如果action方法接收一个Booking对象,Booking有一个int的属性DiscountPercent,那么恶意的访问者可能在URL后附加一个?DiscountPercent=100并获取一个便宜的假期。为了避免这种情况,可以使用[Bind]特性设置一个白名单限制模型绑定填充的属性。如下:
public ActionResult Edit([Bind(Include = "NumAdults, NumChildren")] Booking booking) {...}
同样也可以设置黑名单哈(Exclude),具体可以参考前面模型绑定的章节。

好了,本章的笔记到这里结束,关于web安全的话题我也不是很了解,非常希望路过的朋友能够留下你们见解。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jQuery学习笔记之 Ajax操作篇(二)

    jQuery学习笔记之 Ajax操作篇(二)

    2016-06-07 18:03

  • Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器

    Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器

    2016-06-01 11:13

  • Ajax学习体验之一

    Ajax学习体验之一

    2016-05-25 18:03

  • Ajax学习笔记---3种Ajax的实现方法【推荐】,ajax---3

    Ajax学习笔记---3种Ajax的实现方法【推荐】,ajax---3

    2016-05-14 10:02

网友点评
=