【发布时间】:2014-10-08 09:08:46
【问题描述】:
我将模型值(Id)操作传递给这样的操作:
控制器部分:
return RedirectToAction("SaveAction", "MyController", new { MyId= model.Id});
查看部分:
@Html.HiddenFor(model => model.Id)
另一个视图示例:
@Html.ActionLink("Delete", "Delete", new { MyId= Model[i].Id, AnotherId= Model.[i].AnotherId})
在链接栏上,它是这样显示的:
http://localhost:9151/Controller/Save?Id=180
当我将“180”更改为“181”时,用户可以看到 Id=181 的所有值相关视图。这对我来说是一个重要的安全问题,用户无法访问其他 Id 值,如 181、182、183 等。
如何将 Id 值安全地传递给操作,以及如何不在浏览器的链接栏中显示 Id 值?
有没有简单的方法来做到这一点?
【问题讨论】:
-
你试过在mvc中使用路由提供者吗?
-
而不是get使用post
-
您需要处理控制器中的安全性。用户仍然可以在地址栏中输入
/Controller/Save?Id=181。 -
@DavidG 你为什么要这样做,用户仍然可以更改 URL。关键是他们应该授权访问该 URL 的请求结果中显示的数据。
-
@DavidG 你迷路了,你可以在 MVC 中创建自定义授权属性来验证应用程序中的用户和角色,这就是为什么我说“让用户拥有特定角色或拥有他们的特定项目有权访问”如果用户无权访问他们刚刚键入的 URL,则应处理错误并将其重定向到错误控制器或类似的东西以显示未经授权的消息
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4