如何隐藏JSON API并防止未授权访问?
针对你的API可被任意持有URL的人访问的问题,以下是几种有效的防护手段:
API密钥验证:为合法客户端分配唯一密钥,要求请求时在
Authorization请求头(如Authorization: Bearer YOUR_API_KEY)中携带。服务端先校验密钥有效性,无效则返回403禁止访问。注意:绝不能把密钥硬编码在前端代码中,移动端/桌面端可通过环境变量注入,Web端可让用户登录后从后端获取临时密钥。IP白名单限制:若你的应用服务于固定IP范围(比如企业内部场景),可在托管服务的防火墙或API网关配置IP白名单,仅允许指定IP段的请求通过。但此方法不适用面向公网的C端应用。
请求签名校验:客户端每次请求时,用密钥对请求路径、参数、时间戳等信息生成签名(比如用
HMAC-SHA256算法),将签名和时间戳放在请求头中。服务端收到请求后,用相同逻辑重新计算签名并对比,同时校验时间戳与服务器时间的差值(比如不超过5分钟),防止重放攻击。反向代理/API网关层防护:在API前部署反向代理或API网关,借助网关完成身份验证、速率限制、请求过滤等工作。例如配置JWT令牌验证:用户登录后获取JWT,每次请求携带该令牌,网关自动校验令牌的合法性与有效期。
速率限制:即使无法完全阻止非法访问,也可通过速率限制限制单个IP或API密钥的请求频率(比如每分钟最多100次请求),超过阈值则返回429状态码,避免恶意爬取耗尽资源。
隐藏真实API地址:不要在前端直接暴露API URL,可通过自有后端接口转发请求——前端调用后端接口,由后端去请求目标JSON API。这样用户只能看到后端接口地址,无法获取真实API的URL。同时,API返回的错误信息不要泄露服务器、数据库等敏感细节。
用户级授权:若API数据与特定用户绑定,可采用OAuth2.0授权流程。用户登录后获取授权令牌,服务端通过令牌识别用户身份,判断其是否有权限访问对应数据,实现细粒度的权限控制。
内容的提问来源于stack exchange,提问作者DLC

