关于在HTML中存储ID(例如票证ID,案例ID)的想法

时间:2011-10-17 20:34:45

标签: javascript security

这是一种通用的“好主意/坏主意”问题。

我的方案:我正在编写一个只有1页的ASP.NET MVC3应用程序(一个视图/控制器)。此视图显示“个案”的网格,当用户点击其中一个个案时,我使用jquery ajax($.ajax)来换出可见部分页面并加载此案例的详细信息(但永远不会更改页面)。

还在我身边吗?谢谢!

现在,一旦显示了这个新的案例详细信息视图,用户就可以通过多种方式之一编辑案例。更改优先级,更改状态等。我也使用jquery的ajax函数。

我的问题我应该如何存储案例ID?可以将它存储在HTML中吗?有没有更好的存放地点?

所有案例都有一个Guid ID,当前加载案例详细信息时(使用ajax)我将自定义属性添加到案例< / strong>详细信息视图<div>所以我知道案例 ID。这意味着查看页面源的任何人都可以看到案例 ID。我想过使用jQuery的.data()函数来存储它,这对于页面源是不可见的,但是可以从Firebug其他检查器工具访问。

最佳做法是什么?我真的无法想象我的用户会如何使用 Case ID做任何事情,但我想在这里有点偏执。

提前感谢您的任何想法!感谢您阅读这本小说!

3 个答案:

答案 0 :(得分:2)

对于浏览器以任何方式看到的内容,你几乎无能为力,因为DOM中的代码和数据不受用户保护。

显然,您不希望向不允许查看该信息的用户发送任何内容 - 因此您不希望对依赖于用户角色的数据进行任何客户端过滤。

但是对于内部数据,你只需要保护你的外围 - 方法不能接受不匹配的id(即一个只对提交的不同客户有效的账号) - 但是你做的很少关于ids本身。

答案 1 :(得分:1)

通过将案例ID从服务器发送到浏览器,您将其提供给用户。如果您不希望用户拥有案例ID,请不要将其发送到浏览器。

答案 2 :(得分:1)

如果你担心的话,我会提供一些消毒的,“想象的”ID。如果这是在循环中运行,我建议将其基于循环索引。

但是,最终,您需要在Case上使用某种唯一标识符,以便在对数据库的ajax调用中识别它。

实际上,我之前做过同样的事情,只是在标记中编码了ID字段,而且很少有问题。如果你的安全性不严,这个ID只是一个有害的东西。如果您已经保护了数据库并且在应用程序上具有相当级别的安全性,那么您应该没问题。如果你还没有,那么你需要担心的事情要比标记更重要。