验证
-
不要使用
Basic Auth
. 改为使用标准身份验证(例如JWT、OAuth)。 -
不要在
Authentication
,token generation
,中重新发明轮子password storage
。使用标准。 -
在登录中使用
Max Retry
和监禁功能。 -
对所有敏感数据使用加密。
JWT(JSON 网络令牌)
-
使用一个随机的复杂密钥 (
JWT Secret
) 使暴力破解令牌变得非常困难。 -
不要从标题中提取算法。在后端强制算法(
HS256
或RS256
)。 -
使令牌到期 (
TTL
,RTTL
) 尽可能短。 -
不要在 JWT 有效载荷中存储敏感数据,它可以很容易地被解码。
身份验证
-
始终验证
redirect_uri
服务器端以仅允许列入白名单的 URL。 -
始终尝试交换代码而不是令牌(不允许
response_type=token
)。 -
使用
state
带有随机哈希的参数来防止 OAuth 身份验证过程中的 CSRF。 -
定义默认范围,并验证每个应用程序的范围参数。
使用权
-
限制请求(限制)以避免 DDoS / 暴力攻击。
-
在服务器端使用 HTTPS 来避免 MITM(中间人攻击)。
-
使用
HSTS
带有 SSL 的标头来避免 SSL Strip 攻击。 -
对于私有 API,仅允许从列入白名单的 IP/主机进行访问。
输入
-
根据操作使用正确的 HTTP 方法:
GET (read)
、POST (create)
、PUT/PATCH (replace/update)
和,如果请求的方法不适合请求的资源,则使用DELETE (to delete a record)
响应。405 Method Not Allowed
-
验证
content-type
请求接受标头(内容协商)以仅允许您支持的格式(例如application/xml
,application/json
等),406 Not Acceptable
如果不匹配,则以响应响应。 -
在您接受时验证
content-type
发布的数据(例如application/x-www-form-urlencoded
、multipart/form-data
、application/json
等)。 -
验证用户输入以避免常见漏洞(例如
XSS
、SQL-Injection
、Remote Code Execution
等)。 -
不要在 URL 中使用任何敏感数据(
credentials
、Passwords
、security tokens
或),而是使用标准的 Authorization 标头。API keys
-
使用 API Gateway 服务来启用缓存、速率限制策略(例如
Quota
、Spike Arrest
或Concurrent Rate Limit
)并动态部署 API 资源。
加工
-
检查是否所有端点都受到身份验证的保护,以避免身份验证过程中断。
-
应避免使用用户自己的资源 ID。使用
/me/orders
而不是/user/654321/orders
. -
不要自动增加 ID。改为使用
UUID
。 -
如果您正在解析 XML 文件,请确保未启用实体解析以避免
XXE
(XML 外部实体攻击)。 -
如果您正在解析 XML 文件,请确保未启用实体扩展以避免
Billion Laughs/XML bomb
通过指数实体扩展攻击。 -
使用 CDN 进行文件上传。
-
如果您正在处理大量数据,请尽可能使用Workers和Queues在后台处理并快速返回响应以避免HTTP阻塞。
-
不要忘记关闭调试模式。
输出
-
发送
X-Content-Type-Options: nosniff
标头。 -
发送
X-Frame-Options: deny
标头。 -
发送
Content-Security-Policy: default-src 'none'
标头。 -
删除指纹标头 -
X-Powered-By
、Server
、X-AspNet-Version
等。 -
力求
content-type
你的回应。如果你返回application/json
,那么你的content-type
回应是application/json
。 -
不要返回敏感数据,如
credentials
、Passwords
或security tokens
。 -
根据操作完成返回正确的状态码。(例如
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
等)。
持续集成和光盘
-
使用单元/集成测试覆盖率审核您的设计和实现。
-
使用代码审查流程并忽略自我批准。
-
确保在推送到生产之前,您的服务的所有组件都由 AV 软件静态扫描,包括供应商库和其他依赖项。
-
为部署设计回滚解决方案。
原文始发于微信公众号(菜鸟小新):API 安全清单
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论