ESAPI.encoder()。canonicalize& json字符串

时间:2017-12-27 11:07:58

标签: java encoding xss owasp esapi

在json字符串

上使用ESAPI.encoder().canonicalize

输入:

{ "key1":"some data b\"h" }

输出:

{ "key1":"somedata b"h" }

输出不再是有效的json字符串。

如何保留原始\“以便有一个有效的json字符串进行进一步处理?

1 个答案:

答案 0 :(得分:0)

ESAPI.encoder().canonicalize使用多个编解码器对字符串进行解码。默认情况下它会执行以下操作:

DefaultEncoder encoder = new DefaultEncoder(Arrays.asList(
    HTMLEntityCodec.class.getName(),
    PercentCodec.class.getName(),
    JavaScriptCodec.class.getName()
));

encoder.canonicalize(...);

JavaScript编解码器将\"替换为"。使用JSON数据最终会破坏输入。您可以改为创建DefaultEncoder的实例而不包含JavaScriptCodec,或者根本不对其进行规范化。它并不了解JSON格式,因此规范化并没有做任何有用的事情。

要防止XSS,您需要注意如何将JSON字符串传递给客户端,以及如何使用它的内容。这包括在输出数据时对数据进行编码,以及使用innerHTML等检查添加到DOM的任何内容。