【发布时间】:2013-08-06 20:12:22
【问题描述】:
我刚刚开始将我的所有数据库凭据存储在我的 WAR 的 context.xml 文件中,并通过 JNDI 加载它们。这样,我的应用程序可以在多个区域重复使用相同的凭据,并且我可以使用 JNDI 来检索它们(而不是将凭据散布在我的代码库中)。
但现在我在想:如果攻击者进入安装了我的 Tomcat 服务器的机器怎么办?他们可以直接进入我的 webapps/MyApp 展开目录,找到并打开 context.xml 目录,瞧——他们现在可以访问我的数据库了!
那么在这里引入安全性的下一步是什么?有没有办法将我的所有凭据保存在某个密钥库中,并从 context.xml 内部引用它们的标签?我仍然想使用context.xml,以便我的 JDBC 代码可以通过 JNDI 访问凭据。如果是这样,context.xml 如何以安全的方式访问它们?这里处理安全的正常方式是什么?提前致谢!
【问题讨论】:
-
这里有点鸡和蛋的问题。如果您的 webapp 可以访问数据库,那么任何以相同或更高级别的权限进入该框的攻击者也将能够访问该数据库。即使你添加了一个keystore,如果你的webapp可以打开keystore,那么攻击者也可以。
-
我认为这里更大的问题是登录“机器”。不是吗?如果有人可以破门而入,那么确保安全的唯一方法就是将其放入某个“安全”(加密而不是普通数据)。
-
好点@Aurand (+1) - 那么典型的解决方案是什么(我不能成为唯一为此苦苦挣扎的 Java 开发人员)?
-
...或者这样说:如果我不希望其他开发人员知道 LIVE 数据库的凭据怎么办?我不一定只是在谈论减轻外部攻击,我可能只是希望保护我的凭据免受流浪的目光......
-
相关问题:security.stackexchange.com/q/37015/8857(相同的概念,不同的语言)。如果您不希望其他开发人员访问凭据,请不要授予他们与应用程序相同的权限。也许应用程序可以在某些权限下运行,而凭据只能由这些权限读取。
标签: java security tomcat jndi context.xml