每个人!自然我还在和 HTML Purifier 斗争……</p>
所以,我的 /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 => ''...</p>
关于为什么它继续使用白名单而不是使用我在运行时构建的配置文件的任何想法?
一如既往地感谢任何做出贡献的人!