Yii2支持使用帮助程序类\yii\helpers\HtmlPurifier对显示数据进行XSS(跨站点脚本)验证,但是这只会验证并清除像这样的输出代码
echo HtmlPurifier::process($html);
如何验证输入的XSS输入,以便此数据不存储在数据库本身中?
答案 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);
向每个班级扩展新的活动记录