セキュリティのアップグレード

ドキュメント

注記

フォームヘルパー を使用し、CSRF フィルターをグローバルに有効にした場合、form_open() は自動的にフォームに隠し CSRF フィールドを挿入します。そのため、自分でアップグレードする必要はありません。

変更点

  • HTML フォームに CSRF トークンを実装するメソッドが変更されました。

アップグレードガイド

  1. CI4 で CSRF 保護を有効にするには、**app/Config/Filters.php** で有効にする必要があります

    <?php
    
    namespace Config;
    
    use CodeIgniter\Config\BaseConfig;
    
    class Filters extends BaseConfig
    {
        // ...
    
        public $globals = [
            'before' => [
                // 'honeypot',
                'csrf',
            ],
        ];
    
        // ...
    }
    
  2. HTML フォーム内では、<input type="hidden" name="<?= $csrf['name'] ?>" value="<?= $csrf['hash'] ?>" /> のような CSRF 入力フィールドを削除する必要があります。

  3. 次に、HTML フォーム内で、form_open() を使用していない限り、フォーム本文のどこかに <?= csrf_field() ?> を追加する必要があります。

コード例

CodeIgniter バージョン 3.x

<?php

$csrf = array(
    'name' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash()
);

?>

<form>
    <input name="name" type="text">
    <input name="email" type="text">
    <input name="password" type="password">

    <input type="hidden" name="<?= $csrf['name'] ?>" value="<?= $csrf['hash'] ?>">
    <input type="submit" value="Save">
</form>

CodeIgniter バージョン 4.x

<form>
    <input name="name" type="text">
    <input name="email" type="text">
    <input name="password" type="password">

    <?= csrf_field() ?>
    <input type="submit" value="Save">
</form>