asp.net mvc5:如何隐藏模型 ID,以便没有人可以使用检查元素从浏览器更改
asp.net mvc5 : how to make Model Id hidden so that no one can change from browser using inspect element
我有一个名为 'User' 的模型,其中包含字段 'UserId, Username, Status',在索引页面中,我正在征集所有用户以及编辑、删除功能。这是我的代码
@foreach (var item in Model)
{
<table>
<tr>
<td>@Html.DisplayFor(modelItem => item.Username)</td>
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<td><input type='button' id='btnEdit' data-id='@item.UserId' value='Edit'/></td>
</tr>
</table>
}
渲染为
<table>
<tr>
<td>USER ONE</td>
<td>active</td>
<td><input type='button' id='btnEdit' data-id='1041' value='Edit'/></td>
</tr>
<tr>
<td>USER TWO</td>
<td>active</td>
<td><input type='button' id='btnEdit' data-id='1042' value='Edit'/></td>
</tr>
</table>
点击 btnEdit 后,我的用户 jQuery ajax 像这样调用控制器:
$("#btnEdit").on("click", function () {
$.ajax({
cache: false,
type: "POST",
url: "/User/Edit",
data: $(this).data('id'),
success: function (response) {
//rest of code here
}
});
});
问题:
如何隐藏 UserId 并从 jquery 中针对选定行调用它,以便没有人可以使用检查元素从浏览器中进行更改
如果你需要从jQuery调用它,这意味着它在客户端可用,这意味着它对访问者的浏览器可用,这意味着他可以更改它。
如果你只在代码端需要它,你可以使用 Session,但是你没有办法隐藏客户端的东西。
对于同样的问题,我使用了这个:
Simple insecure two-way "obfuscation" for C#
对于未来的读者,我想将这个问题标记为已解决,感谢 Stephen Muecke、Vinay Singh 和 Zoran 的宝贵时间和指导。
以下是我为使我的网站不那么容易受到攻击而采取的步骤。
使用带有 Antiforgerytoken 的形式来拒绝任何此类恶意请求。 (如 Vinay Singh 所建议)
加密/解密我的 ID,这样至少普通最终用户无法通过更改它们的值来玩它们。 (如 Zoran 所建议)
最重要的是为了防止不良的最终用户,我在服务器端验证每个请求,当前用户是否被授权发出这个请求等(正如 Stephen Muecke 爵士所建议的那样)
我有一个名为 'User' 的模型,其中包含字段 'UserId, Username, Status',在索引页面中,我正在征集所有用户以及编辑、删除功能。这是我的代码
@foreach (var item in Model)
{
<table>
<tr>
<td>@Html.DisplayFor(modelItem => item.Username)</td>
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<td><input type='button' id='btnEdit' data-id='@item.UserId' value='Edit'/></td>
</tr>
</table>
}
渲染为
<table>
<tr>
<td>USER ONE</td>
<td>active</td>
<td><input type='button' id='btnEdit' data-id='1041' value='Edit'/></td>
</tr>
<tr>
<td>USER TWO</td>
<td>active</td>
<td><input type='button' id='btnEdit' data-id='1042' value='Edit'/></td>
</tr>
</table>
点击 btnEdit 后,我的用户 jQuery ajax 像这样调用控制器:
$("#btnEdit").on("click", function () {
$.ajax({
cache: false,
type: "POST",
url: "/User/Edit",
data: $(this).data('id'),
success: function (response) {
//rest of code here
}
});
});
问题:
如何隐藏 UserId 并从 jquery 中针对选定行调用它,以便没有人可以使用检查元素从浏览器中进行更改
如果你需要从jQuery调用它,这意味着它在客户端可用,这意味着它对访问者的浏览器可用,这意味着他可以更改它。
如果你只在代码端需要它,你可以使用 Session,但是你没有办法隐藏客户端的东西。
对于同样的问题,我使用了这个: Simple insecure two-way "obfuscation" for C#
对于未来的读者,我想将这个问题标记为已解决,感谢 Stephen Muecke、Vinay Singh 和 Zoran 的宝贵时间和指导。
以下是我为使我的网站不那么容易受到攻击而采取的步骤。
使用带有 Antiforgerytoken 的形式来拒绝任何此类恶意请求。 (如 Vinay Singh 所建议)
加密/解密我的 ID,这样至少普通最终用户无法通过更改它们的值来玩它们。 (如 Zoran 所建议)
最重要的是为了防止不良的最终用户,我在服务器端验证每个请求,当前用户是否被授权发出这个请求等(正如 Stephen Muecke 爵士所建议的那样)