Php 如何防止表单变量名暴露数据库结构?
我正处于开发web应用程序的早期阶段,我已经到了一个需要对特定安全问题做出最佳选择的阶段。目前,HTML表单中的所有字段都是以它们所代表的数据库列命名的。例如,如果在数据库中有一个名为“email”的字段,那么表单字段也将被称为“email”。这使得我的通用代码更容易处理表单,但我很自然地看到了此类名称的一个主要问题:它们可以让潜在的黑客通过查看源代码了解我的数据库是如何构造的。 我想到的主要解决方案是对字段名进行加密,这样客户端就不会有真正的字段名。将使用服务器端密钥进行加密。然而,我担心这种做法可能会使事情变得太复杂。例如:Php 如何防止表单变量名暴露数据库结构?,php,html,forms,security,encryption,Php,Html,Forms,Security,Encryption,我正处于开发web应用程序的早期阶段,我已经到了一个需要对特定安全问题做出最佳选择的阶段。目前,HTML表单中的所有字段都是以它们所代表的数据库列命名的。例如,如果在数据库中有一个名为“email”的字段,那么表单字段也将被称为“email”。这使得我的通用代码更容易处理表单,但我很自然地看到了此类名称的一个主要问题:它们可以让潜在的黑客通过查看源代码了解我的数据库是如何构造的。 我想到的主要解决方案是对字段名进行加密,这样客户端就不会有真正的字段名。将使用服务器端密钥进行加密。然而,我担心这种
- 我可能会发现自己不得不更频繁地使用POST,因为加密的文本可能比原始文本长——当存在许多字段及其数据时,这就超出了GET的限制
- 频繁的加密/解密调用可能会导致性能问题。我还没有对此进行测试,因此它可能会被忽略不计
- 非ajaxget在使用这种方法时必须看起来非常神秘
顺便说一句,我也知道像“email”这样的字段名不会向开发人员提供太多信息(为什么不使用txtEmail,或者类似的东西呢?)。我想看看是否有一个好的命名约定可以采用,因为它可能有助于解决上述问题。如果任何人可以通过SQL注入或任何其他方法访问您的数据库,您的模式可以通过一个查询显示出来,因此没有必要试图掩盖它。如果你觉得你必须通过默默无闻来确保安全,那么你没有做其他正确的事情 如果您的应用程序是安全的,那么潜在的攻击者是否认为他们知道您的模式并不重要。他们对这些信息无能为力
我会花更少的时间试图隐藏您的数据库(这只会让您和您的开发人员感到沮丧),而花更多的时间试图锁定您的应用程序以防潜在的注入攻击。我认为您考虑得太多了。了解数据库结构没有帮助。警惕SQL注入攻击更为重要。如果我能在你的帖子中插入select语句,我得到的比你的SchemaGrate多得多,谢谢!我只是想尽可能彻底,加密字段的想法引起了我的兴趣。毕竟,如果我能做点什么来帮助提高安全性,为什么不呢?你的帖子有助于定义“为什么不”这一堆,让我得出结论,这是没有必要的。这个想法纯粹是为了补充现有的安全相关代码(包括sql注入保护),在这种情况下,与我怀疑现有的安全措施无关。我将补充mwan的优秀答案,指出了解数据库字段名,或者,甚至数据库结构使应用程序不那么安全,也就是说,开放源代码项目比封闭源代码产品更不安全,这当然是荒谬的。@JasonDean lol,非常好的观点。事实上,这使我的整个问题无效。哦,好吧,我想这一页将永远帮助那些还没有意识到这一点的人。