Permalink
Browse files

Merge pull request #1815 from resurtm/ru-i18n

Updated russian blog and guide translations.
[ci skip]
  • Loading branch information...
2 parents 41daec2 + 36bb539 commit 0c3940a04c7275b30a706059f03b89281efb21de @mdomba mdomba committed Dec 6, 2012
Showing with 19 additions and 6 deletions.
  1. +7 −4 docs/blog/ru/prototype.auth.txt
  2. +12 −2 docs/guide/ru/topics.auth.txt
@@ -69,7 +69,10 @@ class UserIdentity extends CUserIdentity
`/wwwroot/blog/protected/models/User.php` как показано ниже. Отметим, что
вместо хранения пароля в БД в явном виде, мы используем хеш от пароля и генерируемого
случайным образом ключа (соли). При проверке введённого пользователем пароля,
-вместо сравнения паролей, мы должны сравнивать хеши.
+вместо сравнения паролей, мы должны сравнивать хеши. Мы используем стандартную
+PHP-функцию `crypt()` для хэширования и проверки пароля. Ознакомьтесь с вики-статьей
+[Use crypt() for password storage](http://www.yiiframework.com/wiki/425), которая
+описывает все подробности работы с данной функцией.
~~~
[php]
@@ -78,12 +81,12 @@ class User extends CActiveRecord
......
public function validatePassword($password)
{
- return $this->hashPassword($password,$this->salt)===$this->password;
+ return crypt($password,$this->password)===$this->password;
}
- public function hashPassword($password,$salt)
+ public function hashPassword($password)
{
- return md5($salt.$password);
+ return crypt($password, $this->generateSalt());
}
}
~~~
@@ -47,7 +47,7 @@ Twitter OAuth или Facebook Connect). При создании своей ре
#### Пример
В приведённом ниже примере мы используем класс identity и покажем, как реализовать
-аутентификацию по базе данных. Данный подход типичен для большинства приложений.
+аутентификацию по базе данных. Данный подход типичен почти для всех приложений.
Пользователь будет вводить логин и пароль в форму. Введённые данные будем проверять
с использованием модели [ActiveRecord](/doc/guide/database.ar), соответствующей
таблице пользователей в БД. В данном примере показано следующее:
@@ -68,7 +68,7 @@ class UserIdentity extends CUserIdentity
$record=User::model()->findByAttributes(array('username'=>$this->username));
if($record===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
- else if($record->password!==md5($this->password))
+ else if($record->password!==crypt($this->password,$record->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
@@ -101,6 +101,16 @@ class UserIdentity extends CUserIdentity
также сохраняться в cookie. Убедитесь, что эти данные не содержат конфиденциальной
информации, такой как пароли.
+### Хранение паролей в базе данных
+
+Безопасное хранение паролей в базе данных требует дополнительных мер предосторожности. Злоумышленник завладевший таблицей пользователей (или её резервной копией) может восстановить пароли при помощи стандартных методов если вы от них не защищаетесь. В частности, вы должны «солить» пароль перед его хэшированием и использовать стойкую хэш-функцию, результат работы которой мог бы занять у злоумышленника продолжительное время на перебор. Приведенный выше пример использует встроенную PHP-функцию `crypt()`, которая при правильном использовании возвращает достаточно устойчивый хэш.
+
+Дополнительные материалы по данной теме:
+
+- Стандартная [PHP-функция `crypt()`](http://php.net/manual/ru/function.crypt.php)
+- Вики-статья [Use crypt() for password storage](http://www.yiiframework.com/wiki/425)
+
+
Вход и выход
------------

0 comments on commit 0c3940a

Please sign in to comment.