c# - 使用 C#、MVC 3 和 KO 更改 URL 参数

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

这是我的情况:

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

这是我的问题:

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

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

这里有一些例子来说明:

在不对我的代码进行任何更改的情况下,URL 的外观如下:

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

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

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

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

无论哪种方式,我都需要对 URL 中的 key 进行加扰处理或将其删除。或者确定一种在每次调用 Controller 时不使用键运行搜索的方法。

谢谢大家的帮助。

最佳答案

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

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

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

编辑

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

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

关于c# - 使用 C#、MVC 3 和 KO 更改 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978095/

相关文章:

c# - 在列表框中选择项目后打开新表单

c# - Windows Phone 8.1 获取 map 角点geopoint

html - 并排对齐按钮?

html - 摆脱 Gmail 中的 "Show Quoted Text"

validation - 使用基于远程属性的验证时必须双重提交

c# - 如何更改 Newtonsoft.Json 序列化/反序列化的程序集和对象类型?我正在使用 .NET MVC 3 和 WPF

asp.net - 如何在 mvc 3 razor View 中将可空小数格式化为货币,仅用于显示目的

c# - 从 C++ 到 C# 的二进制/十六进制数据的编码/DllImport

jQuery 没有改变 css 颜色值......有时

c# - 在 linq 中使用 equals 关键字