Yii2:如何验证表单/模型输入中的 XSS(跨站点脚本)?
Yii2 : How to validate XSS (Cross Site Scripting) in form / model input?
Yii2 支持使用助手 class\yii\helpers\HtmlPurifier 对显示数据进行 XSS(跨站点脚本)验证,但是这只会验证和清理输出代码,如下所示
echo HtmlPurifier::process($html);
如何针对输入的 XSS 验证输入,以便此数据不存储在数据库本身中?
这可以使用 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 等是要验证的输入字段,这同样适用于表单模型验证
在验证方法之前添加以下内容:
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 before validate/save all attributes nested of adding the following line
它会帮助你
return array_merge(parent::rules(),$rules);
到每个 class 扩展新的活动记录
Yii2 支持使用助手 class\yii\helpers\HtmlPurifier 对显示数据进行 XSS(跨站点脚本)验证,但是这只会验证和清理输出代码,如下所示
echo HtmlPurifier::process($html);
如何针对输入的 XSS 验证输入,以便此数据不存储在数据库本身中?
这可以使用 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 等是要验证的输入字段,这同样适用于表单模型验证
在验证方法之前添加以下内容:
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 before validate/save all attributes nested of adding the following line
它会帮助你return array_merge(parent::rules(),$rules);
到每个 class 扩展新的活动记录