PHP 7 OAuthProvider VS random_bytes token 生成

标签 php security random token

我的目标只是生成一个临时 token ,它将在 URL 中用于用户识别,我应该使用 OAuthProvider::generateToken 吗?或 random_bytes

来自这些答案:

Generate a single use token in PHP: random_bytes or openssl_random_pseudo_bytes?

best practice to generate random token for forgot password

openssl_random_pseudo_bytes 相比,random_bytes 似乎是 PHP 7 最近更新的选项。与 OAuthProvider::generateToken 相比是否相同?

例子:

$rb_token = bin2hex(random_bytes($length));
$oa_token = bin2hex((new OAuthProvider())->generateToken($length, TRUE));
// TRUE = strong "/dev/random will be used for entropy"

最佳答案

我会选择 random_bytes(如果您使用 PHP < 7,则存在一个享有盛誉的 polyfill,random_compat)。 /dev/urandom/dev/random 之间的差异对于您的情况可以忽略不计(可以找到更详细的解释 there)。

random_bytes 使用 getrandom 系统调用或 /dev/urandom, ( source code ), 而 OAuthProvider::generateToken() 如果生成的字符串太短( source codesource code of php_mt_rand ),没有强模式似乎会回退到一些不安全的实现。所以 random_bytes 在可用性(无不安全模式)和使用 getrandom 系统调用的系统上具有优势,因为它应该是首选方法(detailled explanation here)。

另一种得出结论的方法是查看一些广泛使用的库:FOSOAuthServer bundle,用于 Symfony 应用程序,uses random_bytes也是。
最后但并非最不重要的一点是,我相信一些 PHP 核心功能也会比扩展得到更多的审查和更好的支持。

关于PHP 7 OAuthProvider VS random_bytes token 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630194/

相关文章:

php - 从 php while 循环生成数组

c# - 如何检查域中是否存在 Windows 用户帐户名?

c# - ASP.NET 和中间人

java.util.Random 深入挖掘

php - SMTP -> 错误 : Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (0)

php - MySQL:查询中的符号

security - 这个 OAuth2 Native 应用程序流程可以被认为是安全的吗?

c# - .NET 的 Random() 的实现更改

java - 一些字符保存到文本文件中而不是生成的随机数

php - 按名称删除表格行