Sanitize CSS с csstidy с пользовательским фильтром

Я разрешаю пользователям моих веб-сайтов напрямую редактировать файл CSS, чтобы они могли все заново оформить. Но я хочу удалить все опасные коды (это может быть опасно). Например, мне нравится, я хочу удалить, как из @import, -moz-binding: url('http://virus.com/htmlBindings.xml'); , background-image: url(javascript:alert('Injected')); и т. д., чтобы мой сайт всегда оставался в безопасности.
я сейчас использую phppurify а также csstidy, но проблема в том, что он также удаляет нужные стили CSS. лайк

$input_css = "body {
margin: 0px;
padding: 0px;
/* JS injection */
background-image: url(javascript:alert('Injected'));
}
a {
color: #ccc;
text-decoration: none;
/* dangerous proprietary IE attribute */
behavior:url(hilite.htc);
/* dangerous proprietary FF attribute */
-moz-binding: url('http://virus.com/htmlBindings.xml');
}
.banner {
position: absolute;
top: 0px;
left: 0px;
}
";

это только возвращает a { color:#ccc; text-decoration:none } .banner { }, Я хочу пропустить только опасные свойства. Код, который я использую:

$config = HTMLPurifier_Config::createDefault();
$config->set('Filter.ExtractStyleBlocks', True);

// Create a new purifier instance
$purifier = new HTMLPurifier($config);

// Turn off strict warnings (CSSTidy throws some warnings on PHP 5.2+)
$level = error_reporting(E_ALL & ~E_STRICT);
$html = $purifier->purify('<style>'.$input_css.'</style>');
// Revert error reporting
error_reporting($level);
// The "style" blocks are stored seperately
$output_css = $purifier->context->get('StyleBlocks');
// Get the first style block
var_dump( $output_css[0] );

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …