java - 仅仅是对 XSS 进行编码(而不是转义)是错误的吗?

标签 java spring-mvc spring-security jackson xss

我遇到过这个项目https://github.com/rwinch/spring-jackson-owasp/blob/master/spring-jackson-owasp-xml .

我试图使用此项目中的特定文件来为 Jackson 的 ObjectMapper 添加 Html Escape 功能。但我得到的输入作为输出,没有任何变化。该项目中的以下代码似乎没有进行任何编码。

public class OwaspCharacterEscapes extends CharacterEscapes {
private final int[] ESCAPES;

public OwaspCharacterEscapes() {
    ESCAPES = standardAsciiEscapesForJSON();
    for(int i=0;i<ESCAPES.length;i++) {
        if(!(Character.isAlphabetic(i) || Character.isDigit(i))) {
            ESCAPES[i] = CharacterEscapes.ESCAPE_CUSTOM;
        }
    }
}

@Override
public SerializableString getEscapeSequence(int ch) {
    **String unicode = String.format("\\u%04x", ch);
    return new SerializedString(unicode);**
}

@Override
public int[] getEscapeCodesForAscii() {
    return ESCAPES;
}

private static final long serialVersionUID = 8140493311454723880L;

}

getEscapeSequence方法中,仅进行了从int chstring的转换。我将该代码更改如下,然后它就可以工作了。

new SerializedString(StringEscapeUtils.escapeHtml4(Character.toString((char) ch)));

我从某处的 spring 文档中找到了该项目。所以我不想相信其中有什么问题,我错过了什么吗?

最佳答案

您提供的原始代码中突出显示的部分将 Unicode 基本多语言平面的字符的代码点转换为表示同一字符的 JavaScript Unicode 转义序列(字符串)。该代码有点可疑,因为它错误地处理了 BMP 之外的代码点,但可能是从中提取该代码的项目地址超出了所提供的类的范围。

对于 JavaScript(和 JSON)来说,Unicode 转义序列与相应的 Unicode 字符具有相同的含义,因此从一种形式转换为另一种形式不会以任何方式改变 JavaScript 片段的语义。执行此类转换的目的是支持通过不编码所有 Unicode 的文本格式(例如以任何 ISO-8859 系列编码进行编码的文本)传输 JavaScript 代码(和/或 JSON 数据)。由于转换不会改变语义,因此这对 XSS 没有影响。

无论如何,您可以通过您提供的代码获得的 Unicode 转义序列不是 HTML 字符实体。如果要执行HTML转义,比如替换<&lt; ,那么这是完全不同的事情,服务于完全不同的目的。

关于java - 仅仅是对 XSS 进行编码(而不是转义)是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38905157/

相关文章:

java - DEBUG 和 RELEASE 在 Java (Eclipse) 中构建?

java - 无法使用 Spring Boot 提供静态 index.html

java - Spring 上下文不使用 @ContextConfiguration 初始化,而是使用 new ClassPathXmlApplicationContext 初始化

java - 无法在 Spring 中配置 CSRF 以免遇到 CORS 错误

unit-testing - 如何使用 grails 在单元测试中模拟 springSecurityService

java - Spring Security-如何在 CustomTokenAuthenticationFilter 中指定过滤器处理 url

java - 使用反射代替长 switch 语句

java - Java 中的可选条件运算符导致 NullPointerException

java - Java EE6 过滤器可以用注释定义但应用在 web.xml 中吗?

java - Spring MVC 使用 GET 请求提交并绑定(bind)对象