为什么无法在Yii2中验证您的数据提交错误?

时间:2014-10-20 06:08:27

标签: yii2

enter image description here

错误:

  

无法验证您的数据提交错误

在Yii2中创建一个公共函数。但是,提交数据不接受此方法, 请参阅以下错误图像。为什么会这样?

11 个答案:

答案 0 :(得分:44)

如果手动创建表单(即不使用yii表单方法),则应添加如下输入字段:

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />

来源:http://zero-exception.blogspot.com/2015/01/yii2-using-csrf-token.html

答案 1 :(得分:17)

在布局的主题部分添加此内容:<?= Html::csrfMetaTags() ?>

答案 2 :(得分:12)

这个问题有各种各样的解决方案,我想首先理解它为什么会有所帮助解决问题。

  1. 由无效的csrf令牌,用户生成的csrf令牌,过期的csrf令牌引起,当您使用不使用'ActiveForm'类构建的自定义表单时,会出现所有这些'csrf'问题。
  2. 如果CSRF不是问题,

    1. 当您尝试上载多个文件且Web服务器无法处理负载时,会发生其他原因。检查此项以确保您处于正确轨道的某些属性是确定尝试上载的文件的大小并检查Web服务器的post_max_size和upload_max_filesize
    2. 如果您正在运行linux,请检查php.ini文件以获取以下输入:

      ; Maximum size of POST data that PHP will accept.
      ; Its value may be 0 to disable the limit. It is ignored if POST data    reading
      ; is disabled through enable_post_data_reading.
      ; http://php.net/post-max-size
      post_max_size = 8M
      
      ; Whether to allow HTTP file uploads.
      ; http://php.net/file-uploads
      file_uploads = On
      
      ; Maximum allowed size for uploaded files.
      ; http://php.net/upload-max-filesize
      upload_max_filesize = 2M
      

      根据您的计算,调整上面的php.ini参数以满足您的需求,然后进行测试。 我有类似的问题,我解决了。

答案 3 :(得分:3)

使用CSRF令牌检查表单中是否存在隐藏输入。它应该看起来像

<input type="hidden" name="_csrf" value="ZEZ6Y0xrY3ARGS42fTwhMQgkDgF6BCEGEx4SMXQMBR4CPy0iPCIwNQ==">

答案 4 :(得分:3)

有时你可以使用Yii 2.0来获得此错误,因为 post_max_size,upload_max_filesize,max_input_time 也可能是网络服务器可以修剪帖子所以验证 nginx - client_max_body_size apache - LimitRequestBody

答案 5 :(得分:3)

这里讨论了一个长篇故事github

因此禁用csrf以某种方式不确定ajax请求。我多次遇到过这个问题。

因此,请记住在通过ajax发送数据时发送_csrf密钥。

答案 6 :(得分:3)

要在整个应用程序中永久禁用csrf验证,请在配置中添加以下代码。

$config = [
    'components' => [
        'request' => [
            'enableCsrfValidation' => false,
        ],
    ],
];

答案 7 :(得分:0)

由于Yii2层使用而不是,因此对dchakarov的回答略有不同 _csrf变量_frontendCsrf

<input type="hidden" name="_frontendCsrf" value="<?=Yii::$app->request->getCsrfToken()?>" />

这是第二次,即使我以前发表了评论,这个问题也没有帮助我,所以我必须发表回复。

答案 8 :(得分:0)

从yii 2.0.12更新为2.0.30

有这个错误的请求错误400

  • 在页眉布局中获得Html::csrfMetaTags()
  • 使用activeform,因此不是由缺少csrf令牌引起的    形成。并已通过检查检查。

我通过将以下代码添加到backend/config/main.php中来解决了这个问题。

'components' => [
    'request' => [
        'csrfParam' => '_backend_csrf',
    ],

这是正确的方法还是会导致安全问题?

答案 9 :(得分:-1)

$ csrf = \ yii :: $ app-&gt; request-&gt; csrfParam;

$ token = \ yii :: $ app-&gt; request-&gt; csrfToken;

//从

开始

echo Html :: hiddenInput($ csrf,$ token);

//从

结束

答案 10 :(得分:-3)

控制器中添加:

 public $enableCsrfValidation = false;