JAVA Esapi编码器

时间:2016-11-07 13:31:17

标签: java escaping esapi

您好我正在使用ESAPI对字符串进行编码和解码以避免脚本攻击,我正在使用它:

   public static String encode(String value) {
    if (value == null) {
        return null;
    }
    Encoder encoder = ESAPI.encoder();
    return encoder.encodeForHTML(encoder.canonicalize(value));
}

问题是如果我传递带有“%”符号的字符串,并使用 StringEscapeUtils unescapeHtml 解码它将“%”更改为 我应该使用不同的方法进行转义吗?

2 个答案:

答案 0 :(得分:0)

我相信这似乎是ESAPI defaultencoder canonilize方法的问题,只是在提到的GitHub链接中发现了一个问题跟踪器 https://github.com/ESAPI/esapi-java/issues/1

答案 1 :(得分:0)

问题在于你在这里使用Encoder.canonicalize()。在输入验证之前,而不是在输出之前规范化。

这里只使用编码方法,不要使用canonicalize方法。

规范化的其他明智建议:

  1. 不要保留规范化的值。只用它来执行 验证逻辑反对。含义,RawInput-> Canonicalize->验证。如果已验证,则保留/处理原始值。

  2. 该方法的主要优点是检测混合或 多种编码攻击。