mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-08 00:47:55 +08:00
Translate security passwords to russian
This commit is contained in:
@ -109,7 +109,7 @@ All Rights Reserved.
|
|||||||
|
|
||||||
* [Аутентификация](security-authentication.md)
|
* [Аутентификация](security-authentication.md)
|
||||||
* **TBD** [Авторизация](security-authorization.md)
|
* **TBD** [Авторизация](security-authorization.md)
|
||||||
* **TBD** [Работа с паролями](security-passwords.md)
|
* [Работа с паролями](security-passwords.md)
|
||||||
* **TBD** [Клиенты авторизации](security-auth-clients.md)
|
* **TBD** [Клиенты авторизации](security-auth-clients.md)
|
||||||
* **TBD** [Лучшие практики](security-best-practices.md)
|
* **TBD** [Лучшие практики](security-best-practices.md)
|
||||||
|
|
||||||
|
|||||||
153
docs/guide-ru/security-passwords.md
Normal file
153
docs/guide-ru/security-passwords.md
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
Работа с паролями
|
||||||
|
=================
|
||||||
|
|
||||||
|
> Примечание: этот раздел находится на стадии разработки.
|
||||||
|
|
||||||
|
Хорошая безопасность является жизненно важной для здоровья и успеха любого приложения.
|
||||||
|
К сожалению, многие разработчики предпочитают срезать углы, когда речь заходит о безопасности,
|
||||||
|
либо из-за отсутствия понимания или потому, что считают реализацию слишком сложным.
|
||||||
|
Для того, чтобы сделанное вами на Yii приложение было как можно более безопасным, Yii включает несколько удобных
|
||||||
|
и простых в использовании функции обеспечения безопасности.
|
||||||
|
|
||||||
|
|
||||||
|
Hashing and Verifying Passwords
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Многие разработчики знают, что хранить пароль открытым текстом нельзя, но многие до сих пор считают безопасным
|
||||||
|
использование для хеширование паролей `md5` или `sha1`. Раньше упомянутых алгоритмов было достаточно, но современное
|
||||||
|
оборудование позволяет подобрать эти хеши очень быстро, используя метод грубой силы.
|
||||||
|
|
||||||
|
Для того, чтоб обеспечить повышенную безопасность паролей ваших пользователей даже в худшем случае (ваше
|
||||||
|
приложение взломано), нужно использовать алгоритм шифрования, устоичивый к атаке перебором. Лучший вариант в текущий
|
||||||
|
момент `bcrypt`. В PHP вы можете использовать хеши `bcrypt` используя [функцию crypt](http://php.net/manual/en/function.crypt.php).
|
||||||
|
Yii обеспечивает две вспомогательные функции, которые делают использование функции `crypt` для генерации и проверки
|
||||||
|
пароля более простым.
|
||||||
|
|
||||||
|
Когда пользователь передаёт пароль первый раз (например во время регистрации), пароль должен быть захеширован:
|
||||||
|
|
||||||
|
|
||||||
|
```php
|
||||||
|
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
|
||||||
|
```
|
||||||
|
|
||||||
|
Хешь может быть связан с соответствующим аттрибутом модели, так что он может быть сохранён в базе для последующего использования.
|
||||||
|
|
||||||
|
Когда пользователь попытается войти, отправленый пароль должен быть хеширован и сравнён с ранее сохранённым хешем:
|
||||||
|
|
||||||
|
|
||||||
|
```php
|
||||||
|
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
|
||||||
|
// all good, logging user in
|
||||||
|
} else {
|
||||||
|
// wrong password
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Генерация псевдослучайных данных
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Псевдослучайные данные полезны во многих ситуациях. Например, для сброса пароля с помощью электронной почты
|
||||||
|
вам необходимо сгенерировать специальный токен, сохранить его в БД, и отправить его по почте конечному пользователю,
|
||||||
|
который в свою очередь подтвердит им свою личность. Очень важно, что этот маркер должен быть уникальным и сложно
|
||||||
|
подделываемым, чтоб злоумышленник не мог предсказать токен и сбросить пароль пользователя.
|
||||||
|
|
||||||
|
Хелпер безопасности Yii делает генерацию псевдослучайных данных простой:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$key = Yii::$app->getSecurity()->generateRandomString();
|
||||||
|
```
|
||||||
|
|
||||||
|
Обратите внимание, что у вас должно быть установлено расширение `openssl` для генерации криптографически безопасных данных.
|
||||||
|
|
||||||
|
Шифрование и Дешифровка
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Yii предоставляет удобные вспомогательные функции, которые позволяют шифровать/дешифровать данные используя секретный ключ.
|
||||||
|
Данные переданные в функцию шифрования могут быть расшифрованы только человеком имеющим секретный ключ. Например, нам
|
||||||
|
нужно хранить некоторую информацию в базе данных, но мы должны убедиться, что только пользователь, который имеет
|
||||||
|
секретный ключ сможет посмотреть их (даже если база данных будет скомпрометирована):
|
||||||
|
|
||||||
|
```php
|
||||||
|
// $data и $secretKey передаются из формы
|
||||||
|
$encryptedData = Yii::$app->getSecurity()->encryptByPassword($data, $secretKey);
|
||||||
|
// сохраняем $encryptedData в базу данных
|
||||||
|
```
|
||||||
|
|
||||||
|
Позднее, когда пользователь захочет прочитать данные:
|
||||||
|
|
||||||
|
```php
|
||||||
|
// $secretKey получается из формы, $encryptedData получается из базы данных
|
||||||
|
$data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $secretKey);
|
||||||
|
```
|
||||||
|
|
||||||
|
Подтверждение целостности данных
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Есть ситуации, в которых вам нужно убедится, что ваши данные не были подделаны третьей стороной, или как-то повреждены.
|
||||||
|
Yii обеспечивает простой способ подтверждения целостности данных в виде двух вспомогательных функций.
|
||||||
|
|
||||||
|
Префикс данных генерируются из секретного ключа и данных
|
||||||
|
|
||||||
|
```php
|
||||||
|
// $secretKey получается от приложения или от пользователя, $genuineData получаются из надёжного источника
|
||||||
|
$data = Yii::$app->getSecurity()->hashData($genuineData, $secretKey);
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка целостности данных
|
||||||
|
|
||||||
|
```php
|
||||||
|
// $secretKey получается от приложения или от пользователя, $data данные полученные из ненадёжного источника
|
||||||
|
$data = Yii::$app->getSecurity()->validateData($data, $secretKey);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
todo: предотвращение XSS, CSRF, защита cookie, смотрите руководство 1.1
|
||||||
|
|
||||||
|
Вы также можете отключить проверку CSRF для контроллера и/или действия, через настройку его свойства:
|
||||||
|
|
||||||
|
```php
|
||||||
|
namespace app\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
class SiteController extends Controller
|
||||||
|
{
|
||||||
|
public $enableCsrfValidation = false;
|
||||||
|
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
// CSRF валидация не будет проводится для этого и других действий
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Чтобы отключить проверку CSRF в отдельном действии:
|
||||||
|
|
||||||
|
```php
|
||||||
|
namespace app\controllers;
|
||||||
|
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
class SiteController extends Controller
|
||||||
|
{
|
||||||
|
public function beforeAction($action)
|
||||||
|
{
|
||||||
|
// ...установите здесь `$this->enableCsrfValidation` в зависимости от каких-то условий...
|
||||||
|
// вызываем родительский метод для проверки CSRF если свойство установлено в `true`
|
||||||
|
return parent::beforeAction($action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Безопасные Cookies
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- валидация
|
||||||
|
- httpOnly по умолчанию
|
||||||
|
|
||||||
|
Смотрите также
|
||||||
|
--------------
|
||||||
|
|
||||||
|
- [Безопасность представлений](structure-views.md#security)
|
||||||
|
|
||||||
Reference in New Issue
Block a user