yiisoft / security
安全工具
1.0.2
2024-03-18 12:20 UTC
Requires
- php: ^7.4|^8.0
- ext-hash: *
- ext-openssl: *
- yiisoft/strings: ^2.0
Requires (Dev)
- maglnet/composer-require-checker: ^3.8|^4.2
- phpunit/phpunit: ^9.5
- rector/rector: ^1.0.0
- roave/infection-static-analysis-plugin: ^1.16
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.23
This package is auto-updated.
Last update: 2024-09-05 06:28:37 UTC
README
Yii 安全
安全包提供了一系列类,用于处理常见的与安全相关的任务
- 随机值生成
- 密码散列和验证
- 加密和解密
- 数据篡改预防
- 掩码令牌长度
要求
- PHP 8.0 或更高版本。
hash
PHP 扩展。openssl
PHP 扩展。random
PHP 扩展。
安装
可以使用 Composer 安装此包
composer require yiisoft/security
通用用法
随机值生成
为了生成一个42字符长的字符串,使用
$randomString = Random::string(42);
以下是通过 PHP 直接可用的一些额外功能
random_bytes()
用于字节。注意,输出可能不是 ASCII。random_int()
用于整数。
密码散列和验证
与密码一起工作包括两个步骤。保存密码散列
$hash = (new PasswordHasher())->hash($password); // save hash to database or another storage saveHash($hash);
验证密码与散列是否匹配
// obtain hash from database or another storage $hash = getHash(); $result = (new PasswordHasher())->validate($password, $hash);
通过密码进行加密和解密
加密数据
$encryptedData = (new Crypt())->encryptByPassword($data, $password); // save data to database or another storage saveData($encryptedData);
解密它
// obtain encrypted data from database or another storage $encryptedData = getEncryptedData(); $data = (new Crypt())->decryptByPassword($encryptedData, $password);
通过密钥进行加密和解密
加密数据
$encryptedData = (new Crypt())->encryptByKey($data, $key); // save data to database or another storage saveData($encryptedData);
解密它
// obtain encrypted data from database or another storage $encryptedData = getEncryptedData(); $data = (new Crypt())->decryptByKey($encryptedData, $key);
数据篡改预防
MAC签名可用于防止数据篡改。密钥 $key
应在发送和接收端都存在。在发送端
$signedMessage = (new Mac())->sign($message, $key); sendMessage($signedMessage);
在接收端
$signedMessage = receiveMessage($signedMessage); try { $message = (new Mac())->getMessage($signedMessage, $key); } catch (\Yiisoft\Security\DataIsTamperedException $e) { // data is tampered }
掩码令牌长度
掩码令牌有助于通过随机化每个请求输出的令牌来减轻BREACH攻击。将随机掩码应用于令牌,使字符串始终保持唯一。
为了掩码令牌
$maskedToken = \Yiisoft\Security\TokenMask::apply($token);
为了从掩码中获取原始值
$token = \Yiisoft\Security\TokenMask::remove($maskedToken);
原生PHP功能
除了本库方法外,还有一系列方便的原生PHP方法。
计时攻击抵抗的字符串比较
在处理用户输入的密码或密钥短语时,通常的字符串比较是不安全的。通常的字符串比较在找到字符串之间的差异时立即返回,因此攻击者可以有效地逐字符进行暴力破解,一旦响应时间增加,就转到下一个字符。
PHP中有一个特殊函数可以以恒定时间比较字符串
hash_equals($expected, $actual);
文档
如果您需要帮助或有问题,Yii 论坛 是一个好去处。您还可以查看其他 Yii 社区资源。
许可证
Yii 安全是免费软件。它根据BSD许可证发布。有关更多信息,请参阅 LICENSE
。
由 Yii 软件 维护。