将密码移出 war

Moving passwords out of war

我们有一个在 tomcat 上运行的 Web 应用程序,它在某些 .java 文件中有硬编码密码。我们的安全人员 none 非常高兴,他们要求我们将文件移到外部。

我的假设是最好的方法是将属性文件放在 tomcat /conf 目录中?或者在其中一个配置文件中设置某种 JDNI 属性?

是否有一种普遍可接受的方式来完成这项工作?

我看到这个 post 有一些非 tomcat 的答案:What is the best way to keep passwords configurable, without having them too easily available to the casual human reader?

更具体地说,我们有应用程序管理的数据库连接,我想获取凭据。我假设我需要了解如何将它们放入 JNDI 资源,然后在该资源中查询用户名/密码?

一个相当简单的解决方案是通过以下方式从您的应用程序中简单地外部化凭据:

  • 在应用程序服务器配置中创建 JNDI 条目
  • 限制对此文件的访问(只有正在发布的人才能访问它)
  • 让应用程序使用 JNDI 资源获取连接

这样开发人员(或任何有权访问源代码的人)将不知道密码。如果您想要更安全的方法,您还需要对密码进行编码而不是存储它作为明文。这显然需要额外的努力,所以你需要决定是否值得做。

我建议这种情况:

  • 如果凭据来自数据库,我建议您可以使用 JNDI 别名,JNDI 将在应用程序服务器上配置。

  • 如果凭据来自其他用途,则您需要在属性文件中进行加密和设置:解析凭据的服务器需要具有算法。

  • 在任何其他情况下,用户将需要实时输入凭据。