Asp.net MVC 3加密隐藏值

本文关键字:隐藏 加密 net MVC Asp | 更新日期: 2023-09-27 18:21:09

我正在寻找关于如何以安全的方式在客户端到服务器之间来回传递id的建议或真正好的教程,我不会传递用户id或类似的东西,但我可能会传递Items表行的id。我想对用户隐藏这些ID。我希望我能避免把它们放在页面上,但考虑到它们是pk,我别无选择,只能在客户端和服务器之间来回传递值。

谢谢你的帮助。

编辑:我计划检查用户是否有权执行此类操作,但我仍然希望隐藏数据。

Asp.net MVC 3加密隐藏值

简单建议:

1) 在生成的表中添加一个guid列(默认值:new id())。在guid列上创建索引。来回传递guid而不是PK。

2) 这能完全保护你的id吗?不会。但它可以防止用户猜测数字PKs。

3) 始终检查已通过身份验证的用户是否有权访问记录。

您确实应该在服务器上进行安全保护。用户可以访问的任何记录都应该是可用的,而他们没有访问权限的任何记录也不应该是。他们是否知道ID是什么并不重要,因为他们无论如何都可以访问数据。他们可以通过黑客做任何事情,他们可以在UI中做。

因此,试图隐藏它们根本没有意义。

正如您所提到的,将项目表行的PK输出到View不是一种理想的做法,就好像它们在页面的HTML中一样,是可以查看的。

如果我理解正确的话,我猜你所说的"向用户隐藏这些ID"是指以某种方式混淆ID,所以即使它们是从视图的HTML中获取的,它们在各自的上下文中也没有什么意义。

实现上述目标的一种方法是使用ViewModel将绑定数据输出到视图,但在特定的ViewModel类中,您可以使用一些自定义属性逻辑来使用AES(双向)加密算法对PK进行编码,加密的salt只有您(和您的服务器)知道。

在他们看来,这将是"保护"库尔德工人党的一种方式。

使用这样的方法,当这些数据来回ping时,您可能需要考虑加密/解密PK的性能开销!

如果你真的走加密路线,这可能会引起兴趣:

简单不安全双向";混淆";对于C#

您还可以在不加密的情况下实现更大的不透明性,方法是在内存中(缓存或会话数据)进行键值查找,将任意数字作为ID输出到每个表项的视图,并且从视图中检索时,将从内存中的集合中反向查找PK。

您可以使用MVC安全扩展项目https://mvcsecurity.codeplex.com.

假设您要保护的字段是Id…

在你的控制器张贴方法添加:

[ValidateAntiModelInjection("Id")]

在您的视图中添加:

@Html.AntiModelInjectionFor(m => m.Id)
@Html.HiddenFor(m => m.Id)

发布后,将验证您的Id字段。