Heim > Backend-Entwicklung > PHP-Tutorial > 启用Csrf后POST数据时出现的400错误

启用Csrf后POST数据时出现的400错误

WBOY
Freigeben: 2016-07-25 08:45:01
Original
791 Leute haben es durchsucht

最近一直出现这样的错误,一直在查找原因,偶然看到一篇解决的文章,分享给大家看看。

第一种解决办法是关闭Csrf

  1. public function init(){
  2. $this->enableCsrfValidation = false;
  3. }
复制代码

第二种解决办法是在form表单中加入隐藏域


第三种解决办法是在AJAX中加入_csrf字段

  1. var csrfToken = $('meta[name="csrf-token"]').attr("content");
  2. $.ajax({
  3. type: 'POST',
  4. url: url,
  5. data: {_csrf:csrfToken},
  6. success: success,
  7. dataType: dataType
  8. });
复制代码

Yii这个匹配的过程和Yii::$app->request->csrfToken 这个值存储位置说明:

存储位置

  1. protected function createCsrfCookie($token)
  2. {
  3. $options = $this->csrfCookie;
  4. $options['name'] = $this->csrfParam;
  5. $options['value'] = $token;
  6. return new Cookie($options);
  7. }
复制代码

校验方法

  1. public function validateCsrfToken($token = null)
  2. {
  3. $method = $this->getMethod();
  4. // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
  5. if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
  6. return true;
  7. }
  8. $trueToken = $this->loadCsrfToken();
  9. if ($token !== null) {
  10. return $this->validateCsrfTokenInternal($token, $trueToken);
  11. } else {
  12. return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
  13. || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);
  14. }
  15. }
复制代码

以上所述就是本文的全部内容了,希望大家能够喜欢。

Csrf, POST


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage