Учебники

Phalcon — Функции безопасности

Phalcon предоставляет функции безопасности с помощью компонента Security, который помогает выполнять определенные задачи, такие как хеширование паролей и подделка межсайтовых запросов (CSRF).

Хеширование пароля

Хеширование может быть определено как процесс преобразования битовой строки фиксированной длины в указанную длину таким образом, что ее нельзя перевернуть. Любое изменение во входной строке изменит значение хешированных данных.

Расшифровка хешированных данных происходит путем взятия значения, введенного пользователем, в качестве ввода и сравнения его хеш-формы. Обычно для любых веб-приложений хранение паролей в виде простого текста является плохой практикой. Он подвержен сторонним атакам, поскольку те, кто имеет доступ к базе данных, могут легко получить пароли для любого пользователя.

Phalcon предоставляет простой способ хранения паролей в зашифрованном виде, который следует алгоритму, подобному md5, base64 или sh1 .

Как видно из предыдущих глав, где мы создали проект для блогов. Экран входа в систему принимает ввод в качестве имени пользователя и пароля для пользователя. Чтобы получить пароли от пользователя и расшифровать его в определенной форме, используется следующий фрагмент кода.

Затем расшифрованный пароль сопоставляется с паролем, принятым в качестве ввода от пользователя. Если значение совпадает, пользователь может успешно войти в веб-приложение, иначе появится сообщение об ошибке.

<?php  
class UsersController extends Phalcon\Mvc\Controller {  
   public function indexAction() {  
   }  
   public function registerUser() { 
      $user = new Users();  
      $login    = $this->request->getPost("login"); 
      $password = $this->request->getPost("password");
      $user->login = $login;  
      
      // Store the hashed pasword 
      $user->password = $this->security->sh1($password);  
      $user->save(); 
   }  
   public function loginAction() {  
      if ($this->request->isPost()) {  
         $user = Users::findFirst(array( 
            'login = :login: and password = :password:', 
            'bind' => array( 
               'login' => $this->request->getPost("login"), 
               'password' => sha1($this->request->getPost("password")) 
            ) 
         ));  
         if ($user === false) { 
            $this->flash->error("Incorrect credentials"); 
            return $this->dispatcher->forward(array( 
               'controller' => 'users', 
               'action' => 'index' 
            )); 
         }
         $this->session->set('auth', $user->id);  
         $this->flash->success("You've been successfully logged in"); 
      }  
      return $this->dispatcher->forward(array( 
         'controller' => 'posts', 
         'action' => 'index' 
      )); 
   }  
   public function logoutAction() { 
      $this->session->remove('auth'); 
      return $this->dispatcher->forward(array( 
         'controller' => 'posts', 
         'action' => 'index' 
      )); 
   }  
}     

Пароли хранятся в базе данных в зашифрованном формате алгоритма sh1 .

пароль

Как только пользователь вводит соответствующее имя пользователя и пароль, он может получить доступ к системе, в противном случае в качестве проверки отображается сообщение об ошибке.

Проверка

Подделка межсайтовых запросов (CSRF)

Это атака, которая заставляет аутентифицированных пользователей веб-приложения выполнять определенные нежелательные действия. Формы, которые принимают входные данные от пользователей, уязвимы для этой атаки. Phalcon пытается предотвратить эту атаку, защищая данные, которые отправляются через формы вне приложения.

Данные в каждой форме защищены с помощью генерации токенов. Генерируемый токен является случайным и соответствует токену, на который мы отправляем данные формы (в основном вне веб-приложения методом POST).

Код:

<?php echo Tag::form('session/login') ?>  
   <!-- Login and password inputs ... -->  
   <input type = "hidden" name = "<?php echo $this->security->getTokenKey() ?>" 
      value = "<?php echo $this->security->getToken() ?>"/>  
</form> 

Примечание. При отправке токенов формы важно использовать адаптер сеанса, поскольку все данные будут сохраняться в сеансе.

Включите сессионный адаптер в services.php, используя следующий код.