Phalcon - Güvenlik Özellikleri

Phalcon, parola hashing gibi belirli görevleri yerine getirmeye yardımcı olan Güvenlik bileşeni yardımıyla güvenlik özellikleri sağlar. Cross-Site Request Forgery (CSRF).

Hashing Parolası

Hashingsabit uzunlukta bir bit dizisini, tersine çevrilemeyecek şekilde belirli bir uzunluğa dönüştürme işlemi olarak tanımlanabilir. Giriş dizesindeki herhangi bir değişiklik, hashing uygulanmış verilerin değerini değiştirecektir.

Karma verilerin şifresinin çözülmesi, kullanıcı tarafından girilen değerin girdi olarak alınması ve bunun karma formunun karşılaştırılmasıyla gerçekleşir. Genellikle web tabanlı uygulamalar için parolaları düz metin olarak saklamak kötü bir uygulamadır. Veritabanına erişimi olanlar herhangi bir kullanıcı için kolayca parola temin edebildiğinden, üçüncü taraf saldırılarına açıktır.

Phalcon, şifreleri şifrelenmiş biçimde saklamanın kolay bir yolunu sağlar ve md5, base64 veya sh1.

Bloglar için bir proje oluşturduğumuz önceki bölümlerde görüldüğü gibi. Giriş ekranı, girişi kullanıcı için kullanıcı adı ve şifre olarak kabul eder. Kullanıcıdan şifreleri almak ve şifresini belirli bir biçimde çözmek için aşağıdaki kod parçacığı kullanılır.

Şifresi çözülen şifre daha sonra kullanıcıdan girdi olarak kabul edilen şifre ile eşleştirilir. Değer eşleşirse, kullanıcı web uygulamasında başarıyla oturum açabilir, aksi takdirde bir hata mesajı görüntülenir.

<?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' 
      )); 
   }  
}

Veritabanında saklanan şifreler şifrelenmiş bir formattadır. sh1 algoritması.

Kullanıcı uygun bir kullanıcı adı ve şifreyi girdiğinde, kullanıcı sisteme erişebilir, aksi takdirde doğrulama olarak bir hata mesajı görüntülenir.

Siteler Arası İstek Sahteciliği (CSRF)

Web uygulamasının kimliği doğrulanmış kullanıcılarını belirli istenmeyen eylemleri gerçekleştirmeye zorlayan bir saldırıdır. Kullanıcılardan girdi alan formlar bu saldırıya karşı savunmasızdır. Phalcon, uygulama dışındaki formlar aracılığıyla gönderilen verileri koruyarak bu saldırıyı önlemeye çalışır.

Her formdaki veriler, token oluşturma yardımıyla güvence altına alınır. Oluşturulan jeton rastgele ve form verilerini gönderdiğimiz jetonla eşleştirilir (çoğunlukla POST yöntemi aracılığıyla web uygulamasının dışında).

Kod:

<?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>

Note - Tüm veriler oturumda tutulacağından, form belirteçleri gönderirken oturum bağdaştırıcısının kullanılması önemlidir.

Oturum adaptörünü dahil et services.php aşağıdaki kodu kullanarak.

/** 
   * Start the session the first time some component request the session service 
*/ 

$di->setShared('session', function () { 
   $session = new SessionAdapter(); 
   $session->start();  
   return $session; 
});