在我的申请,我允许用户上传自己的CSS样式表使他们能够应用到模板。的CSS被写入作为内部样式表,因为此时我不希望以暴露CSS样式表给其他用户。

这创造了空间供用户包括恶意代码到CSS文件。最初我的计划是把所有“<”和“>”,但需要在CSS语法。我是一个白名单溶液后,因为它会是不可行的穷举消除不需要的字符。

实施的保安措施,这种情况下有什么建议?

有帮助吗?

解决方案

您一定要还过滤掉至少IE表达式和FF -moz结合性质...既可以用于运行(potentionally恶意)的javascript使用CSS。

包含最明显的XSS策略,包括一些CSS那些这种作弊片。

最安全的解决方案可能会被列入白名单为你建议(如果它是可以接受的,以限制用户只能使用列入白名单的性质)。

其他提示

予实现的滤波器来替换所有<字符&lt;。其原因是,CSS不需要<字符;它需要的唯一的字符是其用于子选择的>

用户这样无法打开标签写恶意代码。

我很乐意考虑任何其他/更好的解决方案。

不要允许用户上传CSS文件,使该动态地生成基于由用户选择的选项的CSS文件的接口。该选项允许你。那么你可以做一个fisical CSS文件,或者你可以做一个动态的应用程序谁写基于该配置CSS,这避免有大量的CSS文件在服务器上...它的另一种方法,你不需要检查每个更多钞票XSS漏洞,其更容易定义什么是允许比分析CSS和拒绝一些危险的代码。

使用 CDATA 和逸出终止序列(]]>)。我不知道浏览器的兼容性,虽然。

实施例(未测试的):

<?PHP

function strReplaceAll($needle, $replacement, $haystack)
{
    // Check for infinite loop.  (NOT FOOL PROOF!)
    if(strpos($replacement, $needle) === FALSE)
        return;

    $numReplacements = 42;

    while($numReplacements)
    {
        $haystack = str_replace($needle, $replacement, $haystack, &$numReplacements);
    }

    return $haystack;
}

?>

<style type="text/css">
/*
<![CDATA[
*/

<?PHP echo sstrReplaceAll(']]>', '', $userCss); ?>

/*
]]>
*/
</style>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top