php - 如何防止表单变量名泄露数据库结构?

标签 php html forms security encryption

我正处于开发 Web 应用程序的早期阶段,我已经到了想要针对特定​​安全问题做出最佳选择的地步。目前,在 HTML 表单中找到的所有字段都以它们所代表的数据库列命名。因此,例如,如果在数据库中我有一个名为“email”的字段,那么表单字段也将被称为“email”。这使我的通用代码更容易处理表单,但我自然会发现此类名称的一个主要问题:它们可以让潜在的黑客仅通过查看源代码就可以了解我的数据库的结构。

我想到的主要解决方案涉及加密字段名称,以便客户端永远不会拥有真实的名称。服务器端 key 将用于加密。然而,我担心这种方法可能会使事情变得过于复杂。例如:

  • 我可能会发现自己不得不更频繁地使用 POST,因为加密的文本可能比原始文本更长 - 当存在许多字段及其数据时,会插入 GET 的限制。
  • 频繁的加密/解密调用可能会导致性能问题。我还没有对此进行测试,因此它最终可以忽略不计。
  • 非 AJAX GET 不能使用这种方法,否则看起来很神秘。

所以,我想知道你们对此有何看法。是我想多了,还是我走对了路?有没有更好的方法来处理它?

顺便说一下,我也知道像“email”这样的字段名称并不能为开发人员提供太多信息(为什么不可以使用 txtEmail 或类似的名称?)。我正在寻找是否有我可以采用的良好命名约定,因为它可能有助于解决上述问题。

最佳答案

如果任何人都可以通过 SQL 注入(inject)或任何其他方法访问您的数据库,那么您的模式可以通过一个查询来揭示,因此没有必要试图掩盖它。如果您觉得必须通过默默无闻的方式来确保安全,那么您做的其他事情就不对。

如果您的应用程序是安全的,那么潜在的攻击者是否认为他们知道您的架构并不重要。他们无法对这些信息做任何事情。

我会花更少的时间试图掩盖您的数据库(这只会让您和您的开发人员感到沮丧),而花更多的时间来尝试锁定您的应用程序以防止潜在的注入(inject)攻击。

关于php - 如何防止表单变量名泄露数据库结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604859/

相关文章:

html - Bootstrap : my columns aren't showing inline

django "duplicate key value violates unique constraint"主键

forms - 在 Form_Unload 之前执行的文本框的 LostFocus 方法

php - MYSQL 匹配文本字段

php - 使用 SimpleXML 更改文本节点的值

php - Laravel 4 - 创建自定义 session 驱动程序

css - 具有动态 Logo /元素高度的水平导航中的 100% child 高度

html - 超链接中的提交按钮

javascript - 我的 REST 中的 @ModelAttribute 为空

php - phpMyAdmin远程访问