【问题标题】:How to secure the input JSON object in REST API? [closed]如何保护 REST API 中的输入 JSON 对象? [关闭]
【发布时间】:2018-02-20 16:07:17
【问题描述】:

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

例如。

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

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

例如用户篡改请求,将积分1000改为2000,将成本110降低为100,并发回服务器。

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

【问题讨论】:

    标签: java spring rest spring-boot spring-security


    【解决方案1】:

    您应该使用HTTPS。这样,任何人都无法拦截或修改请求。

    因此,您的 REST 端点应如下所示:

    https://localhost:8080/updatetrans/

    【解决方案2】:

    准备消息摘要并在请求中发送相同的内容,例如:

    { "userId": "123XXX123", “点”:1000, “类型”:1, “成本”:110, “消息摘要”:“shdfbeidhs” }

    Message Digest 包含在仅客户端和服务器知道的密钥的帮助下接收到的级联 json 数据上的加密逻辑。服务器将再次准备其加密版本并与请求中的一个进行检查。

    【讨论】:

      【解决方案3】:

      如果您正在使用此类 REST 或微服务,那么您应该在应用程序中使用令牌方法继承安全层。 JWT 是在您的应用程序中应用令牌和安全层的最佳解决方案之一。

      请关注以下博客了解如何在 Spring 中进行操作:

      https://www.toptal.com/java/rest-security-with-jwt-spring-security-and-java

      【讨论】:

      • 不,这里可以正常打开。
      • 哦,对不起,可能是我的防火墙问题:D
      • 哈哈,可能是伙计,这就是我讨厌防火墙的原因。
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-12-20
        • 1970-01-01
        • 2019-08-21
        • 2016-10-07
        • 2019-04-02
        • 2021-05-16
        • 2012-07-31
        • 1970-01-01
        相关资源
        最近更新 更多