应该先验证什么令牌或参数?
What should be validated first token or parameters?
假设我的应用程序中有 2 条路由:
POST /login -> {token: some_token}
return用于访问第二个功能的令牌的身份验证路由
POST /divide -> {result: x / y}
模拟函数 divide(x: int, y: int)
的路由,由第一条路由的令牌持有者保护。同样在这个函数中我有一些验证器,即 x
和 y
必须是整数,y
必须不等于 0 并且它 returns 400: BadRequest 如果其中之一条件不合格
所以,我的问题是,如果用户没有为路由 /divide
提供令牌持有者和参数,我应该 return 401 还是 400?
有两件事让我担心
- return 400:用户可以通过发送来找出我的API结构
空体并解析响应,例如发送空体并获取 {x: 必须提供,y:
must be provided}, 然后发送 x=abc,y=bca 并得到 {x: must be integer,
y: 必须是整数},等等...
- return 401:用户可以通过发送大量
随机令牌,因此对于每个请求应用程序应该检查存储是否令牌有效
这种情况下的最佳做法是什么?
谢谢。
嗯,看起来像 "opinion" 问题,但我会回答。
您需要 return 401,因为授权是您应该做的第一件事。只有用户可以访问资源,我们才能继续处理。
未经授权,您不得以任何方式处理任何其他内容。否则,为什么会有 authentication/authorization 呢?如果您在用户未经授权的情况下处理内容,您基本上就会遇到安全漏洞。显然,对于示例函数来说,这似乎不是什么大问题,但这就是它的要点。
所以你应该return 401。
如果遇到DDoS问题,通过不同顺序处理无法解决,您仍然需要检查所有令牌。即使您不这样做,也有人可以对您的 service/API 进行 DDoS 攻击。还有其他(API 管理)解决方案,如节流、白名单、速率限制等。
假设我的应用程序中有 2 条路由:
POST /login -> {token: some_token}
return用于访问第二个功能的令牌的身份验证路由POST /divide -> {result: x / y}
模拟函数divide(x: int, y: int)
的路由,由第一条路由的令牌持有者保护。同样在这个函数中我有一些验证器,即x
和y
必须是整数,y
必须不等于 0 并且它 returns 400: BadRequest 如果其中之一条件不合格
所以,我的问题是,如果用户没有为路由 /divide
提供令牌持有者和参数,我应该 return 401 还是 400?
有两件事让我担心
- return 400:用户可以通过发送来找出我的API结构 空体并解析响应,例如发送空体并获取 {x: 必须提供,y: must be provided}, 然后发送 x=abc,y=bca 并得到 {x: must be integer, y: 必须是整数},等等...
- return 401:用户可以通过发送大量 随机令牌,因此对于每个请求应用程序应该检查存储是否令牌有效
这种情况下的最佳做法是什么?
谢谢。
嗯,看起来像 "opinion" 问题,但我会回答。 您需要 return 401,因为授权是您应该做的第一件事。只有用户可以访问资源,我们才能继续处理。
未经授权,您不得以任何方式处理任何其他内容。否则,为什么会有 authentication/authorization 呢?如果您在用户未经授权的情况下处理内容,您基本上就会遇到安全漏洞。显然,对于示例函数来说,这似乎不是什么大问题,但这就是它的要点。
所以你应该return 401。
如果遇到DDoS问题,通过不同顺序处理无法解决,您仍然需要检查所有令牌。即使您不这样做,也有人可以对您的 service/API 进行 DDoS 攻击。还有其他(API 管理)解决方案,如节流、白名单、速率限制等。