你好,我使用ESAPI编码和解码字符串以避免脚本攻击,我使用它的方式如下:
public static String encode(String value) {
if (value == null) {
return null;
}
Encoder encoder = ESAPI.encoder();
return encoder.encodeForHTML(encoder.canonicalize(value));
}问题是,如果我传递带有"%“符号的字符串,并使用StringEscapeUtils unescapeHtml进行解码,那么它会将"%”更改为�,是否应该使用不同的方法来消除转义呢?
发布于 2016-11-07 13:38:44
我认为这似乎是ESAPI默认编码器规范化方法的一个问题,刚刚在提到的GitHub链接https://github.com/ESAPI/esapi-java/issues/1中发现了一个问题跟踪器。
发布于 2016-11-08 05:47:26
问题在于您在这里使用Encoder.canonicalize()时所做的事情。规范化是在输入验证之前,而不是在输出之前。
这里只使用编码方法,不要使用canonicalize方法。
关于规范化的其他明智建议:
https://stackoverflow.com/questions/40466439
复制相似问题