yiisoft/security

安全工具

1.0.2 2024-03-18 12:20 UTC

This package is auto-updated.

Last update: 2024-09-05 06:28:37 UTC


README

Yii

Yii 安全


Latest Stable Version Total Downloads Build status Code Coverage Mutation testing badge static analysis type-coverage

安全包提供了一系列类,用于处理常见的与安全相关的任务

  • 随机值生成
  • 密码散列和验证
  • 加密和解密
  • 数据篡改预防
  • 掩码令牌长度

要求

  • 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 软件 维护。

支持项目

Open Collective

关注更新

Official website Twitter Telegram Facebook Slack