大家好!当然,我仍然在与HTML Purifier斗争......
所以,我的/config/purifier.php看起来像:
<?php defined('SYSPATH') or die('No direct access allowed.');
return array(
'settings' => array(
'HTML.Allowed' =>'a,b,strong,p,ul,ol,li,img[src],i,u,span,',
'HTML.MaxImgLength' => 250,
'CSS.MaxImgLength' => '250px'
),
);
?>
并且,HTML Purifier重载Security :: clean_xss()方法以使用自己的过滤器。
我已经创建了两个用于数据卫生的辅助函数:clean_whitelist(),它可以删除配置文件中我的HTML.Allowed设置不允许的任何内容。 和 clean_all(),它会删除所有标记并忽略作为忽略
传入的字段 public static function clean_all(array $dirty_data, array $ignore) {
$config = Kohana::config('purifier');
$settings = $config['settings'];
$config->set('settings', array ('HTML.Allowed'=>''));
foreach($dirty_data as $key => $value) {
if( ! in_array($key, $ignore)) {
$dirty_data[$key] = Security::xss_clean($dirty_data[$key]);
}
}
return $dirty_data;
}
public static function clean_whitelist($dirty_data) {
return Security::xss_clean($dirty_data);
}
clean_whitelist()按预期工作,但是,clean_all仍允许使用标记。不完全确定原因,就像我在调用Kohana::config('purifier')
后var_dump $config->set
的新负载一样,它显示的文件我的HTML.Allowed =&gt; '' ...
为什么它继续使用白名单而不是使用我在运行时构建的配置文件的任何想法?
一如既往地感谢任何贡献者!
答案 0 :(得分:0)
您正在使用的Kohana HTMLPurifier模块可能使用原始配置选项缓存该实例。
如果您使用的是this module,请查看this method from the source code。