我工作的一个网站,我想就能够进入自定义CSS成将公开显示的用户。
然而,看到的XSS攻击的一个很好的协议可以通过CSS来预成形,我希望能够找到一个方法来“干净”的CSS输出,类似于如何HTML净化器的工作原理,通过解析CSS,运行解析CSS针对白名单,然后输出基于解析和白名单CSS新的样式表。
有没有已经这样了有图书馆? 如果没有,是否有可用于创建自定义实施CSS解析库?
我工作的一个网站,我想就能够进入自定义CSS成将公开显示的用户。
然而,看到的XSS攻击的一个很好的协议可以通过CSS来预成形,我希望能够找到一个方法来“干净”的CSS输出,类似于如何HTML净化器的工作原理,通过解析CSS,运行解析CSS针对白名单,然后输出基于解析和白名单CSS新的样式表。
有没有已经这样了有图书馆? 如果没有,是否有可用于创建自定义实施CSS解析库?
我猜你会写自己的CSS解析器和过滤器,所以这里就是我会考虑,但我从来没有做过这样的事情:
color
, font-family
。 background
,至少在开始的时候,让你可以轻松地解析值。 要求他们明确写入background-color
, background-image
。 在解析时,最难的部分将是解析复杂的CSS选择器 。 但你可以在这里强加自己的子集了。
下面是一些(伪)代码,也许它会帮助你以某种方式:
<?php
function tokenizeCSS() {
return array(
array(
'selector' => '#foo .bar',
'properties' => array(
'background-color' => 'transparent',
'color' => '#fff',
),
);
);
}
function colorValidator($color)
{}
/**
* This is basically the white list. Keys are accepted CSS properties
* and values are the validator callbacks.
*/
$propertyValidators = array(
'background-color' => 'colorValidator',
'color' => 'colorValidator',
);
$filteredRules = array();
foreach (tokenizeCSS() as $rule) {
if (! validSelector($rule['selector'])) {
continue;
}
foreach ($rule['properties'] as $property => $value) {
/**
* Check property is in white list
*/
if (! isset($propertyValidators[$property]) {
continue;
}
/**
* Check property is valid
*/
if (! $propertyValidators[$property]($value)) {
continue;
}
/**
* Valid rule
*/
$filteredRules[$rule['selector']][$property] = $value;
}
}