CSRFを有効にした後の400エラーを解決するにはどうすればよいですか?この記事では、Csrfを有効にした後にデータをPOSTする際に発生する400エラーに関する関連情報を中心に紹介します。お役に立てれば幸いです。
最近このエラーが発生し、原因を探していたところ、偶然解決した記事を見たので、皆さんに共有したいと思います。
最初の解決策は、Csrf をオフにすることです
public function init(){ $this->enableCsrfValidation = false; }
2 番目の解決策は、フォームに隠しフィールドを追加することです
3 番目の解決策は、AJAX に _csrf フィールドを追加することです
var csrfToken = $('meta[name="csrf-token"]').attr("content"); $.ajax({ type: 'POST', url: url, data: {_csrf:csrfToken}, success: success, dataType: dataType });
Yii この照合プロセスYii::$app->request->csrfToken 値の保存場所:
保存場所
protected function createCsrfCookie($token) { $options = $this->csrfCookie; $options['name'] = $this->csrfParam; $options['value'] = $token; return new Cookie($options); }
検証方法
public function validateCsrfToken($token = null) { $method = $this->getMethod(); // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1 if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) { return true; } $trueToken = $this->loadCsrfToken(); if ($token !== null) { return $this->validateCsrfTokenInternal($token, $trueToken); } else { return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken) || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken); } }
関連する推奨事項:
同一生成元ポリシーとCSRFセキュリティポリシーに関する知識ポイントの説明
以上がCSRFを有効にした後の400エラーの問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。