CSRF (クロスサイトリクエストフォージェリ)

状態を変更するアクションにCSRF保護がない場合に検出されます。

<?php
class TransferResource extends ResourceObject
{
    public function onPost(string $to, int $amount): static
    {
        // 脆弱: CSRFトークンなし
        $this->transferMoney($to, $amount);
        $this->body = ['status' => 'transferred'];

        return $this;
    }
}

修正方法

CSRFトークンを実装してリクエストを検証してください:

<?php
class TransferResource extends ResourceObject
{
    public function __construct(
        private CsrfTokenManager $csrf
    ) {}

    public function onPost(string $to, int $amount, string $token): static
    {
        // 安全: CSRFトークンを検証
        if (!$this->csrf->isTokenValid($token)) {
            throw new ForbiddenException('Invalid CSRF token');
        }

        $this->transferMoney($to, $amount);
        $this->body = ['status' => 'transferred'];

        return $this;
    }
}

SameSite Cookieの設定やフレームワーク提供のCSRF保護機能の使用も検討してください。