java - 如何保护 REST API 中的输入 JSON 对象?

标签 java spring rest spring-boot spring-security

<分区>

我正在 Spring Boot 中开发 REST API,它接受 JSON 作为输入。

例。

http://localhost:8080/updatetrans/
{ 
    "userId": "123XXX123",
    "points" : 1000,
    "type" : 1,
    "cost" : 110
}

我的问题是任何人都可以拦截请求并更改参数值并重新发送到服务器。

例如用户篡改请求并将点数从 1000 更改为 2000,将成本从 110 降低到 100 并发送回服务器。

我怎么知道 JSON 输入被修改/篡改了?所以,我可以拒绝这个请求。

最佳答案

您无法验证 JSON 是如何创建的。您的 API 不应接受无法检查的输入。每个请求都应始终在后端进行验证。

您没有详细解释您的样本,但将交易成本作为输入发送很容易受到攻击。计算成本是您业务逻辑的一部分,因此它应该对 API 的客户端隐藏。输入应仅包含最少的数据以继续操作。

接受 userId 作为输入参数以提供身份验证绝对是您不应该做的事情。有几个选项可以为您的 API 提供身份验证层,并且由于您使用 Spring Boot,最简单的启动方式是 the official guide .

关于java - 如何保护 REST API 中的输入 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46172241/

相关文章:

java - 在 Android 库项目中捕获先前 Activity 的详细信息

java - Apache camel - 我使用 Spring XML 来定义我的 Camel 上下文。是否可以在运行时在 Java 中获取相同的 camelcontext 对象?

java - 无法让 Quartz 任务在 Spring web mvc 中运行

rest - 南希 : parsing "multipart/form-data" requests

java - 计算BigOh,迭代除法

java - JScrollPane 中 JList 中的 DefaultListModel,看不到 JList

node.js - 有没有办法在nodeJS POST API请求中指定本地文件系统路径,我能够使用curl进行api调用,但不能使用nodejs

java - Servlet 以 Base64 格式意外返回响应

java - 根据 JtextArea 中给定的行号突出显示字符串

java - Spring 启动 : Let servlet dispatcher address only static content or handlers