java - 哪些字符可以安全地不使用 CSS 值上下文进行转义?

标签 java css sanitization

我有一个来自用户的字符串,然后使用 CSS 解析器将其插入到一个大的 CSS block 中。

CSS 转义可以通过 \C(其中 C 是一个字符)、\HexOfC (带空格)或 \6DigitHexOfC 完成.

通常,所有字符都可以安全地转义,CSS 仍会按预期运行。以下作品:

div {
  background: \23 f66;
}
<div>Test</div>

但是,我仍然希望 CSS 属性尽可能“干净”,因为我希望能够使用检查器干净地查看 URL 和规则。


有些 Angular 色显然是坏的。 {};\* 应该全部转义,因为它们可以用来打破当前规则。我正在管理字符的白名单(所有内容都被转义,除了允许的内容)(与允许所有内容的黑名单相反,除了不允许的内容)。我目前的白名单字符是

'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'

这里有危险人物吗?任何可以用来打破规则并影响 CSS block 其余部分的东西。是否有不在这里的字符会被不必要地转义? (默认情况下不转义字母数字字符)。

最佳答案

您可以简单地允许传输元素,而不是清理输入。

基本上是客户端生成的结构文件:

[
    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 := 元素键 : 元素值;

然后您也可以将特殊命令列入白名单。

如果您想继续 sanitizer ,请看这里: http://www.w3.org/TR/CSS21/grammar.html#scanner

关于java - 哪些字符可以安全地不使用 CSS 值上下文进行转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157999/

相关文章:

java - 以最小的复杂性将值匹配到最接近的值范围

css - 如何使用伪元素添加响应图像

html - 移动版 Safari 中 block 元素垂直居中的问题

php - 在 PHP 中清理用户定义的 CSS

php - 究竟是什么让 PDO 安全?

java - 插入和退出 SQLite 数据库并显示到 TextView - Android

java - 如何了解 OpenJDK 版本并找到最新的 Java 8 镜像?

html - 如何居中 Bootstrap 导航栏,但也拉 1 个元素吗?

php - MySQL真正的转义字符串

java - Hibernate\JPA 在高并发 Web 应用程序上的使用