Yii2:如何验证表单/模型输入中的XSS(跨站脚本)?

问题描述 投票:0回答:2

Yii2 支持使用辅助类\yii\helpers\HtmlPurifier 对显示数据进行 XSS(跨站点脚本)验证,但这仅验证和清理这样的输出代码

echo HtmlPurifier::process($html);

如何验证输入的 XSS 输入,以便该数据不存储在数据库本身中?

php activerecord yii yii2 xss
2个回答
14
投票

这可以使用 filterValidator 来完成,通过将进程调用为验证的命名可调用函数,如下所示

class MytableModel extends ActiveRecord {
   ....
   public function rules(){
        $rules = [
           [['field1','field2'],'filter','filter'=>'\yii\helpers\HtmlPurifier::process']
        ];
        return array_merge(parent::rules(),$rules);
    }
   ....
}

其中 field1、field2 等是要验证的输入字段,这同样适用于表单模型验证


0
投票

在验证方法之前添加以下内容:

public function beforeValidate()
{        
foreach (array_keys($this->getAttributes()) as $attr){
            if(!empty($this->$attr)){
                $this->$attr = \yii\helpers\HtmlPurifier::process($this->$attr);
            }
        }

 return parent::beforeValidate();// to keep parent validator available 
}

如果您想在验证/保存添加以下行嵌套的所有属性之前运行 Xss Validator,它将对您有所帮助

返回 array_merge(parent::rules(),$rules);

将新的活动记录扩展到每个班级

© www.soinside.com 2019 - 2024. All rights reserved.