0

如何正确编码查询参数。我通过进行清理的 Anti Samy 传递数据。其次,我需要传递清理后的字符串 unescapeHtml4 方法。因为有时我将 Json 作为我的请求参数(参见下面的示例 1)。

目前,我的代码如下:

  String str = StringEscapeUtils.unescapeXml(xml);
  ClearResult cr = antiSamy.scan(str); 
  String cleanStr = cr.getCleanHTML();
  String s = StringEscapeUtils.unescapeHtml4(cleanStr);

示例 1:Json 作为请求:

如果我删除第 4 行,我最终会得到 {" name ": " Mav "}

示例 2:以下脚本的转义结果:< script >alert("hi") < script >

如果我保留第 4 行,我很容易受到 XSS 的攻击。

如何解决这个问题?我想同时处理 JSON 和 HTML 请求参数。任何帮助,将不胜感激。

4

2 回答 2

2

根据参数应该具有的内容/您计划对数据执行的操作来处理参数。

当参数包含您将解码的 json 时,请不要在其上使用 antisamy。

当参数包含您将输出为 html 的文本时,请在其上使用 antisamy。

当参数包含的 json 本身包含一些您将输出为 html 的值时,首先将参数解码为 json,然后对您计划输出为 html 的 json 中的各个值使用 antisamy。

Antisamy 有一个特殊的目的。处理您希望允许包含 HTML 标记的文本。不要在任何其他数据上使用 antisamy。相反,请确保在输出从用户收到的任何您不明确允许包含 HTML 标记的文本时转义 html 语法。

于 2017-01-18T02:18:51.773 回答
0

据我所知,如果你想要的只是一个处理 JSON 和 HTML 的函数,你可以更好地替换手动转义码。其他选择是将 JSON 与 HTML 分开。

这取决于要求和完整的场景。

于 2017-01-18T02:33:49.430 回答