Csrf_php 팁을 활성화한 후 POST 데이터 시 400 오류 발생

WBOY
풀어 주다: 2016-05-16 20:11:44
원래의
1423명이 탐색했습니다.

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

첫 번째 해결 방법은 CSRf를 끄는 것입니다

public function init(){
  $this->enableCsrfValidation = false;
}
로그인 후 복사

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


세 번째 해결 방법은 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);
    }
  }
로그인 후 복사

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿