我正处于开发web应用程序的早期阶段,我已经到了要对某个特定的安全问题做出最佳选择的地步。目前,在HTML表单中找到的所有字段都是以它们所表示的数据库列命名的。例如,如果在数据库中有一个名为“email”的字段,那么表单字段也将被称为“email”。这使得我的通用代码更容易处理表单,但我很自然地看到这样的名称有一个主要问题:它们可以让潜在的黑客从查看源代码的角度洞察我的数据库是如何构建的。
我想到的主要解决方案是加密字段名,这样客户端就永远不会有真正的字段名。将使用服务器端密钥进行加密。不过,我担心这种做法可能会使事情复杂化。例如:
我可能发现自己不得不更频繁地使用POSTs,因为加密的文本可能比原始文本长-当有许多字段及其数据存在时,这就限制了GET。
频繁的加密/解密调用可能会导致性能问题。我还没有测试这个,所以它可能会被忽略不计。
非AJAX get不能使用这种方法,除非看起来非常神秘。
所以,我想知道你们是怎么想的。我是想得太多了,还是走对了路?有更好的方法来处理吗?
顺便说一下,我也知道像“email”这样的字段名并不能为开发人员提供太多信息(为什么不是txtmail,或者类似的东西?)。我想看看是否有一个好的命名约定,我可以采用,因为它可能有助于解决上述问题。

最佳答案

如果任何人都可以通过SQL注入或任何其他方法访问您的DB,那么您的模式可以通过一个查询显示,因此没有必要试图隐藏它。如果你觉得你必须通过默默无闻来保证安全,那你就没有做对其他事情。
如果您的应用程序是安全的,那么潜在的攻击者是否认为他们知道您的模式并不重要。他们不能处理这些信息。
我会花更少的时间去隐藏你的数据库(这只会让你和你的开发人员感到沮丧),花更多的时间来锁定你的应用程序,防止潜在的注入攻击。

07-24 17:12
查看更多