您好我正在使用ESAPI对字符串进行编码和解码以避免脚本攻击,我正在使用它:
public static String encode(String value) {
if (value == null) {
return null;
}
Encoder encoder = ESAPI.encoder();
return encoder.encodeForHTML(encoder.canonicalize(value));
}
问题是如果我传递带有“%”符号的字符串,并使用 StringEscapeUtils unescapeHtml 解码它将“%”更改为 我应该使用不同的方法进行转义吗?
答案 0 :(得分:0)
我相信这似乎是ESAPI defaultencoder canonilize方法的问题,只是在提到的GitHub链接中发现了一个问题跟踪器 https://github.com/ESAPI/esapi-java/issues/1
答案 1 :(得分:0)
问题在于你在这里使用Encoder.canonicalize()
。在输入验证之前,而不是在输出之前规范化。
这里只使用编码方法,不要使用canonicalize方法。
规范化的其他明智建议:
不要保留规范化的值。只用它来执行 验证逻辑反对。含义,RawInput-> Canonicalize->验证。如果已验证,则保留/处理原始值。
该方法的主要优点是检测混合或 多种编码攻击。