Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance 唯一用户ID(在[0..N]范围内创建)的长度应足够长,以确保安全_Performance_Algorithm_Security_Validation - Fatal编程技术网

Performance 唯一用户ID(在[0..N]范围内创建)的长度应足够长,以确保安全

Performance 唯一用户ID(在[0..N]范围内创建)的长度应足够长,以确保安全,performance,algorithm,security,validation,Performance,Algorithm,Security,Validation,一个人成功注册后(输入电子邮件地址,创建密码)会收到一个生成的(因此很难猜测上一个或下一个)唯一id-一个从0到N的大数字。因此,成功注册后,我们为每个用户提供3件事:唯一电子邮件、密码哈希和生成的唯一id(0和N之间的整数)。电子邮件、密码哈希和id存储在数据库中 问题是:N应该有多大,这样猜测一个有效id的概率就等于猜测一个密码(对于任何给定的电子邮件地址)。(密码只能包含大写和小写字母、数字、8+符号,如果这很重要的话。)所以,我想要的就是拥有难以猜测的id 假设注册用户不超过10000(

一个人成功注册后(输入电子邮件地址,创建密码)会收到一个生成的(因此很难猜测上一个或下一个)唯一id-一个从0到N的大数字。因此,成功注册后,我们为每个用户提供3件事:唯一电子邮件、密码哈希和生成的唯一id(0和N之间的整数)。电子邮件、密码哈希和id存储在数据库中

问题是:N应该有多大,这样猜测一个有效id的概率就等于猜测一个密码(对于任何给定的电子邮件地址)。(密码只能包含大写和小写字母、数字、8+符号,如果这很重要的话。)所以,我想要的就是拥有难以猜测的id

假设注册用户不超过10000(取决于数字N)。现在至少有多少位数字应该包含一个数字N(0..N是长数字的唯一范围)

我的算法是否足够好,公平,糟糕还是非常糟糕? 如果我把这个问题贴错了帖子,请让我知道,这样下次我就没事了

另外,当用户成功登录时,db中的id将应用于会话变量。 所有为用户提取个人数据的sql请求,将该id与该会话变量进行比较(因此我们现在要提取谁的数据):


谢谢。

为什么它必须是一个特定的大小?为什么你没有一个自动递增的唯一id并使用它?可能是一个主键。只要你正确设置了表,任何SQL数据库都应该能够几乎自动地管理它。

为什么它必须是一个特定的大小?为什么你没有一个自动递增的id校正唯一id并使用它?可能是一个主键。只要您正确设置表,任何SQL数据库都应该能够几乎自动地管理该id。

如果您将精力放在安全性上,它应该关注密码,而不是用户id。

如果您将精力放在安全性上,它应该关注密码a而不是用户id。

您可以使用字符串代替数字,类似于
UUID的东西应该很难猜测

>>> import uuid
>>> str(uuid.uuid4()).replace('-', '')
'71dca6b8e3fb41708f93372171f53b9f'
>>>

您可以使用字符串而不是数字,类似于
UUID
的东西应该很难猜测

>>> import uuid
>>> str(uuid.uuid4()).replace('-', '')
'71dca6b8e3fb41708f93372171f53b9f'
>>>

为了使数字不比密码更容易猜测,如果偏执用户或程序通过从所有可能的密码集中随机生成密码来选择密码,则需要将数字设置为最小值(可能的密码数、可能的密码哈希数)。如果您在使用号码时没有提及用户名,则您还需要确保该号码具有唯一性,并且很可能是唯一的-请参阅


在实践中,已知计算机系统使用128位甚至64位数字作为可猜测的令牌。另一种方法是考虑攻击者每秒能做出多少猜测,并考虑用多长时间来猜测一个64位或128位的数字。HREATED。(RSA使用的较长密钥是必要的,因为有比逐个猜测数字更好的猜测RSA私钥的方法).

为了使数字不比密码更容易猜测,如果偏执狂用户或程序通过从所有可能的密码集中真实随机生成密码来选择密码,则需要将数字设置为最小值(可能的密码数、可能的密码哈希数)。如果您在使用号码时没有提及用户名,则您还需要确保该号码具有唯一性,并且很可能是唯一的-请参阅


在实践中,已知计算机系统使用128位甚至64位数字作为可猜测的令牌。另一种方法是考虑攻击者每秒能做出多少猜测,并考虑用多长时间来猜测一个64位或128位的数字。危险。(RSA使用的较长密钥是必要的,因为有更好的方法来猜测RSA私钥,而不是逐个猜测数字)。

通常不回答特定长度是否足够安全。这取决于它的安全程度(因此,如果猜测数字,您的系统有多脆弱)以及您能负担多大的数字(为什么要将其变小(且不太安全),然后才是必要的?)。尽管从您的描述中,我不明白为什么id应该是安全的。用户是否有任何方法放置一个特定的(不是通过正常方式从db检索的)id会话中的id?如果不是,为什么不使用自动递增的id?不幸的是,我不是黑客,我对web浏览器漏洞不太了解。这就是我问的原因。请您确认(非常高级的用户能够更改其会话id)的机会是空的吗?你可能是对的,可能性是空的,但我不知道真正的答案(我是新手)。它几乎肯定不是空的,但是只要它只存储在db和$\u会话中,就不会离开服务器(假设db和脚本在同一台服务器上),所以它是安全的。在服务器端数据泄露的情况下,让用户ID难以猜测似乎很愚蠢,因为让服务器端数据更安全更有意义。但无意冒犯,设计安全系统(我假设登录?)不知道自己在做什么是一个坏主意,所以如果你想建立一个合理的安全系统,我真的建议你在尝试之前尽可能多地阅读它,当你尽可能多地谈论readin gas时?对于安全目的来说,特定长度是否足够好通常不需要回答。这取决于安全程度