【发布时间】:2014-05-11 21:12:51
【问题描述】:
我正在创建一个使用 ASP.NET MVC 填写在线工作申请的系统。这实际上只是一个让自己熟悉 MVC 框架的实验。我绝对不是安全专家,所以我只是想在这里得到一些建议,因为这个网络应用程序将处理敏感信息。
系统有一组类似向导的视图。您从一个视图到下一个视图填写相关信息,直到最后提交。
每个工作申请都使用 GUID 主键存储在数据库中。现在,我只是将该 GUID 存储在每个页面视图中的隐藏字段中。这使得更新控制器中的模型变得很容易,如下所示:
[HttpPost]
public ActionResult ExampleAction(FormCollection formValues)
{
Guid appId = new Guid(Request.Form["ModelId"]); // the GUID stored in the hidden field
ExampleModel example = db.Entities.Single(e => e.ModelId == appId);
UpdateModel(example, formValues);
db.SaveChanges();
return RedirectToAction("ExampleAction2", new { appId = appId.ToString() });
}
我知道这并不安全,因为任何具有任何开发经验的人都知道您可以在任何浏览器的开发人员工具中编辑隐藏字段的值。那么,安全获得相同结果的推荐方法是什么?
【问题讨论】:
-
他们当然可以编辑该字段。如果他们将其编辑为无效的内容,只需扔掉该应用程序。如果他们将其编辑为有效的内容,那么他们是如何访问其他人的 GUID 的?
-
您只想保留 GUID? MVC 的关键特性之一是路由和详细 URL。这意味着,如果显示 ID 没有问题,请在 URL 上加上
jobs/view/GUID或jobs/apply/GUID。否则,我会在会议上保留它 -
@Brandon 我不担心他们劫持另一个应用程序——这几乎是不可能的。只是对向用户隐藏实现细节感兴趣。
标签: c# asp.net-mvc asp.net-mvc-3 security