gpt4 book ai didi

java - POST 方法中 JSON 中的无关后缀数据

转载 作者:行者123 更新时间:2023-12-02 03:22:15 25 4
gpt4 key购买 nike

我想知道是否有人可以告诉我这是否是一个值得考虑的问题,或者如果需要如何解决它。

我们有一个用 Java 编写的 Web 服务,该服务使用 Spring Boot 构建并在 Amazon AWS 上运行。这是我们内部其他产品和服务使用的。尽管端点是公共(public)的,但有一些身份验证会阻止公共(public)访问。

我们的一个 API 接受 JSON 作为 POST 方法的参数。我们的 QE 指出我们的 API 不会检测 JSON 数据后面的无关数据。例如,假设我们的 API 需要如下数据:

{
"name": "John Doe",
"email": "john.doe@example.com"
}

即使给出以下数据,我们的 API 也不会提示:

{
"name": "John Doe",
"email": "john.doe@example.com"
}
Hello, I’m ignored!

我们的 API 完全忽略了无关的部分。我们使用 Jackson 来反序列化 JSON 字符串。我查找了 Jackson 和 Spring 文档,但无法找到如何检测到这一点。

所以,问题是:这是安全威胁吗?如果是这样,如何解决这个问题?

谢谢

玛莎

最佳答案

我深入研究了 Jackson 的源代码,得到如下结论。当将json解析为对象时,jackson将解析所有值并将其转换为对象,然后检查解析器是否到达末尾(“}”)。所以我们可以看到“}”后面附加的任何字符串都不会被 Jackson 接收。而 jackson 只是忽略它们并且不会抛出异常。

我认为这不会导致任何安全问题,因为“}”后面的那些字符串被忽略,它们永远不会在 jackson 内部使用,因此没有机会进入您的应用程序。如果你确实不想这样,你可以使用拦截器来做一些检查。

希望这可以帮助你。

protected Object _unwrapAndDeserialize(JsonParser p, DeserializationContext ctxt, 
DeserializationConfig config,
JavaType rootType, JsonDeserializer<Object> deser)
throws IOException
{

...
// ok, then move to value itself....
p.nextToken();
Object result = deser.deserialize(p, ctxt);
// and last, verify that we now get matching END_OBJECT
if (p.nextToken() != JsonToken.END_OBJECT) {
ctxt.reportWrongTokenException(p, JsonToken.END_OBJECT,
"Current token not END_OBJECT (to match wrapper object with root name '%s'), but %s",
expSimpleName, p.getCurrentToken());
}
return result;
}

枚举

/* Jackson JSON-processor.
*
* Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi
*/

package com.fasterxml.jackson.core;

/**
* Enumeration for basic token types used for returning results
* of parsing JSON content.
*/
public enum JsonToken
{
...
/**
* END_OBJECT is returned when encountering '}'
* which signals ending of an Object value
*/
END_OBJECT("}", JsonTokenId.ID_END_OBJECT),
...

关于java - POST 方法中 JSON 中的无关后缀数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com