CakePHP のセキュリティ

PHPz
PHPzオリジナル
2024-09-10 17:26:531326ブラウズ

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

暗号化と復号化

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

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

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

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

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

CSRF

CSRF は クロスサイト リクエスト フォージェリ の略です。 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);
}

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

セキュリティ コンポーネントは、アプリケーションにより厳​​格なセキュリティを適用します。 −

のようなさまざまなタスクのためのメソッドを提供します。
  • アプリケーションが受け入れる HTTP メソッドの制限 - 副作用を実行する前に、使用されている HTTP メソッドを常に確認する必要があります。 HTTP メソッドをチェックするか、CakeNetworkRequest::allowMethod() を使用して、正しい HTTP メソッドが使用されていることを確認する必要があります。

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

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

    • フィールドはフォームから削除できません。

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

  • SSL の使用を要求する − すべてのアクションは SSL で保護される必要があります

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

次のプログラムに示すように、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();
});

src/Controller/LoginsController.php に 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(){
      }
   }
?>

src/Template にディレクトリ Logins を作成し、そのディレクトリの下に、index.php という名前の View ファイルを作成します。そのファイルに次のコードをコピーします。

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

出力

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

Submit Login

以上がCakePHP のセキュリティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。