想象一下,我的应用程序中有两条路由:
-
POST /login -> {token: some_token}
用于身份验证的路由,该路由返回用于访问第二功能的令牌 -
POST /divide -> {result: x / y}
模拟函数divide(x: int, y: int)
的路由,该路由由来自第一路由的令牌承载保护。此外,在这个函数中,我有一些验证器,即x
和y
必须是整数,y
必须不等于0,如果其中一个条件未通过,它将返回400:BadRequest
所以,我的问题是,如果用户没有提供路由/divide
的令牌承载和参数,我应该返回401还是400?
有两件事让我担心
- 返回400:用户可以通过发送必须提供空体和解析响应,如send空体和get{x:,y:必须提供},然后发送x=abc,y=bca并获取{x:必须是整数,y: 必须是integer}等
- return 401:用户可以通过发送大量的随机令牌,因此对于每个请求,应用程序都应该检查存储令牌是否有效
在这种情况下,最佳做法是什么?
谢谢。
未经授权,您不得处理任何其他内容。否则,为什么要进行身份验证/授权?如果你在用户未经授权的情况下处理内容,你基本上就有了安全漏洞。显然,对于示例函数来说,这似乎不是什么大问题,但这就是它的要点
所以你应该退回401。
如果DDoS问题无法通过不同顺序的处理来解决,您仍然需要检查所有令牌。即使你没有,也有人可以拒绝你的服务/API。还有其他(API管理(解决方案,如节流、白名单、费率限制等。
这看起来像是"意见"问题,但我会回答。您需要返回401,因为授权是您应该做的第一件事。只有当用户可以访问资源时,我们才能继续处理。