我正在使用ASP.NET MVC创建一个系统来填写在线作业应用程序。这只是一个让我熟悉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? – Brandon 2012-07-17 23:09:31
你只想保留GUID? MVC的一个关键特性是路由和详细URL。这意味着,如果在显示ID时没有问题,请将其放在URL上,例如'jobs/view/GUID'或'jobs/apply/GUID'。否则,我会保留在会议 – 2012-07-17 23:23:08
@Brandon我不担心他们劫持另一个应用程序 - 这实际上是不可能的。只是想隐藏用户的实现细节。 – jebar8 2012-07-18 03:04:32