【布道API】权限错误码选择:401、403 或 404

简介: 选择对 API 请求的正确响应有助于保护应用程序,并能够提高项目开发效率。虽然表面上看起来可能并非如此,但每一条不必要的信息都使攻击者更容易了解如何获得访问权限。另一方面,每一个缺失的信息都会让 API 的使用者更难理解对 HTTP 请求的响应。

选择对 API 请求的正确响应有助于保护应用程序,并能够提高项目开发效率。虽然表面上看起来可能并非如此,但每一条不必要的信息都使攻击者更容易了解如何获得访问权限。另一方面,每一个缺失的信息都会让 API 的使用者更难理解对 HTTP 请求的响应。

本文将介绍用于 API 安全目的(登录或者鉴权)的常见的 HTTP 错误响应码。通常当请求成功时,这意味着:

  • 请求令牌唯一正确标识用户
  • 请求中的资源存在
  • 对资源的操作有效
  • 用户对该资源的该操作具有必要的权限

对于成功响应的请求返回状态码:2XX,否则对于上面的情况有三个相关的错误代码:401403404

401

401 ,表示请求需要用户认证信息,因为它缺少目标资源的有效身份验证凭据。用户未经过身份验证,API 需要有效用户,这由请求中的 Authorization 标头确定。下面是 401 正常使用的情况:

  • 没有指定令牌
  • 指定的令牌格式无效
  • 令牌已过期
  • 在极少数情况下,令牌有效,但不应用于此 API

403

403,表示服务器理解请求但拒绝授权,与 401 不同的是,客户端的身份是服务器已知的,只是用户未被授权,用户尝试执行操作,但标识用户的令牌没有足够的权限来执行此操作,常用于提示用户缺少相应的权限,如 Google 403 的响应界面如下:

image.png

404

404,表示服务器找不到请求的资源,导致 404 页面的链接通常被称为损坏或死链接,并且可能会受到链接失效的影响。如果 url 路径(也称为资源)不存在,则 404 是更合适。

错误代码的选择

看起类很容易选择,在大多数情况下,它们有一定顺序的:

  1. 验证令牌
  2. 验证用户权限
  3. 检查资源是否存在

有时 23 的顺序可以对换,具体取决于应用程序服务器。但是,如果这样做的话,很容易导致资源被暴露,因为验证资源有效性是发生在鉴权之前,意味着没有权限也可以验证资源是否存在。

如果用户无权访问资源并且该资源存在,常规是返回 403 更合理,资源不存在则返回 404 。

在常规情况下,如果无法访问资源,将根据该资源是否存在返回不同的信息。未经许可的用户可以开始扫描所有端点和潜在资源,以搜索现有端点。

相反,建议应该将 403 分解为更细微的类别。如果用户知道某个资源但没有权限,则返回 403。但是,用户不关心资源是否存在,而缺失权限的提醒对于用户来说也没什么意思,在这种情况下统一返回 404 。

那么什么情况下使用 403 呢?

对于一些内容系统或者平台,可以按照状态码的精确用意处理。

总结

API 的设计离不开状态码的部分,而鉴权是一个系统常见的功能,以确保系统的安全。有时候为了安全,鉴权相关的错误码没必要精确提供,越精确的错误某种意义上增加了安全风险。


相关文章
|
4月前
|
缓存 前端开发 API
手把手教你云相册项目简易开发day5 API服务搭建和权限框架
手把手教你云相册项目简易开发day5 API服务搭建和权限框架
67 0
|
6月前
|
安全 API
7.4 通过API枚举进程权限
GetTokenInformation 用于检索进程或线程的令牌(Token)信息。Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息。GetTokenInformation函数也可以用来获取这些安全信息,通常用于在运行时检查某个进程或线程的权限或安全信息。
|
6月前
|
消息中间件 JavaScript 关系型数据库
开箱即用的企业级前后端分离【.NET Core6.0 Api + Vue 2.x + RBAC】权限框架-Blog.Core
开箱即用的企业级前后端分离【.NET Core6.0 Api + Vue 2.x + RBAC】权限框架-Blog.Core
|
8月前
|
搜索推荐 小程序 NoSQL
如何设计API返回码(错误码)?
客户端请求 API,通常需要通过返回码来判断 API 返回的结果是否符合预期,以及该如何处理返回的内容等 相信很多同学都吃过返回码定义混乱的亏,有的 API 用返回码是 int 类型,有的是 string 类型,有的用 0 表示成功,又有的用 1 表示成功,还有用”true” 表示成功,碰上这种事情,只能说:头疼 API 返回码的设计还是要认真对待,毕竟好的返回码设计可以降低沟通成本以及程序的维护成本
148 0
|
8月前
|
数据可视化 前端开发 API
漏刻有时数据可视化大屏常见问题(11):调整api地址解除根目录安装权限适应子目录安装
漏刻有时数据可视化大屏常见问题(11):调整api地址解除根目录安装权限适应子目录安装
62 0
|
10月前
|
API Apache 数据安全/隐私保护
Apache ZooKeeper - 使用原生的API操作ZK_ACL权限
Apache ZooKeeper - 使用原生的API操作ZK_ACL权限
80 0
|
安全 API 数据安全/隐私保护
api漏洞系列-通过access_token绕过权限
主要业务逻辑 Zopim仪表板帐户的所有者具有创建代理和禁用代理的能力,当禁用代理时,它限制用户访问他登录到仪表板(这是可以的),但没有使access_token过期。如果access_tokens被重用,我们就可以再次获得对帐户的访问权! 想象一下这样一种情况:所有者创建代理并提供管理访问权,当所有者知道其配置文件时,他只禁用它!但是在这里禁用帐户似乎不安全,帐户可以通过access_token使用。
404 0
|
安全 API 开发工具
api漏洞系列-API权限升级
主要逻辑 使用能够嵌入Crashlytics的fabric SDK,用twitter登录到他们的Android/IOS应用程序。用户可以在https://fabric.io/dashboard上管理/跟踪仪表板上的报告。
94 1
api漏洞系列-API权限升级
|
搜索推荐 小程序 NoSQL
如何设计 API 返回码(错误码)?
如何设计 API 返回码(错误码)?
392 0
如何设计 API 返回码(错误码)?
|
存储 安全 API
Android权限检查API checkSelfPermission失效问题
Android权限检查API checkSelfPermission失效问题
401 0
http://www.vxiaotou.com