【问题标题】:Moving passwords out of war将密码从战争中移除
【发布时间】:2015-11-13 07:58:34
【问题描述】:

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

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

是否有一种普遍可以接受的方式来做到这一点?

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

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

【问题讨论】:

标签: java tomcat jakarta-ee war


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我建议这种情况:

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

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

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

    【讨论】:

    • 您能否发布一个示例别名以及我如何从 bean 内部访问?
    • 因此,您需要一个属性文件作为示例。在此文件中,您将读取一个值,并通过 Main 类将每个属性加载到变量中。在 Bean 文件中,您可以使用 setter 方法对其进行设置。 Example1, Example2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多