CakePHP - Güvenlik

Güvenlik, web uygulamaları oluştururken bir diğer önemli özelliktir. Web sitesinin kullanıcılarına verilerinin güvende olduğunu garanti eder. CakePHP, uygulamanızı güvenli hale getirmek için bazı araçlar sağlar.

Şifreleme ve Şifre Çözme

CakePHP'deki güvenlik kitaplığı, verileri şifreleyebileceğimiz ve şifresini çözebileceğimiz yöntemler sağlar. Aşağıdakiler aynı amaç için kullanılan iki yöntemdir.

static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null)
static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)

Şifreleme yöntemi, verileri şifrelemek için bağımsız değişken olarak metin ve anahtarı alacak ve dönüş değeri, HMAC sağlama toplamı ile şifrelenmiş değer olacaktır.

Bir veriye hashing uygulamak için, hash()yöntem kullanılır. Hash () yönteminin sözdizimi aşağıdadır.

static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)

CSRF

CSRF kısaltması Cross Site Request Forgery. CSRF Bileşenini etkinleştirerek, saldırılara karşı koruma elde edersiniz. CSRF, web uygulamalarında yaygın bir güvenlik açığıdır.

Bir saldırganın önceki bir isteği yakalayıp yeniden oynatmasına ve bazen diğer etki alanlarındaki resim etiketlerini veya kaynakları kullanarak veri talepleri göndermesine olanak tanır. CSRF, yalnızca şunu ekleyerek etkinleştirilebilir:CsrfComponent aşağıda gösterildiği gibi bileşenler dizinize -

public function initialize(): void {
   parent::initialize();
   $this->loadComponent('Csrf');
}

CsrfComponent, aşağıdakilerle sorunsuz bir şekilde bütünleşir: FormHelper. FormHelper ile her form oluşturduğunuzda, CSRF belirtecini içeren gizli bir alan ekler.

Bu tavsiye edilmese de, belirli isteklerde CsrfComponent'i devre dışı bırakmak isteyebilirsiniz. Bunu, denetleyicinin olay dağıtıcısını kullanarak yapabilirsiniz.beforeFilter() yöntem.

public function beforeFilter(Event $event) {
   $this->eventManager()->off($this->Csrf);
}

Güvenlik Bileşeni

Güvenlik Bileşeni, uygulamanıza daha sıkı güvenlik uygular. Aşağıdaki gibi çeşitli görevler için yöntemler sağlar:

  • Restricting which HTTP methods your application accepts- Yan etkileri çalıştırmadan önce kullanılan HTTP yöntemini her zaman doğrulamalısınız. HTTP yöntemini kontrol etmeli veya kullanmalısınızCake\Network\Request::allowMethod() doğru HTTP yönteminin kullanıldığından emin olmak için.

  • Form tampering protection- Varsayılan olarak, SecurityComponent, kullanıcıların belirli şekillerde formlara müdahale etmesini engeller. SecurityComponent aşağıdakileri engelleyecektir -

    • Forma bilinmeyen alanlar eklenemez.

    • Alanlar formdan çıkarılamaz.

    • Gizli girişlerdeki değerler değiştirilemez.

  • Requiring that SSL be used - SSL güvenliğini gerektiren tüm işlemler

  • Limiting cross controller communication- Hangi denetleyicinin bu denetleyiciye istek gönderebileceğini kısıtlayabiliriz. Bu denetleyicinin eylemine hangi eylemlerin istek gönderebileceğini de kısıtlayabiliriz.

Misal

Değişiklik yapın config/routes.php dosya aşağıdaki programda gösterildiği gibi.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',
      ['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('login',['controller'=>'Logins','action'=>'index']);
   $builder->fallbacks();
});

Oluşturmak LoginsController.php dosya src/Controller/LoginsController.php. Aşağıdaki kodu denetleyici dosyasında kopyalayın.

src/Controller/LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class LoginsController extends AppController {
      public function initialize() : void {
         parent::initialize();
         $this->loadComponent('Security');
      }
         public function index(){
      }
   }
?>

Bir dizin oluşturun Logins -de src/Template ve bu dizinin altında bir Viewindex.php adlı dosya. Aşağıdaki kodu o dosyaya kopyalayın.

src/Template/Logins/index.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/login'));
   echo $this->Form->control('username');
   echo $this->Form->control('password');
   echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

Aşağıdaki URL'yi ziyaret ederek yukarıdaki örneği yürütün - http: // localhost / cakephp4 / login

Çıktı

Yürütme üzerine aşağıdaki çıktıyı alacaksınız.