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

时间:2015-05-08 13:01:07

标签: validation activerecord yii xss yii2

Yii2支持使用帮助程序类\yii\helpers\HtmlPurifier对显示数据进行XSS(跨站点脚本)验证,但是这只会验证并清除像这样的输出代码

echo HtmlPurifier::process($html);

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

2 个答案:

答案 0 :(得分:13)

这可以使用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等是要验证的输入字段,同样适用于表单模型验证

答案 1 :(得分:0)

在before validate方法中添加以下内容:

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验证程序,它将为您提供帮助

  

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

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