在JSON字符串上使用ESAPI.encoder().canonicalize
时
输入:
{ "key1":"some data b"h" }
输出:
{ "key1":"somedata b"h" }
输出不再是有效的JSON字符串。
我如何保留原始"才能拥有有效的JSON字符串以进行进一步处理?
ESAPI.encoder().canonicalize
使用多个编解码器解码字符串。默认情况下它可以做类似的事情:
DefaultEncoder encoder = new DefaultEncoder(Arrays.asList(
HTMLEntityCodec.class.getName(),
PercentCodec.class.getName(),
JavaScriptCodec.class.getName()
));
encoder.canonicalize(...);
用"
替换"
的任何发生的JavaScript编解码器。使用JSON数据,最终会破坏输入。而是可以创建不包括JavaScriptCodec
的DefaultEncoder
的实例,也可以根本不在其上运行规范化。它不了解JSON格式,因此规范化不做任何有用的事情。
为了防止XSS,您需要谨慎对待如何将JSON字符串传递给客户端,以及如何使用其内容。这包括在输出数据时编码数据,并检查InnerHTML等到DOM的任何内容