在源代码中显示MySQL行ID:好还是坏?

时间:2012-02-10 04:48:52

标签: jquery mysql

有一些jQuery插件(jqgrid,DataTables等)用于在具有高级功能的html表中显示数据。具有实时编辑能力的那些或者将mysql行id存储在表本身中(并使其不可编辑),或者像源代码中的行id一样。

我还读过,揭示有关数据库设计的任何内容都是一个坏主意。

在源代码中显示mysql行id或表本身是一个大问题?它只取决于数据的敏感性吗?

在javascript中使用与html表行id和mysql行id匹配的哈希表会更好吗?

2 个答案:

答案 0 :(得分:2)

如果您依赖数据模型的“obscurity”来保护您免受SQL Injection等问题的影响,那么您会非常失望。此外,如果您不是完整性检查用户提供的值(例如,要更新的rowid),您的应用程序中将会出现漏洞。这与您在应用程序中识别数据所使用的内容无关。主键本身通常不是敏感数据。

简而言之,使用行ID识别用户通过您的应用程序发送的数据并不是一个问题,前提是您需要完整地检查用户输入,就像您需要做的那样。请注意,如果您在URL中显示ID,则可能会遇到一些问题,因为用户倾向于在最奇怪的地方为页面添加书签。听起来并不像你想要那样做。

有关相关讨论,请参阅Should I obscure primary key values?

答案 1 :(得分:1)

正如您所提到的,这取决于数据的敏感性。但是,我想解释一下我为这种情况所采取的方式。可能它会帮助你。

我添加了数据库表行的ID作为HTML表行ID。当有人编辑时。我收到请求后,我检查了几件事。

  1. 此用户是否已通过身份验证
  2. 此用户是否有权编辑此模块的行
  3. 此用户是否可以编辑此选定的行。
  4. 您也可以将2到3个步骤组合在一起。如果您想要更多安全性或审核,您也可以保留日志。

    如果需要,可以对ID进行编码并将其设置为行ID。当您收到编辑请求时,您可以对其进行解码并获取。