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