From d3bccde5a3c1be7d48adee4bc7d629f072e93c64 Mon Sep 17 00:00:00 2001 From: miramir Date: Sun, 10 May 2015 18:37:42 +0500 Subject: [PATCH] Translate security passwords to russian --- docs/guide-ru/README.md | 2 +- docs/guide-ru/security-passwords.md | 153 ++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 docs/guide-ru/security-passwords.md diff --git a/docs/guide-ru/README.md b/docs/guide-ru/README.md index 3a9e94eda2..70e327bc47 100644 --- a/docs/guide-ru/README.md +++ b/docs/guide-ru/README.md @@ -109,7 +109,7 @@ All Rights Reserved. * [Аутентификация](security-authentication.md) * **TBD** [Авторизация](security-authorization.md) -* **TBD** [Работа с паролями](security-passwords.md) +* [Работа с паролями](security-passwords.md) * **TBD** [Клиенты авторизации](security-auth-clients.md) * **TBD** [Лучшие практики](security-best-practices.md) diff --git a/docs/guide-ru/security-passwords.md b/docs/guide-ru/security-passwords.md new file mode 100644 index 0000000000..2527e8d489 --- /dev/null +++ b/docs/guide-ru/security-passwords.md @@ -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) +