2012-02-10 20 views
0

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

我也读过,揭示任何关于你的数据库设计是一个坏主意。

在源代码或表本身揭示一个MySQL行ID是一个大问题?它仅取决于数据的敏感性?

在javascript中匹配html表行id与mysql行id的哈希表是否会更好?

+0

向用户公开主键通常是非常严格的 - 他们可以依赖于它,使得改变(如果/必要时)变得困难。这也是一个安全问题 - SQL注入可能会造成更多的损害。 – 2012-02-10 04:53:32

回答

2

如果您要依据数据模型的“obscurity”来保护您免受像SQL Injection这样的问题,那么您将非常失望。另外,如果您不是用户正在提供的理智检查值(例如rowid进行更新),那么您的应用程序中会出现漏洞。这与您在应用程序中用于识别数据的内容无关。主键本身通常不是敏感数据。

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

查看Should I obscure primary key values?的相关讨论。

+0

我尝试和清理所有数据(我使用mysql真正的转义字符串)。 此外,该ID不会在URL中,它只是一个行的HTML ID。所以书签问题并非如此。 谢谢。 – dewyze 2012-02-10 05:13:23

1

正如您所说,它取决于数据的敏感性。不过,我想向你解释我为这种情况所做的一切。可能会帮助你。

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

  1. 是该用户进行身份验证
  2. 这是否用户有权限编辑这个模块
  3. 中的行,该行的选择可以通过该用户编辑。

您也可以将2和3个步骤组合在一起。如果你想要更多的安全性或审计,你也可以保留一个日志。

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