セキュリティのアップグレード
ドキュメント
注記
フォームヘルパー を使用し、CSRF フィルターをグローバルに有効にした場合、form_open()
は自動的にフォームに隠し CSRF フィールドを挿入します。そのため、自分でアップグレードする必要はありません。
変更点
HTML フォームに CSRF トークンを実装するメソッドが変更されました。
アップグレードガイド
CI4 で CSRF 保護を有効にするには、**app/Config/Filters.php** で有効にする必要があります
<?php namespace Config; use CodeIgniter\Config\BaseConfig; class Filters extends BaseConfig { // ... public $globals = [ 'before' => [ // 'honeypot', 'csrf', ], ]; // ... }
HTML フォーム内では、
<input type="hidden" name="<?= $csrf['name'] ?>" value="<?= $csrf['hash'] ?>" />
のような CSRF 入力フィールドを削除する必要があります。次に、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>