【问题标题】:Alter URL parameter using C#, MVC 3 and KO使用 C#、MVC 3 和 KO 更改 URL 参数
【发布时间】:2023-04-10 05:07:01
【问题描述】:

这是我的情况:

我有一个从数据库中提取数据的搜索页面。显示的每条记录都附加了一个键,以便从数据库中提取该记录的数据。当单击记录文档的链接时,会使用 KO 数据绑定将此键添加到 URL,并将控制权传递给相应的 MVC 控制器。

这是我的问题:

该键显示在 URL 中。我不能允许这样。本网站的用户只被允许访问某些记录。如果用户仅通过更改 URL 中键的最后一个或两个数字就可以看到任何记录,这是不可接受的。到目前为止,我想出的最佳解决方案是在处理搜索结果时使用 AES256 加密来加密每个密钥,然后在将加密传递给另一个控制器后解密。这很好用,除非我进入使用 HTTPS 的环境。我收到 400 个错误。

我是不是想多了?有没有办法使用 MVC 和 KO 完全屏蔽 URL 中的密钥?或者即使使用 HTTPS,也应该在 URL 中允许加密?

以下是一些澄清示例:

没有对我的代码进行任何更改,以下是 URL 的外观:

https://www.website.com/Controller/Method/1234

使用加密,我想出了这样的事情:

https://www.website.com/Controller/Method/dshfiuij823o==

只要它适用于 HTTPS,它就可以正常工作。

无论如何,我需要打乱 URL 中的密钥或摆脱它。或者确定每次调用控制器时不使用键运行搜索的方法。

感谢大家的帮助。

【问题讨论】:

    标签: c# html asp.net-mvc-3 url knockout.js


    【解决方案1】:

    除非我在这里遗漏了一些非常明显的东西,否则你不能在 Web 服务方面检查登录用户是否对记录具有正确的权限,如果没有,就不要显示记录?

    理想情况下,这应该在搜索级别完成,这样用户就不会看到任何他们无法访问的文件。即使他们更改了浏览器中的密钥,他们仍然无法访问。

    如果没有会员系统,那么如果您真的想让您的网站安全,就需要实施一个。否则,你就是在玩火。否则,您需要将文档设置为“公开”或“私有”,其中仍需要进行数据库级别的更改。

    编辑

    如果您真的需要让您的 ID 不可猜测,请不要对其进行加密,采用更简单的方法并在您的数据库级别为它们创建 GUID。然后您的 URL 将包含 GUID 而不是加密密钥。由于您不必在每次通话时加密/解密您的记录 ID,因此效率会高得多。

    然而,这仍然不是 100% 安全的,我怀疑是否会通过 PCI 数据安全检查,因为人们仍然可以从查询字符串中查看(和复制/粘贴)GUID,就像使用加密字符串一样容易。实际上,您需要一个完全合规的会员系统。

    【讨论】:

    • 检查权限似乎是要走的路。谢谢!
    【解决方案2】:

    我同意狄克逊的观点。您应该检查用户是否有权查看任何项目。

    我也同意使用 GUID 是个好主意。

    但是,如果您不喜欢整数作为 id,这里有一个简单的方法:创建 URL 时:将 id 乘以一个大整数,例如 12345。然后在处理请求时,将 URL 中的数字除以你的“秘密”号码。这不是万无一失的。但是一个猜测的人只有很小的机会获得一个真实的身份证——具体来说,12345 分之一的机会得到一个真实的身份证。

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 2016-09-15
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多