java - 如何处理请求参数中的 Json 和 HTML santization?

标签 java json security antisamy

如何正确编码查询参数。我通过 Anti Samy 传递数据,由 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 请求参数。任何帮助将不胜感激。

最佳答案

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

当参数包含要解码的 json 时,请勿对其使用 antisamy。

当参数包含要输出为 html 的文本时,请对其使用 antisamy。

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

Antisamy 有一个特殊的目的。处理您希望允许包含 HTML 标签的文本。不要对任何其他数据使用反同性。相反,请确保在输出从用户接收到的任何文本(您不明确希望允许包含 HTML 标记)期间对 html 语法进行转义。

关于java - 如何处理请求参数中的 Json 和 HTML santization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710232/

相关文章:

java - 使用 JaxB 创建 Java 类

java - 通过java泛型动态返回类型

c# - 无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List` 1

javascript - 我如何执行这个 AJAX/JSONP 代码?

c - 客户端连接时没有服务器证书和 "no shared cipher"

ruby-on-rails - 哪种标记语言? Markdown 还是?

java - 使用 RingCentral API 添加新联系人

java - Spring 中的 Autowiring 和注解配置

javascript - d3.json : "Uncaught TypeError: Cannot read property ' children' of undefined"

javascript - 解析指针权限不允许创建