yii2 では、テスト ツール POSTMAN、コマンド ライン CURL リクエスト、または ajax リクエストのいずれを使用しても、常に http400: Bad Request エラーが発生します。Web ページを使用して GET にアクセスすると (POST の制限が解除されます)、 verbFilter)、それは正常です
情報を確認した後、これが CRSF 検証の理由であることがわかりました
原則:
Cookie ハッシュにより、サーバーからクライアントに送信されるすべてのフォームにランダムな値 _csrf でマークを付けることができます。同時に、関連付けられたトークンをクライアントの COOKIE に保存します。
検証中、サーバーはリクエスト _POST() から受信した入力 hidden _csrf をクライアントの COOKIE 内のトークンと比較するたびに
攻撃者の攻撃の原理これは、クライアントの COOKIE を使用することですが、攻撃者は使用する COOKIE の特定の内容を取得できません (Web サイトの XSS 脆弱性により、ユーザーの Cookie は簡単に盗まれてしまうため、XSS 攻撃の可能性は脇に置きます)。さらに 1%。通常、攻撃者はハッシュ値を計算する必要があると判断すると基本的にあきらめます)。したがって、攻撃者は攻撃 URL にトークンを追加できず、検証に失敗します。
攻撃者は (理論上) サードパーティ Cookie を取得できないため、これが最も簡単な解決策になる可能性があります。そのため、フォーム内のデータは構築されません。
解決策:
1.禁用CRSF验证(不推荐):'enableCsrfValidation' => false, 'components' => [ 'request' => [ 'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4', 'enableCookieValidation' => false, 'enableCsrfValidation' => false, ]
2. データが送信されるときに、キャリーします。 csrf 情報
a. コンポーネント ActiveForm を呼び出すと、送信されたデータは自動的に _csrf
b を取得し、Ajax で送信する場合は (以下に示すように) ヘッダーで csrf 情報を取得し、データと一緒に送信できます。
Yii::$app->request->csrfParam;(获取csrf-param) Yii::$app->request->csrfToken;(获取csrf-token)