gpt4 book ai didi

Perl 为高流量生成随机 session ID

转载 作者:行者123 更新时间:2023-12-01 23:53:30 25 4
gpt4 key购买 nike

我正在尝试为 Perl 中的每个用户 session 生成 session cookie 的随机 ID。当然,我搜索了 cpan 和 google,发现了许多相似的主题和相同的弱点。使用最多的模块是Digest::SHAData::UUID和模块 Data::GUID它在内部使用 Data::UUID。

下面是我总结的cpan上模块中使用最多的方法的代码:

#!/usr/bin/perl

use v5.10;

use Digest::SHA;
use Data::UUID;
use Data::GUID;# uses Data::UUID internally, so no need for it
use Time::HiRes ();

for (1..10) {
#say generate_sha(1); # 1= 40 bytes, 256=64 bytes, 512=128 bytes, 512224, 512256
say generate_uuid();
#say generate_guid();
}

sub generate_sha {
my ($bits) = @_;
# SHA-1/224/256/384/512
return Digest::SHA -> new($bits) -> add($$, +{}, Time::HiRes::time(), rand(Time::HiRes::time()) ) -> hexdigest;
}

sub generate_uuid {
return Data::UUID->new->create_hex(); #create_str, create_b64
}

sub generate_guid {
# uses Data::UUID internally
return Data::GUID->guid;
}

这是 Data::UUID 模块的示例输出形式:

0x0217C34C6C0710149FE4C7FBB6FA663B
0x0218665F6C0710149FE4C7FBB6FA663B
0x0218781A6C0710149FE4C7FBB6FA663B
0x021889316C0710149FE4C7FBB6FA663B
0x021899E16C0710149FE4C7FBB6FA663B
0x0218AB2B6C0710149FE4C7FBB6FA663B
0x0218BB1D6C0710149FE4C7FBB6FA663B
0x0218CABD6C0710149FE4C7FBB6FA663B
0x0218DB786C0710149FE4C7FBB6FA663B
0x0218ED396C0710149FE4C7FBB6FA663B

从这些生成的 id 似乎是唯一的,但我关心的是高流量或并发性,比如说如果 1000 只是不说 1000,000 个用户同时连接,或者来自相同的进程,比如运行在FCGI(假设每个 FCGI 进程仅服务 10 个用户)或来自单独的进程,如在 CGI 模式下运行。

在 SHA 中我使用了这个随机字符串:

($$, +{}, Time::HiRes::time(), rand(Time::HiRes::time())

它包括匿名散列引用地址和以微秒为单位的当前时间 Time::HiRes::time .有没有其他方法可以制作随机字符串。

我已阅读主题以添加远程用户的主机名和 IP 地址,但其他人说可以使用代理。

我看到 Plack::Session::State模块使用这个简单的代码来生成 id:

Digest::SHA1::sha1_hex(rand() . $$ . {} . time)

所以简而言之,我想生成一个唯一的问题可能是长达 64 字节的 session ID 保证在高流量下工作。

最佳答案

您可以安全地使用 Data::UUID 并且您不必担心重复项,您不会遇到它们。

另外 rand() 在随后调用时不会返回相同的数字,即使假设它是在同一时刻调用的。伪随机算法根据其当前状态和先前生成的值生成下一个数字。真随机数生成器一般不单独使用,而是与伪随机数生成器结合使用。在这两种情况下,随后生成的数字在最近的时钟滴答之间重复的可能性实际上可以忽略不计。在您的示例中,您可能希望使用 rand(2**32)

关于Perl 为高流量生成随机 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com