В этом разделе мы рассмотрим следующие аспекты безопасности:
- Генерация случайных данных
- Шифрование и дешифрование
- Подтверждение целостности данных
Генерирование псевдослучайных данных
Псевдослучайные данные полезны во многих ситуациях. Например, когда вы сбрасываете пароль по электронной почте, вам нужно сгенерировать токен, сохранить его в базе данных и отправить по электронной почте конечному пользователю, что, в свою очередь, позволит им подтвердить право собственности на эту учетную запись. Очень важно, чтобы этот токен был уникальным и трудно угадываемым, иначе существует вероятность того, что злоумышленник сможет предсказать значение маркера и сбросить пароль пользователя.
Помощник по безопасности 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);
0 комментариев