asp.net-mvc - 如果未绑定(bind),MVC4 Razor 会丢失用户 ID

标签 asp.net-mvc data-binding razor model

我目前正在 MVC4 中创建一些用户配置文件编辑表单,为了进行测试,我将 UserId 属性渲染到表单上的只读文本框中,如下所示:

<li>
    @Html.LabelFor(model => model.UserId)
    @Html.TextBoxFor(model => model.UserId, new { @readonly="readonly"})
</li>

当我即将完成编辑表单时,我删除了此文本框,因为它只是耗尽了空间。完成此操作后,保存时发送回 Controller 的模型的整数默认值为 0,然后 Entity Framework 就会崩溃,因为它无法更新任何行。所以我将其添加到表单中:

<li>
    @Html.HiddenFor(model => model.UserId, new { @readonly="readonly"})
</li>

这是一个安全的举动吗?我应该使用 ViewBag 来做这样的事情吗?在个人资料详细信息页面上,我呈现一个如下所示的编辑按钮:

@Html.ActionLink("Edit", "Edit", new { id=Model.UserId })

意味着 UserId 在链接中呈现。这是否安全可靠,还是我需要重新考虑如何在 UI 中移动模型和 id?

TIA,

最佳答案

Is this a safe move?

这将完成将 ID 发送到服务器的工作。只需删除 readonly="readonly" 属性即可,该属性对于隐藏输入来说意义不大。

Should I be using the ViewBag for things like this?

这不会改变安全性方面的任何内容。任何用户仍然可以输入他想要的任何 ID。无论您使用隐藏字段还是 ActionLink,您仍然会将 id 以纯文本形式发送到服务器,任何人都可以伪造请求并输入他想要的任何 id。因此,如果您的站点使用某种形式的身份验证,则在尝试对其执行任何操作之前,您必须在服务器端绝对检查您收到的 id 实际上是属于当前经过身份验证的用户的资源。否则,某些经过身份验证的用户可以提供属于另一个用户的资源 ID,并能够更新它。当然,这只是一个假设的场景,根本不清楚这是否是您的情况以及此 id 是否需要受到保护。

关于asp.net-mvc - 如果未绑定(bind),MVC4 Razor 会丢失用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837733/

相关文章:

c# - 在 View 上自动更新 ViewComponent

jquery - MVC : How to bind array in hidden form field value to model collection property

html - 将 css 样式应用于 html 帮助程序

.net - 我应该将什么类型的对象绑定(bind)到 n 层应用程序中的 WPF 表单?

c# - 数据绑定(bind)到 WPF 中的方法

razor - 在 Blazor 项目中添加一个 razor 页面会创建一个 .cshtml 文件

mysql - MVC3 - 无法将长文本输入数据库

javascript - ASP.NET MVC Button.Click 不使用 javascript

asp.net-mvc - 关于将 Subsonic 与 Asp.Net MVC 框架一起使用有什么提示/技巧吗?

wpf - 如何将 MenuItem.Header 绑定(bind)到 Window/UserControl 依赖属性?