Java 中 JSON 注入的 Fortify 错误

2024-02-05

我正进入(状态SUBSCRIPTION_JSON来自客户端,我将其转换为字符串,然后使用 gson 库将其设置为模型对象。在 Fortify security 上运行代码时,下面的代码出现 Json 注入错误,并显示以下消息:

这是错误:

On line 159 of ActionHelper.java, the method jsonToObject() writes unvalidated input into JSON. This call could allow an attacker to inject arbitrary elements or attributes into the JSON entity.The method writes unvalidated input into JSON. This call could allow an attacker to inject arbitrary elements or attributes into the JSON entity.

Explanation
JSON injection occurs when:

1. Data enters a program from an untrusted source.

In this case the data enters at getString() in **SubscriptionAction.java** at line 355.


2. The data is written to a JSON stream.

In this case the JSON is written by fromJson() in **ActionHelper.java** at line 159.

订阅操作.java

final String subscriptionJson = subscriptionForm.getString(SUBSCRIPTION_JSON);

ActionHelper.java

public static <T> T jsonToObject(final String jsonString, final Class<T> className) {
        T object = null;
        if (StringUtils.isNotBlank(jsonString)) {
            final Gson gson = (Gson) BeanLocator.getInstance().getBean(GSON);
            object = gson.fromJson(jsonString, className);
        }
        return object;
    }

SUBSCRIPTION_JSON ->

{
    "subscriptions": [{
        "attributeId": "1",
        "items": [{
            "strId": "ALL",
            "nodeType": "G"
        }, {
            "strId": "VO_ENTRY_TIMING_DELAY",
            "nodeType": "L"
        }, {
            "strId": "O_INVALID",
            "nodeType": "L"
        }, {
            "strId": "O_LINE_INVALID",
            "nodeType": "L"
        }, {
            "strId": "V_INVALID",
            "nodeType": "L"
        }, {
            "strId": "V_ADDRESS_INVALID",
            "nodeType": "L"
        }]
    }, {
        "attributeId": "2001",
        "items": [{
            "strId": "OSTBU",
            "nodeType": "L"
        }]
    }]
}

在将 JSON 转换为 java 对象之前,您必须对其进行清理。这是经过测试的解决方案,它删除了这个强化警告。

<dependency>
        <groupId>com.mikesamuel</groupId>
        <artifactId>json-sanitizer</artifactId>
        <version>1.0</version>
</dependency>

InputStream responseBodyAsStream = null;
responseString = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
String wellFormedJson = com.google.json.JsonSanitizer.sanitize(responseString);

Map map = mapper.readValue(wellFormedJson, Map.class);

Hope this helps..!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中 JSON 注入的 Fortify 错误 的相关文章

随机推荐

  • Eclipse 中的块选择

    有谁知道在 Eclipse 中是否可以进行块选择 或矩形选择 也许有插件 我自己还没找到 从 Eclipse 3 5 开始可以进行块选择 您可以使用以下方法在标准选择和块选择之间切换 Alt Shift A Opt Cmd A on Mac
  • 动态地从 Reveal.JS 添加/删除幻灯片

    使用 Reveal js 运行演示文稿时是否可以添加 删除幻灯片 准确地说 是否有一个 API 可以实现这一点 或者可能有一些肮脏的解决方法 我对即将到来的项目也对此感到好奇 环顾四周 找不到任何东西 所以我为自己的项目写了一些东西 附加在
  • 将字节数组转换为 POD

    比方说 我有一个无符号字符数组 代表一堆 POD 对象 例如 从套接字或通过 mmap 读取 它们代表哪些类型以及在什么位置是在运行时确定的 但我们假设每个类型都已经正确对齐 将这些字节 转换 为相应 POD 类型的最佳方法是什么 解决方案
  • SQL/C# - 执行查询的最佳方法

    我需要从 C 类中执行 sql 查询 我想到了2个选择 启动sqlcmd进程 使用 SqlCommand 对象 我的问题是哪种方法更好 重要的是 该解决方案只能在短时间内保持与服务器的连接 如果上述想法不好 我愿意接受其他想法 提前致谢 使
  • select 的 Angular ng-change 不调用声明的方法

    我有以下 html 表单选择语句
  • 将 C# MethodInvoker.Invoke() 用于 GUI 应用程序...这样好吗?

    使用 C 2 0 和 MethodInvoker 委托 我有一个 GUI 应用程序从 GUI 线程或工作线程接收一些事件 我使用以下模式来处理表单中的事件 private void SomeEventHandler object sende
  • 错误:Angular2 中没有 HttpHandler 的提供者

    我正在尝试通过拦截器实现 HttpCache 以下是caching interceptor service ts import HttpRequest HttpResponse HttpInterceptor HttpHandler Htt
  • Linux 中的 Eclipse Luna UI 渲染

    我在 Fedora 19 中安装了 Eclipse Luna 并面临以下问题 与 Windows 安装相比 选项卡标题似乎很大 我在主目录中搜索并编辑了 gtkrc 2 0 文件 这使得选项卡更小 但我使用高对比度外观而不是 GTK 来获得
  • 提交时显示“您的二进制文件未针对 iPhone 5 进行优化”(ITMS-90096)

    这是我的第一个 iOS 应用程序 当我尝试将其提交到应用程序商店时 它给了我 ITMS 90096 错误 我想我已经上传了所有正确的图标和启动画面图像 它提到了 iphone 5 上 4 英寸显示屏的启动图像 但我不知道在哪里添加它 这是我
  • 如何将 Base64 字符串保存到文件并使用 Flutter 查看它

    我需要使用 Flutter 下载并查看文件 如果可能的话 图像 PDF 等 我的问题是 我要下载的文件是 Base64 String 我如何使用 Flutter 来实现这一点 以下是解码 Base64 字符串并将其保存为本地设备上的文件的代
  • Xcode 6 - 如何为 Ad-Hoc 分发选择签名证书/配置文件?

    为了将应用程序分发给我们的测试人员 我们使用 Xcode 我们使用以下过程来执行此操作 归档申请 临时分发 选择配置文件 将 ipa 保存到文件夹 但与Xcode 6 这个工作流程发生了一些变化 我仍然可以选择 Ad Hoc 分发选项 但无
  • 在chrome中将html保存为pdf

    我在用rmarkdown生成 HTML 报告 我在受限制的机器上 无法安装 tex 所以 我试图生成一个 HTML 文档 然后将其转换 打印为 pdf 示例 Markdown 文档是 title trials author Foo Bar
  • ubuntu 上的 Rscript

    我可以从哪里安装 Rscript 我需要使用 exec 从 php 文件运行 R 脚本 不过我需要先安装 Rscript R 的主包称为r base https packages ubuntu com search keywords r b
  • CSS/HTML:如何在全页 JS 上自定义箭头?

    我正在使用全页 JShttps github com alvarotrigo fullPage js https github com alvarotrigo fullPage js 制作我的网站 但是 当尝试更改箭头样式时 control
  • 使用 SQL 查询根据值复制和拆分行?

    我有一组数据 想要根据列值拆分多行 例如 源数据 预期输出 谢谢 劳伦斯A 解决上述问题的最佳且简单的方法是 SELECT value AS UID NAME Age Education Department FROM StackSoln
  • 将 TabControl 绑定到枚举

    我需要将所有枚举值显示为 TabControl 上的选项卡项 除了一个枚举成员 无 enum MyEnum Value1 Value2 Value3 None TabControl 应显示三个选项卡 Value1 Value2 和 Valu
  • auth.views.Loginview 显示“__init__() 收到意外的关键字参数‘请求’”

    我正在尝试使用内置的 djangosLoginView 但显示错误 init got an unexpected keyword argument request 批处理簿 用户 urls py from django urls impor
  • 如何在R中设置C堆栈的大小?

    我正在尝试使用spread 函数从tidyr在 R 中将其封装在一个包含大约 300 万个观测值的数据帧上 它返回以下错误消息 Error C stack usage 26498106 is too close to the limit 当
  • Spring 3 项目上的 java.lang.ClassNotFoundException:org.codehaus.jackson.map.ObjectMapper

    我正在尝试在没有 Maven 的情况下建立一个 Spring 项目 我的项目必须通过 Spring MVC 框架提供 jsp 页面和 json 流 Jsp 页面的部分运行良好 但是当我尝试设置 json 流 为了进行 ajax GET 时
  • Java 中 JSON 注入的 Fortify 错误

    我正进入 状态SUBSCRIPTION JSON来自客户端 我将其转换为字符串 然后使用 gson 库将其设置为模型对象 在 Fortify security 上运行代码时 下面的代码出现 Json 注入错误 并显示以下消息 这是错误 On