在本节中,我们将回顾以下安全方面
伪随机数据在许多情况下很有用。例如,当通过电子邮件重置密码时,您需要生成一个令牌,将其保存到数据库,并通过电子邮件发送给最终用户,这将允许他们证明对该帐户的所有权。此令牌必须是唯一的,并且难以猜测,否则攻击者可能会预测令牌的值并重置用户的密码。
Yii 安全助手使生成伪随机数据变得简单
$key = Yii::$app->getSecurity()->generateRandomString();
Yii 提供方便的辅助函数,允许您使用密钥加密/解密数据。数据通过加密函数传递,以便只有拥有密钥的人才能解密它。例如,我们需要在数据库中存储一些信息,但我们需要确保只有拥有密钥的用户才能查看它(即使应用程序数据库被泄露)。
// $data and $secretKey are obtained from the form
$encryptedData = Yii::$app->getSecurity()->encryptByPassword($data, $secretKey);
// store $encryptedData to database
随后,当用户想要读取数据时
// $secretKey is obtained from user input, $encryptedData is from the database
$data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $secretKey);
也可以通过 yii\base\Security::encryptByKey() 和 yii\base\Security::decryptByKey() 使用密钥代替密码。
在某些情况下,您需要验证您的数据是否没有被第三方篡改或以某种方式损坏。Yii 提供了一种简单的方法来确认数据完整性,形式为两个辅助函数。
在数据之前添加使用密钥和数据生成的哈希值。
// $secretKey our application or user secret, $genuineData obtained from a reliable source
$data = Yii::$app->getSecurity()->hashData($genuineData, $secretKey);
检查数据完整性是否已被破坏。
// $secretKey our application or user secret, $data obtained from an unreliable source
$data = Yii::$app->getSecurity()->validateData($data, $secretKey);
发现错别字或您认为此页面需要改进吗?
在 github 上编辑它 !
如果您将此数据作为表单中的隐藏字段传递,然后再次检查它,请在 encryptByPassword 和 decryptByPassword 之上使用 StringHelper::base64UrlEncode 和 StringHelper::base64UrlDecode 函数。否则,字符串将无法正确传递回来,并且 decryptByPassword 将导致值为“false”。
注册 或 登录 以发表评论。