Home  >  Article  >  Backend Development  >  关于yii2 Csrf验证问题

关于yii2 Csrf验证问题

WBOY
WBOYOriginal
2016-06-06 20:35:54940browse

在使用yii2-uploadify时候,上传提交时候
发现返回HTTP400,意思提交的数据不被验证,研究发现是yii的csrf在发挥作用,
在beforeAction中禁用csrf是一种方法,不过我想默认使用csrf功能,我的代码如下

<code>    = $form->field($model,'thumb')->widget(Uploadify::className(),[
        'url'=>\yii\helpers\Url::toRoute(['rotatain/upload']),
        'id'=>'thumb',
        'csrf'=>true,
        'attribute'=>'file',
        'renderTag'=>true,
        'jsOptions'=>[
            'width'=>140,
            'height'=>36,
            'buttonText'=>'上传图片',
            'formData'=>"{". Yii::$app->request->csrfParam .":". Yii::$app->request->getCsrfToken().",PHPSESSID:". Yii::$app->session->get('session_id') ."}",
            //'overrideEvents' => ['onSelectError','onSelect','onDialogClose'],
            'onUploadStart'=>"function (){
                alert($('input[name=_csrf]').val());
                alert($('input[name=getT]').val());
            }",
            'onUploadSuccess'=>"function (file,data,response){
                alert(data)
            }"
        ]
    ]);?>
</code>

发送到一个测试文件输出POST能接受到_csrf,但是还是返回400状态,请问这是怎么问题,如何解决?

<code>"formData":{"PHPSESSID":"8q17070o7drq3536i59cfrs5j7","_csrf":"QmJWY0QzNU0QVwA2HV9YFXYhZjA9XEIIBU9jCwVwDAF2DmEmD30EDg=="}
</code>

这个是生成的额外数据,发现也是正确的,但是csrf验证就是通过不了。

回复内容:

在使用yii2-uploadify时候,上传提交时候
发现返回HTTP400,意思提交的数据不被验证,研究发现是yii的csrf在发挥作用,
在beforeAction中禁用csrf是一种方法,不过我想默认使用csrf功能,我的代码如下

<code>    = $form->field($model,'thumb')->widget(Uploadify::className(),[
        'url'=>\yii\helpers\Url::toRoute(['rotatain/upload']),
        'id'=>'thumb',
        'csrf'=>true,
        'attribute'=>'file',
        'renderTag'=>true,
        'jsOptions'=>[
            'width'=>140,
            'height'=>36,
            'buttonText'=>'上传图片',
            'formData'=>"{". Yii::$app->request->csrfParam .":". Yii::$app->request->getCsrfToken().",PHPSESSID:". Yii::$app->session->get('session_id') ."}",
            //'overrideEvents' => ['onSelectError','onSelect','onDialogClose'],
            'onUploadStart'=>"function (){
                alert($('input[name=_csrf]').val());
                alert($('input[name=getT]').val());
            }",
            'onUploadSuccess'=>"function (file,data,response){
                alert(data)
            }"
        ]
    ]);?>
</code>

发送到一个测试文件输出POST能接受到_csrf,但是还是返回400状态,请问这是怎么问题,如何解决?

<code>"formData":{"PHPSESSID":"8q17070o7drq3536i59cfrs5j7","_csrf":"QmJWY0QzNU0QVwA2HV9YFXYhZjA9XEIIBU9jCwVwDAF2DmEmD30EDg=="}
</code>

这个是生成的额外数据,发现也是正确的,但是csrf验证就是通过不了。

能给看下服务端接收POST的输出结果嘛?_csrf 必须是独立于 $_POST['_csrf'] 而不能是$_POST['xx']['_csrf']

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn