CSRFを有効にした後の400エラーの問題を解決する

*文
リリース: 2023-03-18 16:02:01
オリジナル
2225 人が閲覧しました

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セキュリティポリシーに関する知識ポイントの説明

XSSとCSRFの詳細な紹介

CSRF攻撃に対するYii2.0防御

以上がCSRFを有効にした後の400エラーの問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート