【问题标题】:What should be validated first token or parameters?第一个令牌或参数应该验证什么?
【发布时间】:2019-05-12 08:30:46
【问题描述】:

假设我的应用程序中有 2 条路由:

  • POST /login -> {token: some_token}
    返回令牌以访问第二个功能的身份验证路由

  • POST /divide -> {result: x / y}
    模拟功能divide(x: int, y: int) 的路由,由第一条路由的令牌持有者保护。同样在这个函数中我有一些验证器,即xy 必须是整数,y 必须不等于 0,如果其中一个条件失败,它会返回 400: BadRequest

所以,我的问题是,如果用户没有为路由/divide 提供令牌承载和参数,我应该返回 401 还是 400?

有两件事让我担心

  • return 400: 用户可以通过发送找出我的 API 结构 空正文和解析响应,例如发送空正文并获取 {x: 必须提供,y: 必须提供},然后发送 x=abc,y=bca 并得到 {x: 必须是整数, y: 必须是整数}等...
  • 返回 401:用户可以通过发送大量的 DDoS 我的应用程序 随机令牌,因此对于每个请求,应用程序应检查令牌是否有效的存储

在这种情况下,最佳做法是什么?

谢谢。

【问题讨论】:

    标签: rest validation bearer-token


    【解决方案1】:

    嗯,这看起来像“意见”问题,但我会回答。 您需要返回 401,因为授权是您应该做的第一件事。只有用户可以访问资源,我们才能继续处理。

    【讨论】:

      【解决方案2】:

      未经授权,您不得处理任何其他内容。否则,为什么要进行身份验证/授权?如果您在用户未经授权的情况下处理内容,则基本上存在安全漏洞。显然,对于似乎不是什么大问题的示例函数,但这就是它的要点。

      所以你应该返回 401。

      如果 DDoS 问题无法通过不同顺序处理来解决,您仍然需要检查所有令牌。即使您不这样做,也有人可以对您的服务/API 进行 DDoS。还有其他(API 管理)解决方案,例如限制、白名单、速率限制等。

      【讨论】:

        猜你喜欢
        • 2022-12-17
        • 1970-01-01
        • 2017-10-30
        • 2018-10-23
        • 2021-08-26
        • 1970-01-01
        • 2018-12-29
        • 2021-11-02
        • 2023-03-18
        相关资源
        最近更新 更多