セキュリティコンポーネントでは、これまれでより、CSRF対策と、SSL要求、バリデートポストの3つを実施してきていたが、CakePHP4系より、CSRF対策は、ミドルウェアに移行となっている。
POST送信を行う場合、上記3つのセキュリティ対策が発動する。
baserCMS5よりは、データの変更を伴う処理について、原則 POST送信を要求するものとする。
BcAdminFormHelper によりフォームを作成すると特に問題なく送信できる。
// ビューにて
$this->BcAdminForm->unlockField('field_name')
// Controller::beforeFilter()にて
$this->Security->confit('unlockedActions');
なお、データ変更時にCSRF対策はマストとなった。
postLink メソッドにより、フォームを作成せずとも簡単にPOST送信ができる。
echo $this->BcAdminForm->postLink(
__d('baser', 'ツリー構造をチェックする'),
['controller' => 'utilities', 'action' => 'verity_contents_tree'],
[
'confirm' => __d('baser', 'ツリー構造をチェックします。よろしいですか?')
'class' => 'bca-btn'
]
);
bcToken クラスを利用して、最新のトークンを付与して送信する。
バリデートポストに必要なトークンは取得できないので、バリデートポストよりアクションを除外する必要がある。
// CSRFトークン取得
$.bcToken.check(function () {
form.append($.bcToken.getHiddenToken());
form.submit();
});
リンクに bca-submit-token
クラスを付与する事で、CSRFトークンを取得した上で、POST送信ができる。
ただし、こちらもバリデートポストに必要なトークンは取得できないので、バリデートポストよりアクションを除外する必要がある。
$this->BcBaser->link(
__d('baser', 'ツリー構造リセット'),
['controller' => 'utilities', 'action' => 'reset_contents_tree'],
['class' => 'bca-submit-token bca-btn']
);
バリデートポストを実行するには、$this->BcAdminForm->postLink()
を利用する。
こちらは内部的に、bca-submit-token
を付与する仕様となっている。