【发布时间】:2017-09-21 14:03:47
【问题描述】:
我正在学习 Asp MVC 5 并面临这样的问题。使用为我创建的脚手架视觉工作室更新控制器和视图。编辑值时,我注意到它使用隐藏来识别当前记录。例如:
http://localhost:61551/StoreManager/Edit/6
如果您使用开发工具检查页面 - 您会发现一个值为“6”的隐藏输入。
<input data-val="true" data-val-number="The field AlbumId must be a number." data-val-required="The AlbumId field is required." id="AlbumId" name="AlbumId" type="hidden" value="6">
在视图中我们可以看到 ASP 添加了代码来生成隐藏输入
@Html.HiddenFor(model => model.AlbumId)
我可以轻松地将其修改为任何其他值,然后当我单击保存时,ASP 会更新完全不同的记录。因此,黑客可能很容易破坏您的所有数据库。有什么方法可以防止这种情况或使用不同的方法或验证它吗?
谢谢!
【问题讨论】:
-
是的,这是一种常见的方式,即基于 Web 的应用程序可能设计不佳且充满安全漏洞。学习一些与网站设计相关的最佳实践会为您提供最好的服务。
-
你知道 localhost 只存在于你的机器上......我们看不到它!
-
当然,我以为你们对问题很熟悉,不需要提供实时链接
-
通过编辑 URL 来破解它不是更容易吗?例如
http://localhost:61551/StoreManager/Edit/7. -
这就是存在安全和 ACL 主题的原因。即使缺少标识符,您仍应在服务器端执行任何操作之前验证权限。
标签: c# asp.net entity-framework model-view-controller asp.net-mvc-5