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

Man*_*uer 6 xss validation activerecord yii yii2

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

echo HtmlPurifier::process($html);
Run Code Online (Sandbox Code Playgroud)

如何验证输入的XSS输入,使这些数据不存储在数据库本身?

Man*_*uer 13

这可以通过使用filterValidator来完成,方法是将进程调用为这样的命名可调用验证函数

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

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

  • 像这样我猜:`'filter'=> function($ html){return\yii\helpers\HtmlPurifier :: process($ html,['Attr.AllowedFrameTargets'=> ['_ blank'],]); }` (2认同)