在Java Web应用程序中存储密码变量的不同方法?

我已经实现了一个例程,当用户提交表单时,会向管理员发送一封电子邮件.为此,我使用了Java Mail API.我在Microsoft Outlook上设置了一个虚拟帐户,用于发送电子邮件.在代码中我硬编码了密码.我担心当我托管网页时这将是一个安全问题.

这是我的代码.

我写了一个私人函数:

private void getSession(){
    this.session = Session.getDefaultInstance(properties,  
    new javax.mail.Authenticator() {
        protected PasswordAuthentication 
        getPasswordAuthentication() {
            return new PasswordAuthentication("xxxxxxxxx@outlook.com", "xxxxx_password_xxx");
        }
    });
}

在我的公共execute()方法中,我调用getSession()方法并生成消息.

public String execute() throws Exception {
     getSession();
     Message message = new MimeMessage(this.session);
     message.setFrom(new InternetAddress("xxxxxxxxxxxxx@outlook.com"));
     message.setRecipients(Message.RecipientType.TO, 
                          InternetAddress.parse("admins.email@xxxxx.com"));
     message.setSubject("Form submit notification");
     //...
}

当我托管网页时,在会话方法中对密码进行硬编码是否安全?

如果没有,那么一些指针来实现替代方案.

谢谢!

解决方法:

在这种情况下,他无法散列密码.只有在需要CHECKED且未使用时才能对密码进行哈希处理.使用密码(即后端需要登录到SMTP服务器以发送电子邮件,或者到另一个数据库以提取数据)意味着需要知道它.

在这种情况下,有3个级别的替代方案,基本上将不安全因素从代码转移到其他地方.但是在给定相同的程序前提条件的情况下,攻击者将始终能够恢复密码.到达他们的可能性衡量该密码的安全级别.

>在明文中,在配置文件中 – 密码可以存储在
配置文件在文件系统的某个地方;如果它是一个明显的
webapp,它不能是webroot,但在其他地方受到很好的保护
>在配置文件中加密;加密/解密的密钥必须存储在一个
不同的文件,而不是在代码中.这种方法最适用于
这两个文件存储在不同的文件系统中
>在配置文件中加密;不存储加密/解密密钥
在任何文件系统上.它在启动时被询问给运算符
启动申请;检查此密钥是否为
正确的一个(否则,应用程序无法启动),如果是,它
存储在内存中.
> [不是普通人的真正替代方案] HSM硬件安全模块:这种类型的设备以“安全”方式存储密钥和值.这通常意味着服务器(你的
应用程序)有一个物理授予的PCI /硬件模块
连接和检索存储在HSM中的一些密钥.钥匙
用于解密配置文件存储在HSM中并且由于
服务器连接的事实是PCI硬件,它可以
检索该密钥并解密配置文件.

贬低这些解决方案的风险

0–在srcs中硬编码的密码 – >风险与代码检索的简易性有关;即使在C/C++中,反编译提取带编码的字符串并不困难,在Java和.NET中是微不足道的

>配置文件中的密码,明文 – >风险与文件系统中特定文件的检索容易性有关;通常这很难,因为代码在存储库*享,在不同的人之间共享,而托管应用程序的文件系统由较少的人访问
>配置文件中的密码,加密 – >风险与上述相同!我知道这听起来很奇怪,但请相信我:用密钥“关闭”加密密码,或者用明文加密密码是一样的!
>配置文件中的密码,加密,无密钥存储 – >风险与在运行密码的服务器中读取内存的容易性有关.在C/C++中,您需要成为根AFAIK.在Java中,您可以将其作为启动该流程的同一用户.在这两种情况下,它都需要完全访问系统
>配置文件中的密码,加密,HSM中的密钥 – >您必须完全控制服务器(通常是root用户),然后了解HSM必须检索密钥的API.它与完全访问服务器的可能性有关.

当然,从1到3,实现变得更加困难. 4是HSM的api的问题.

上一篇:B22 - 056、Actor实战案例Ⅳ


下一篇:PHP密码强度检查