CakePHP-セキュリティ

セキュリティは、Webアプリケーションを構築する際のもう1つの重要な機能です。それは彼らのデータが保護されていることをウェブサイトのユーザーに保証します。CakePHPは、アプリケーションを保護するためのいくつかのツールを提供します。

暗号化と復号化

CakePHPのセキュリティライブラリは、データを暗号化および復号化するためのメソッドを提供します。以下は、同じ目的で使用される2つの方法です。

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

暗号化メソッドは、データを暗号化するための引数としてテキストとキーを取り、戻り値はHMACチェックサムで暗​​号化された値になります。

データをハッシュするには、 hash()メソッドが使用されます。以下は、hash()メソッドの構文です。

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

CSRF

CSRFは Cross Site Request Forgery。CSRFコンポーネントを有効にすることで、攻撃からの保護を得ることができます。CSRFは、Webアプリケーションの一般的な脆弱性です。

これにより、攻撃者は以前のリクエストをキャプチャして再生し、場合によっては他のドメインの画像タグやリソースを使用してデータリクエストを送信できます。CSRFは、を追加するだけで有効にできます。CsrfComponent 以下に示すように、コンポーネント配列に-

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

CsrfComponentはとシームレスに統合します FormHelper。FormHelperを使用してフォームを作成するたびに、CSRFトークンを含む非表示フィールドが挿入されます。

これはお勧めしませんが、特定のリクエストでCsrfComponentを無効にすることをお勧めします。これを行うには、コントローラーのイベントディスパッチャーを使用します。beforeFilter() 方法。

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

セキュリティコンポーネント

セキュリティコンポーネントは、アプリケーションにより厳​​しいセキュリティを適用します。これは、次のようなさまざまなタスクのメソッドを提供します。

  • Restricting which HTTP methods your application accepts−副作用を実行する前に、使用されているHTTPメソッドを常に確認する必要があります。HTTPメソッドを確認するか、を使用する必要がありますCake\Network\Request::allowMethod() 正しいHTTPメソッドが使用されていることを確認します。

  • Form tampering protection−デフォルトでは、SecurityComponentは、ユーザーが特定の方法でフォームを改ざんするのを防ぎます。SecurityComponentは、次のことを防ぎます-

    • 不明なフィールドをフォームに追加することはできません。

    • フォームからフィールドを削除することはできません。

    • 非表示の入力の値は変更できません。

  • Requiring that SSL be used −SSLで保護されたものを要求するすべてのアクション

  • Limiting cross controller communication−このコントローラーにリクエストを送信できるコントローラーを制限できます。このコントローラーのアクションにリクエストを送信できるアクションを制限することもできます。

に変更を加える config/routes.php 次のプログラムに示すようにファイル。

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();
});

作成する LoginsController.php でファイル src/Controller/LoginsController.php. 次のコードをコントローラーファイルにコピーします。

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(){
      }
   }
?>

ディレクトリを作成する Loginssrc/Template そのディレクトリの下に作成します Viewindex.phpというファイル。そのファイルに次のコードをコピーします。

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();
?>

次のURLにアクセスして、上記の例を実行します-http:// localhost / cakephp4 / login

出力

実行すると、次の出力が表示されます。