根据OWASP的建议,应该转义来自不受信任来源的CSS值。
为了尝试遵循这些建议,我使用Microsoft的AntiXss库来逃避我的CSS值,特别是System.Web.Security.AntiXss.AntiXssEncoder.CssEncode(value)
。
这会产生一个如下所示的样式表:
a,
a:visited {
color:\00002329c;
}
a:hover,
a:active {
color:\000023036;
}
body {
background:\000023eee;
color:\000023333;
font-family:Arial;
font-size:15px;
}
这适用于IE和Chrome,但Firefox无法识别转义值。
这是Firefox的错误还是我误解了如何实施OWASP建议?另外,如果这是Firefox的缺点,那么最好的解决方法是什么?
答案 0 :(得分:0)
我做了一个快速的POC,一开始它看起来确实是firefox中的一个bug。为了简单起见,我使用的代码尝试在IE,Chrome,Safari和Firefox中打开此网页。使用IE,Chrome和Safari,后台变为#FFCCCC
,但在Firefox中,控制台出错。
"Stylesheet could not be loaded." Expected color but found '\#FFCCCC'. Error in parsing value for 'background'. Declaration dropped.
示例代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<style>
body {
background:\000023FFCCCC;
font-family:Arial;
font-size:15px;
}
</style>
</head>
<body>
<p>Test</p>
</body>
</html>
出于好奇,我已经开始在这里提出与Mozilla的错误 - https://bugzilla.mozilla.org/show_bug.cgi?id=1172570
我也怀疑它可能是@charset的一个问题,但也无法让它发挥作用。直到mozilla的人回来,如果你找到解决方法,请回帖。
答案 1 :(得分:-1)
这条评论不是&#34;修复&#34;,但它揭示了这个问题。
除非我弄错了,否则这个问题似乎只会影响通过标准http加载的网站,而不会影响通过https安全加载的网站。换句话说,Firefox将识别转义值......但仅当网站通过https加载而不是http。
http://domain
可能无法正常加载,但https://domain
会。