我有一个从用户到达的字符串,然后使用CSS解析器插入到一个大的CSS块中。
可以使用\C
(其中C是字符),\HexOfC
(带空格)或\6DigitHexOfC
来完成CSS转义。
通常,所有字符都可以安全地转义,CSS仍然可以按预期运行。以下作品:
div {
background: \23 f66;
}
<div>Test</div>
但是,我仍然希望CSS属性尽可能“干净”,因为我希望能够使用检查器干净地查看URL和规则。
有些人物显然很糟糕。 {};\*
应该全部转义,因为它们可以用来打破当前规则。我正在管理一个白名单(一切都被逃脱,除了允许的内容)的字符(而不是黑名单,其中一切都被允许,除了什么不是)。我目前拥有的白名单是
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
这里有危险的人物吗?任何可用于突破规则并影响CSS块其余部分的东西。是否有不在这里的字符会被不必要地转义? (默认情况下不会转义字母数字字符。)
答案 0 :(得分:1)
您可以简单地允许传输元素,而不是清理输入。
基本上是客户端生成的structur文件:
[
MyDiv: { # Key
background: "#FFFFFF" # Element
}
]
在这种情况下,您只需创建一个文件。
虚拟代码:
StringBuilder sb = new StringBuilder();
foreach(String key: structure.getKeys()) {
final List<Element> e = structure.getElements(key);
sb.append(".") // This may be changed of course
.append(key) // ID or class based on type above
.append("{")
// Append Elements
.append("}");
}
生成元素应该很容易。
每个元素都是
S:= element-key:element-value;
然后你也可以将特殊命令列入白名单。
如果您想继续消毒,请看一下: http://www.w3.org/TR/CSS21/grammar.html#scanner