java - 批量分配不安全的活页夹配置 Rest 框架,JSON http 请求:我没有使用 Spring MVC
问题描述
我正在使用 Jersey 实现一个完整的 Web 服务,它接受来自客户端的 json 格式的 http 请求。
在强化扫描中,我遇到了关键问题:-“批量分配不安全的活页夹配置”。
我想将 htttp 请求中的 json 值绑定到我的服务器端代码中的模型类,因为它是一个小模块,我想避免使用 Spring MVC 框架。
下面是我的代码片段,它工作正常,但我需要在不使用 Spring MVC 的情况下将 json 请求映射到下面的模型类。
@POST
@Path("/TimRestService")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response crunchifyREST**(JsonObject model**, @Context HttpServletRequest request) {
System.out.println(model);
return Response.status(200).entity(model).build();
}
这是模型类:-
public class ActivateService {
public String mWalletToken;
public String topMerchantEMPID;
public String serviceCategory;
}
我检查了这些链接,但是答案更具体到 Spring MVC fmwrk:
Mass Assignment: Insecure Binder Configuration Vulnerability 的解决方案是什么? 如何修复批量分配:Java 中不安全的 Binder 配置(API 滥用、结构)
解决方案
这可以通过 Jacksonson 来实现。Jackson 是最好的 JSON 提供程序/解析器之一,可以在 Rest 实现中与 Jersey 一起使用。REST 服务将生成和使用 JSON,并且 JSON 序列化和反序列化在幕后自动发生
创建视图类为:
public class View {
public static class Editable {}
public static class Viewable extends Editable {}
public static class Internal extends Viewable {}
}
创建模型类为:
@JsonIgnoreProperties(ignoreUnknown = true)
@XmlRootElement(name = "activateService")
public class ActivateService implements Serializable {
@JsonView(View.Editable.class)
public String mWalletToken;
@JsonView(View.Editable.class)
public String topMerchantEMPID;
@JsonView(View.Editable.class)
public String serviceCategory;
}
和 Rest -full web 服务方法:
@POST
@Path("/TimRestService")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response crunchifyREST(@JsonView(View.Editable.class) final ActivateService model, @Context HttpServletRequest request) {
在 JAX-RS 中,如果一个模型(请求或响应)使用 @JsonView(View.Editable.class) 注释,在我们的例子中 add 方法,Jackson 只会序列化或反序列化使用 @JsonView(View.Editable 注释的字段。班级)。在我们的例子中,客户端只能传递editableField,如果客户端传递任何其他字段,服务器将默默地忽略它们。
在 pom.xml 中使用以下依赖项
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-
databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-json -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.4</version>
</dependency>
来源:- https://www.owasp.org/index.php/Mass_Assignment_Cheat_Sheet 和http://lifelongprogrammer.blogspot.com/2015/09/using-jackson-view-to-protect-mass-assignment.html
推荐阅读
- rest - 在 REST API 中向客户端公开数据库 ID 是一种不好的做法吗?
- gwt - 使用 Highcharts GWT 创建表
- react-native - react native如何在android上检查FLog?
- javascript - 如何使用 scrapy 或 selenium 抓取动态页面?
- linux - 我在 linux WSL 中的提示出现问题,当我编写多行命令时,命令开始在我的提示后面写入?
- google-colaboratory - 谷歌 Colab 上的 Git 拉取
- django - 无法在 django rest 框架中使用嵌套序列化程序保存对象
- javascript - React中将对象从数组移动到数组到另一个对象时的位置镜像
- c# - 实体框架核心模型生成器忽略忽略
() 配置 - r - 在 Shiny 的单个 ObserveEvent 中删除和插入 UI 元素