0

我正在为我的 Web 应用程序使用 MVC 3 (RAZOR)。

我有一个简单的“编辑”视图来处理员工记录(例如名字、姓氏、出生日期等),但有些数据是敏感和加密的。敏感数据被加密并转换为 base 64 字符串。敏感数据在编辑视图中不可编辑,但被传递到隐藏字段以“保留它”,以便在需要编辑员工记录上的其他字段时不会在回发中丢失。

我认为因为这个数据是基于 64 位的,所以它不会在隐藏字段中呈现 - 也许这是 MVC 3 安全问题。我还应该提到,这个属性在我的模型上被标记为必需。所以它必须重新填充才能回发。

我需要在这个属性上添加一个特殊属性来告诉 MVC 可以在隐藏字段中使用吗?还有其他想法吗?

在 RAZOR 中,我的隐藏字段声明如下所示:

@Html.HiddenFor(model => model.SomeBase64String)

在 HTML 中,它被渲染为:

<input style="margin-right: 5px;" id="SomeBase64String" name="SomeBase64String" value="" type="hidden" data-val="true" data-val-required="SomeBase64String is required.">

base 64 字符串的示例可能是:

OW0iSdFXUqaUT82qjqaG5w==

在 Edit (GET) 控制器操作中,我有以下内容:

        public ActionResult Edit(int id)
        {
            Employee employee;

            if (id == 0)
            {
                employee = Employee.CreateNew();
            }
            else
            {
                employee = _employeeDatabaseAccess.GetEmployeeById(id);

                //employee.SomeBase64String is already set. it's stored in the db...
            }

            return View(employee);
        }
4

2 回答 2

1

在渲染视图之前,请确保您已在控制器操作内的视图模型上设置了相应的属性:

model.SomeBase64String = ...
return View(model);

但我建议您不要为任何加密而烦恼。处理此问题的正确方法是,如果用户不应该编辑它,则根本不将此信息传递给视图。然后在您的 POST 控制器操作中,只需使用记录的 id 从您最初读取它的任何位置读取此信息(我猜您正在使用一些数据存储或其他东西)。

您应该只将用户应该查看和编辑的信息传递给视图。传递敏感信息就像自找麻烦。

于 2013-02-22T16:16:15.037 回答
0

好吧,我按照 Darin 的建议创建了一个示例 MVC 项目,并验证了 Base 64 字符串可以在隐藏字段中呈现。没问题。我的申请肯定有问题。

于 2013-02-22T18:18:37.703 回答