无法验证您的数据提交错误
在Yii2中创建一个公共函数。但是,提交数据不接受此方法, 请参阅以下错误图像。为什么会这样?
答案 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)
这个问题有各种各样的解决方案,我想首先理解它为什么会有所帮助解决问题。
如果CSRF不是问题,
如果您正在运行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)
答案 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()
。 我通过将以下代码添加到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;