ホームページ  >  記事  >  バックエンド開発  >  CSRFを有効にした後の400エラーの問題を解決する

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

*文
*文オリジナル
2017-12-27 11:43:242182ブラウズ

CSRFを有効にした後の400エラーを解決するにはどうすればよいですか?この記事では、Csrfを有効にした後にデータをPOSTする際に発生する400エラーに関する関連情報を中心に紹介します。お役に立てれば幸いです。

最近このエラーが発生し、原因を探していたところ、偶然解決した記事を見たので、皆さんに共有したいと思います。

最初の解決策は、Csrf をオフにすることです

public function init(){
  $this->enableCsrfValidation = false;
}

2 番目の解決策は、フォームに隠しフィールドを追加することです

e96fab08327e1a248371bb884ab30f17request->csrfToken ?>">

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。