题
在我的申请,我允许用户上传自己的CSS样式表使他们能够应用到模板。的CSS被写入作为内部样式表,因为此时我不希望以暴露CSS样式表给其他用户。
这创造了空间供用户包括恶意代码到CSS文件。最初我的计划是把所有“<”和“>”,但需要在CSS语法。我是一个白名单溶液后,因为它会是不可行的穷举消除不需要的字符。
实施的保安措施,这种情况下有什么建议?
其他提示
予实现的滤波器来替换所有<
字符<
。其原因是,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>
不隶属于 StackOverflow