Random 包生成加密安全的随机值
2024 年 4 月 15 日
这 随机套餐 由 Stephen Rees-Carter 开发,通过简单的 PHP 帮助程序包生成一系列不同格式的加密安全随机值。创建此包的原因如下:
我在安全审计期间(尤其是在较旧的代码库上)经常遇到的问题是不安全的随机性,通常是在需要安全性的地方。它通常使用某种形式
rand(),经常注入内部md5()生成随机散列,结合str_shuffle()生成新密码,或用于制作一次性密码 (OTP)rand(100_000, 999_999)。
问题是
rand()不是加密安全的,也不是mt_rand(),mt_srand(),str_shuffle(),array_rand(),或 PHP 中可用的其他不安全函数。我们不能简单地声明这些方法不安全,然后放下麦克风,然后走开。相反,我们需要提供安全的替代方案 - 所以而不是简单地说“不要使用rand()这样”,我们可以说“这是一个您可以使用的安全方法”!
以下是您可以使用此随机包执行的操作的一些示例:
随机一次性密码(数字固定长度 OTP)
生成 $length 位数的随机数字一次性密码 (OTP):
$otp = Random::otp(int $length): string;
对于生成 SMS 或电子邮件验证码的 OTP 很有用。
随机字符串
生成 $length 字符的随机字符串,其中包括启用的字符类型中的字符。默认情况下,它将随机选择字符,并且不保证存在任何特定的字符类型。如果您需要包含每个字符之一,则可以设置 $requireAll = true。
// Primary method
$string = Random::string(
int $length = 32,
bool $lower = true,
bool $upper = true,
bool $numbers = true,
bool $symbols = true,
bool $requireAll = false
): string;
字符串方法还为常见用例提供了很好的包装器:
// Random letters only
$letters = Random::letters(int $length = 32): string;
// Random alphanumeric (letters and numbers) token string
$token = Random::token(int $length = 32): string;
// Random letters, numbers, and symbols (i.e. a random password).
$password = Random::password(int $length = 16, bool $requireAll = false): string;
// Random alphanumeric token string with chunks separated by dashes, making it easy to read and type.
$password = Random::dashed(int $length = 25, string $delimiter = '-', int $chunkLength = 5, bool $mixedCase = true): string;
随机排列数组、字符串或集合
安全地洗牌数组、字符串或 Laravel 集合,可以选择保留键。
$shuffled = Random::shuffle(
array|string|\Illuminate\Support\Collection $values,
bool $preserveKeys = false
): array|string|\Illuminate\Support\Collection;
和更多
参观 官方包 GitHub 页面上的完整详细信息,还可以查看 公告帖 。
帖子 Random 包生成加密安全的随机值 首先出现在 Laravel 新闻 。
加入 Laravel 时事通讯 直接在您的收件箱中获取所有此类最新的 Laravel 文章。