mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37: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