【问题标题】:How to protect sensitive information inside context.xml?如何保护 context.xml 中的敏感信息?
【发布时间】: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


【解决方案1】:

我建议构建一个加密系统,在数据发送到 xml 文件之前对其进行加密,而不是在搜索之前搜索用户名或加密名称的任何内容。这样,即使一个人设法进入文件,如果没有用于加密的算法并且确切地知道他们想要找到什么,也无法读取它。理论上他们可以暴力破解,但他们仍然需要知道算法才能做到这一点。处理加密的一种简单方法是在http://www.bouncycastle.org/ 学习如何使用充气城堡库。他们有一个非常易于使用/学习的系统。

【讨论】:

  • 感谢@Ephyxia (+1) - 我也想到了同样的事情,但是有一个严重的缺陷 - 为了让我的应用程序读取加密的用户名/密码/等。从 JNDI 中取出并解密它,它需要有密钥来执行这样的解密。如果这些密钥随 WAR 文件一起提供,那么您甚至可能不使用这样的加密系统......想法?再次感谢!
  • 嗯,您可以使用更简单的可逆加密方法(例如 base 64)来加密整个文件,或者偷偷摸摸地做一些事情,比如学习使用 7zip 库来压缩文件,然后将扩展名更改为随机的.对于那些不知道它是如何加密的但如果你有一个大文件可能不会太快的人来说,这应该很难弄清楚。
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2012-11-19
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多