Spec-Zone.ru › Yii 2.0

Криптография

  1. Генерация псевдослучайных данных
  2. Шифрование и дешифрование
  3. Проверка целостности данных

В этом разделе мы рассмотрим следующие аспекты безопасности:

  • Генерация случайных данных
  • Шифрование и дешифрование
  • Проверка целостности данных

Генерация псевдослучайных данных

Псевдослучайные данные полезны во многих ситуациях. Например, при сбросе пароля по электронной почте необходимо сгенерировать токен, сохранить его в базу данных и отправить его по электронной почте конечному пользователю, что, в свою очередь, позволит ему доказать владение этим аккаунтом. Очень важно, чтобы этот токен был уникальным и трудно угадываемым, иначе существует возможность, что злоумышленник сможет предсказать значение токена и сбросить пароль пользователя.

Помощник безопасности 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);

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-security-cryptography.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API