Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现HttpSession密钥的生成_Java_Security_Cookies_Random_Httpsession - Fatal编程技术网

Java 实现HttpSession密钥的生成

Java 实现HttpSession密钥的生成,java,security,cookies,random,httpsession,Java,Security,Cookies,Random,Httpsession,我正在尝试实现一代HttpSession密钥 我正在生成一个介于1000000到999999之间的随机数,并将其作为cookie发送给用户 是否有可能使此过程安全? 任何人都可以做出这样的随机数,并尝试访问我的服务器…也许我需要更大的范围 另一个问题是,如何生成我以前没有生成过的数字?现在,每次使用该数字时,我都会重新生成,是否有可能以更好的方式执行此操作?使用一个。明确地关于冲突的可能性。听起来很像是在尝试实现一些基本的身份验证。要尝试的东西(伪代码;我对web上的Java不太在行): 当您想

我正在尝试实现一代HttpSession密钥

我正在生成一个介于1000000到999999之间的随机数,并将其作为cookie发送给用户

是否有可能使此过程安全? 任何人都可以做出这样的随机数,并尝试访问我的服务器…也许我需要更大的范围


另一个问题是,如何生成我以前没有生成过的数字?现在,每次使用该数字时,我都会重新生成,是否有可能以更好的方式执行此操作?

使用一个。明确地关于冲突的可能性。

听起来很像是在尝试实现一些基本的身份验证。要尝试的东西(伪代码;我对web上的Java不太在行):

当您想要检查随机数是否有效时,只需将所有碎片拉回到一起,并将其与令牌进行比较:

random_number = getcookie("random_number");
secret = "Some random text here";
timestamp = int(getcookie("timestamp"));
user_ip = users_ip(); // Get the user's IP
token = sha256(random_number + secret + timestamp + ip);

if(unix_timestamp() - timestamp < 0 || unix_timestamp() - timestamp > timeout) {
    // The token is more than an hour old; it might have been stolen.
}
if(token == getcookie("token")) {
    // The user is valid
} else {
    // The user is invalid
}
random_number=getcookie(“random_number”);
secret=“此处有一些随机文本”;
timestamp=int(getcookie(“timestamp”);
user_ip=users_ip();//获取用户的IP地址
令牌=sha256(随机数+秘密+时间戳+ip);
if(unix_timestamp()-timestamp<0 || unix_timestamp()-timestamp>timeout){
//这枚代币已有一个多小时了,可能是被偷的。
}
if(token==getcookie(“token”)){
//用户是有效的
}否则{
//该用户无效
}
此代码将通过确保随机数来自同一IP阻止某人对其进行欺骗。您还可以使用时间戳来确保用户的会话随着时间的推移而过期。这将阻止黑客简单地生成一个好的数字并永远使用它

至于秘密,那是一个随机的文本块。它应该是完全随机的,永远不要共享。它基本上使您的令牌几乎不可能进行反向工程(否则,您需要尝试“数字时间戳ip”、“ip数字时间戳”等组合)

还应该注意的是,使用HMAC可以更好地完成类似的工作,但对于您正在寻找的工作来说,这可能有点过头了。这个解决方案会做得非常好

希望这有帮助

编辑


需要注意的是,您的秘密必须相同,才能进行验证。

我也问了自己同样的问题,并在这里找到了一个很好的答案:

你最好阅读更多关于RFC4122的内容,看看这是否是你的意思。。 我将这个伪代码用于NodeJS项目,它完成了这项工作


顺便说一句:为了安全起见,您需要7个以上的数字。

为什么在Java中选择这种手动方式而不是UUID是一个完全的谜。注意不要使用加密强伪随机数生成器。
random_number = getcookie("random_number");
secret = "Some random text here";
timestamp = int(getcookie("timestamp"));
user_ip = users_ip(); // Get the user's IP
token = sha256(random_number + secret + timestamp + ip);

if(unix_timestamp() - timestamp < 0 || unix_timestamp() - timestamp > timeout) {
    // The token is more than an hour old; it might have been stolen.
}
if(token == getcookie("token")) {
    // The user is valid
} else {
    // The user is invalid
}