Java 如何保护context.xml中的敏感信息?

Java 如何保护context.xml中的敏感信息?,java,security,tomcat,jndi,context.xml,Java,Security,Tomcat,Jndi,Context.xml,我刚开始将我所有的DB凭证存储在WAR的context.xml文件中,并通过JNDI加载它们。这样,我的应用程序可以在多个区域重用相同的凭据,并且我可以使用JNDI检索它们(而不是将凭据散布到我的代码库中) 但现在我在想:如果攻击者进入安装了Tomcat服务器的机器怎么办?他们可以直接进入我的webapps/MyApp分解目录,找到并打开context.xml目录,瞧,他们现在可以访问我的数据库了 那么,在这里引入安全性的下一步是什么?有没有办法将我的所有凭证保存在某个密钥库中,并从contex

我刚开始将我所有的DB凭证存储在WAR的
context.xml
文件中,并通过JNDI加载它们。这样,我的应用程序可以在多个区域重用相同的凭据,并且我可以使用JNDI检索它们(而不是将凭据散布到我的代码库中)

但现在我在想:如果攻击者进入安装了Tomcat服务器的机器怎么办?他们可以直接进入我的webapps/MyApp分解目录,找到并打开
context.xml
目录,瞧,他们现在可以访问我的数据库了


那么,在这里引入安全性的下一步是什么?有没有办法将我的所有凭证保存在某个密钥库中,并从
context.xml
中引用它们的标签?我仍然希望使用
context.xml
,以便我的JDBC代码可以通过JNDI访问凭据。如果是这样的话,
context.xml
如何以安全的方式访问它们?这里处理安全问题的正常方式是什么?提前谢谢

我建议构建一个加密系统,在数据发送到xml文件之前对其进行加密,而不是在搜索之前搜索用户名或加密名称的任何内容。这样,即使一个人设法进入了文件,如果没有用于加密的算法,并且不确切知道他们想要找到什么,他们也无法读取它。理论上他们可以使用暴力,但他们仍然需要知道实现这一点的算法。处理encrytion的一个简单方法是在学习如何使用bouncy castle libs。他们有一个非常容易使用/学习的系统。

你这里有点鸡和蛋的问题。如果您的webapp可以访问数据库,那么任何进入该框并具有相同或更高权限级别的攻击者也可以访问数据库。即使你添加了密钥库,如果你的webapp可以打开密钥库,攻击者也可以。我认为更大的问题是登录到“机器”。不是吗?如果一个人可以破门而入,唯一可以确保安全的方法就是把它放在一些“安全”的地方(加密而不是普通数据)。好的观点@Aurand(+1)-那么典型的解决方案是什么(我不是唯一一个为此而挣扎的Java开发人员)?…或者这样说:如果我不想让其他开发人员知道,比如说,一个实时数据库的凭据,该怎么办?我不仅仅是在谈论减轻外部攻击,我可能只是想保护我的凭证不受游荡的目光…相关问题:(相同的概念,不同的语言)。如果您不想让其他开发人员访问凭据,请不要授予他们与应用程序相同的权限。也许应用程序可以使用某些权限运行,并且凭据只能由这些权限读取。感谢@Ephyxia(+1)-我想到了同样的事情,但是这其中有一个严重的缺陷-为了让我的应用程序从JNDI读取加密的用户名/密码/等并解密,它需要有密钥进行这样的解密。如果这些密钥随WAR文件一起提供,那么您甚至可以不使用像这样的加密系统…想法?再次感谢!嗯,你可以使用一种更容易逆转的加密方法来加密整个文件,比如base 64,或者偷偷摸摸地做一些事情,比如学习使用7zip库来压缩文件,然后把扩展名改成随机的。这会让那些不知道它是如何被收录的人很难理解,但如果你有一个大文件,速度可能不会太快。