一次性密码安全风险

Gop*_*pal 5 java security web

我们正在开发一个 Web 应用程序,用户必须输入一个一次性密码(我们通过电子邮件发送给用户)才能完成操作。然而,如果恶意用户开发了一个机器人并猜测我们生成一次性密码的模式,他可以输入一些随机的电子邮件 ID,甚至不看电子邮件就可以确认交易。这样他就可以用错误的确认来攻击系统。有人可以让我们知道人们如何处理这个问题吗?

谢谢

aio*_*obe 3

如果您的随机一次性密码与常规密码具有相同的熵,那么这应该与任何其他密码解决方案一样好。

这是一个示例密码生成片段,它应该是相当不可预测的:

import java.security.SecureRandom;
import java.util.Random;

class Test {

    public static String generatePassword() {
        String chars = "abcdefghijklmnopqrstuvwxyz"
                     + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                     + "0123456789!@%$%&^?|~'\"#+="
                     + "\\*/.,:;[]()-_<>";

        final int PW_LENGTH = 20;
        Random rnd = new SecureRandom();
        StringBuilder pass = new StringBuilder();
        for (int i = 0; i < PW_LENGTH; i++)
            pass.append(chars.charAt(rnd.nextInt(chars.length())));
        return pass.toString();
    }

    public static void main(String[] args) {
        System.out.println(generatePassword());
        System.out.println(generatePassword());
        System.out.println(generatePassword());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Qp';Md#93Dxh\0|%%Ny7
oqvntn2).~W@%P'EM*AS
WEo2sz2Sm~a'm=Ss&Lu[

  • @Gopal 不是用户不必输入“一次性”密码的重点吗?要么是复制/粘贴,要么是嵌入到 URL 中。由于它只能使用一次,因此在单击链接后它可能会显示在日志文件或其他任何内容中,这并不重要。它只能工作一次。 (3认同)