>  기사  >  백엔드 개발  >  CSRF 활성화 후 400 오류 문제 해결

CSRF 활성화 후 400 오류 문제 해결

*文
*文원래의
2017-12-27 11:43:242201검색

CSRF를 활성화한 후 400 오류를 해결하는 방법은 무엇입니까? 이 글에서는 Csrf를 활성화한 후 데이터를 POST할 때 발생하는 400 오류에 대한 관련 정보를 주로 소개합니다. 그것이 모두에게 도움이 되기를 바랍니다.

최근 이런 오류가 발생했는데, 원인을 찾다가 우연히 해결한 글을 보았는데, 여러분과 공유하고 싶습니다.

첫 번째 해결책은 Csrf를 끄는 것입니다

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

두 번째 해결책은 양식에 숨겨진 필드를 추가하는 것입니다

f08023f9e1ee650b4beb4833f495da90request->csrfToken ?>">

세 번째 해결 방법은 AJAX

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
 type: 'POST',
 url: url,
 data: {_csrf:csrfToken},
 success: success,
 dataType: dataType
});

Yii에 _csrf 필드를 추가하는 것입니다. 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에 대한 자세한 소개

Yii2.0 CSRF 공격 방어

위 내용은 CSRF 활성화 후 400 오류 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.