【问题标题】:Web Application Password SecurityWeb 应用程序密码安全
【发布时间】:2014-06-05 21:41:37
【问题描述】:

我的公司有一个 Java Web 应用程序,其数据库密码存储在属性文件中,我们需要保护密码。我用谷歌搜索并找到了 Jasypt 解决方案,但在我看来,这并不能真正解决问题,因为这需要另一个密码才能提供给应用程序,而我不知道如何保护该密码。

Jasypt 的主要建议是将密码作为环境变量输入,这意味着在最好的情况下,我会像这样启动应用程序:

./myApp -D password=myPasswordDontHackPlz

这是不安全的,因为您可以在这样做时看到密码

ps -ef | grep myApp

我们也不能在需要密码时(通过网络或其他方式)输入密码,因为它本质上决定何时需要密码,而且它经常需要密码。

是否有任何解决方案,或者我是否要求一些不存在的神奇解决方案?我不喜欢 Jasypt,因为在我看来它本质上只是一种混淆,而且我不是在混淆之后我在这里寻找真正的安全性。

【问题讨论】:

  • “环境变量”的意思是password=myPasswordDontHackPlz ./myApp,不是吗?我认为,这应该将其排除在命令行之外。 mosh.mit.edu/#build-instructions 报告“在 GNU/Linux、OS X 和 FreeBSD 上”“其他用户无法读取正在运行的进程的环境变量”。

标签: java security properties configuration


【解决方案1】:

为什么不把密码放在一个只有运行 Web 应用程序的用户才能读取的属性文件中? Web 应用程序在某个阶段需要知道 root 密码,因此显然您希望它能够读取/使用它。你想要的是没有其他人应该能够读取它,并且保护文件就可以做到。

这一切都假设您需要外部化您的密码。如果你想让它更难理解,你可以将它硬编码到应用程序中,但是有权访问 JAR 的人总是可以反编译你的类。

【讨论】:

    【解决方案2】:

    我只是想知道 - 存储根数据库密码通常是个坏主意。但是话又说回来,当有人真正设法访问服务器上的那个文件时,你的数据库到底有多安全?

    如果您创建了一个 shell 脚本并运行它,密码还会显示吗?

    #!/bin/bash
    ./myApp -D password=myPasswordDontHackPlz
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2013-08-12
      相关资源
      最近更新 更多