MrAlfak/API-Security-Checklist
GitHub: MrAlfak/API-Security-Checklist
一份覆盖 API 全生命周期的安全设计、开发与审计综合清单,包含最佳实践与代码示例。
Stars: 0 | Forks: 0
# 🛡️ Ultimate API 安全清单
### 设计、测试和发布安全 API 的全面指南。
### API 安全综合清单 - 安全设计、测试和发布完整指南。
[](https://github.com/MrAlfak/API-Security-Checklist/stargazers)
[](https://github.com/MrAlfak/API-Security-Checklist/network)
[](https://github.com/MrAlfak/API-Security-Checklist/issues)
[](https://opensource.org/licenses/MIT)
[](CONTRIBUTING.md)
[](http://makeapullrequest.com)
## 📖 目录 / فهرست مطالب
- [English Version](#english-version)
- [认证与授权](#-authentication--authorization)
- [JWT 安全](#-jwt-json-web-token)
- [访问与限流](#-access--throttling)
- [输入验证](#-input-validation)
- [输出安全](#-output-security)
- [数据库安全](#-database-security)
- [日志与监控](#-logging--monitoring)
- [基础设施与 CI/CD](#-infrastructure--cicd)
- [现代 API 技术](#-modern-api-tech-graphqlgrpcwebsockets)
- [会话与 API 密钥管理](#-session--api-key-management)
- [CSRF 与点击劫持保护](#-csrf--clickjacking-protection)
- [API 版本控制与文档](#-api-versioning--documentation)
- [第三方与 Webhook 安全](#-third-party--webhook-security)
- [高级安全架构](#-advanced-security-architecture)
- [合规与隐私](#-compliance--privacy)
- [测试与自动化](#-testing--automation)
- [运营安全](#-operational-security)
- [高级技术控制](#-advanced-technical-controls)
- [نسخه فارسی](#نسخه-فارسی)
- [احراز هویت و مجوزدهی](#-احراز-هویت-و-مجوزدهی)
- [امنیت JWT](#-امنیت-jwt)
- [کنترل دسترسی و ترافیک](#-کنترل-دسترسی-و-ترافیک)
- [اعتبارسنجی ورودیها](#-اعتبارسنجی-ورودیها)
- [امنیت خروجی و پاسخها](#-امنیت-خروجی-و-پاسخها)
- [امنیت دیتابیس](#-امنیت-دیتابیس-1)
- [لاگینگ و مانیتورینگ](#-لاگینگ-و-مانیتورینگ-1)
- [زیرساخت و CI/CD](#-زیرساخت-و-cicd-1)
- [تکنولوژیهای مدرن](#-تکنولوژیهای-مدرن-graphqlgrpcwebsockets)
- [مدیریت Session و API Key](#-مدیریت-session-و-api-key)
- [محافظت CSRF و Clickjacking](#-محافظت-csrf-و-clickjacking)
- [نسخهبندی و مستندات API](#-نسخهبندی-و-مستندات-api)
- [امنیت Third-Party و Webhook](#-امنیت-third-party-و-webhook)
- [معماری امنیتی پیشرفته](#-معماری-امنیتی-پیشرفته)
- [انطباق و حریم خصوصی](#-انطباق-و-حریم-خصوصی)
- [تست و اتوماسیون](#-تست-و-اتوماسیون)
- [امنیت عملیاتی](#-امنیت-عملیاتی)
- [کنترلهای فنی پیشرفته](#-کنترلهای-فنی-پیشرفته)
- [优先级指南](#-priority-levels-guide--راهنمای-سطح-اولویت)
- [常见漏洞](#-common-vulnerabilities--آسیبپذیریهای-رایج)
- [实施示例](#-implementation-examples--مثالهای-پیادهسازی)
- [快速入门清单](#-quick-start-checklist--چکلیست-شروع-سریع)
- [工具与资源](#-tools--resources--ابزارها-و-منابع)
## 🚀 如何使用 / نحوه استفاده
- **对于开发者:** 在设计和开发阶段将其用作指南。
- **对于安全审计员:** 将其作为 API 安全审查的基准。
- **交互式:** 您可以复刻此代码库,并在项目中完成每项任务时勾选方框!
- **برای توسعهدهندگان:** از این لیست به عنوان راهنما در طول فاز طراحی و توسعه استفاده کنید.
- **برای حسابرسان امنیتی:** از این لیست به عنوان پایه برای بررسیهای امنیتی API استفاده کنید.
- **تعاملی:** میتوانید این پروژه را Fork کنید و با انجام هر مرحله در پروژه خود، تیک مربوطه را بزنید!
## 🇺🇸 英文版 (English Version)
### 🔑 认证与授权 (Authentication & Authorization)
- [ ] **不要使用 `Basic Auth`。** 使用标准认证方式,如 OAuth2 或 JWT。
- [ ] **不要重复造轮子。** 使用经过充分测试的库进行认证和密码哈希处理(例如 Argon2、bcrypt)。
- [ ] **实施最大重试次数。** 限制登录尝试次数以防止暴力破解攻击。
- [ ] **使用 MFA。** 为敏感账户实施多因素认证。
- [ ] **安全重置密码。** 使用短暂的、一次性的令牌进行密码恢复。
- [ ] **OAuth 2.1 最佳实践。** 对所有 OAuth 流程使用 PKCE,即使是机密客户端。
- [ ] **账户锁定策略。** 在多次失败尝试后实施渐进式延迟或临时锁定。
- [ ] **密码复杂度。** 强制执行最小长度(12个字符以上)和复杂度要求。
- [ ] **实施 RBAC。** 实施基于角色的访问控制以进行权限管理。
- [ ] **复杂场景下的 ABAC。** 使用基于属性的访问控制进行细粒度的权限管理。
- [ ] **社交登录安全。** 验证 OAuth state 参数并验证来自社交提供商的电子邮件。
- [ ] **生物识别认证。** 使用特定平台的安全生物识别 API(Face ID、Touch ID、Windows Hello)。
- [ ] **权限继承。** 设计清晰的权限层次结构和继承规则。
- [ ] **临时提升权限。** 实施具有审计日志记录的限时权限升级。
### 🎫 JWT (JSON Web Token)
- [ ] **强密钥。** 使用随机、复杂的密钥(至少 32 个字符)。
- [ ] **强制算法。** 不要信任 `alg` 头部;在服务器上强制使用 `HS256` 或 `RS256`。
- [ ] **短 TTL。** 尽可能保持过期时间(TTL)短。
- [ ] **不要在 Payload 中存储机密。** JWT payload 很容易被解码;切勿存储 PII 或密码。
- [ ] **撤销策略。** 实施黑名单或刷新令牌机制以撤销令牌。
- [ ] **JWT Claims 验证。** 始终验证 `iss`、`aud`、`exp`、`nbf` claims。
- [ ] **刷新令牌安全。** 安全地存储刷新令牌,使用时轮换,并绑定到设备/IP。
- [ ] **令牌绑定。** 使用指纹或设备标识符将令牌绑定到特定客户端。
### 🚦 访问与限流 (Access & Throttling)
- [ ] **速率限制。** 实施限流以防止 DDoS 和暴力破解。
- [ ] **仅限 HTTPS。** 所有通信使用 TLS 1.2+。
- [ ] **HSTS。** 启用 HTTP 严格传输安全。
- [ ] **CORS。** 只允许受信任的域名。避免 `Access-Control-Allow-Origin: *`。
- [ ] **IP 白名单。** 对于私有 API,限制访问特定的 IP 范围。
- [ ] **自适应速率限制。** 根据用户层级和端点敏感性实施不同的速率限制。
- [ ] **DDoS 缓解。** 使用带有 DDoS 保护的 CDN(Cloudflare、Akamai、AWS Shield)。
- [ ] **机器人检测。** 实施机器人检测机制(reCAPTCHA、hCaptcha、行为分析)。
- [ ] **地理封锁。** 在适当的情况下,根据地理位置限制 API 访问。
- [ ] **TLS 配置。** 禁用弱密码,使用完美前向保密,启用 TLS 1.3。
### 📥 输入验证 (Input Validation)
- [ ] **正确的 HTTP 方法。** 使用 `GET` 进行读取,`POST` 进行创建,`PUT/PATCH` 进行更新,`DELETE` 进行删除。
- [ ] **Content-Type 验证。** 检查 `Accept` 和 `Content-Type` 头部。
- [ ] **净化输入。** 防止 XSS、SQL 注入 和 NoSQL 注入。
- [ ] **文件上传。** 验证文件类型、大小,并扫描恶意软件。
- [ ] **限制请求大小。** 防止大型 payload 攻击。
- [ ] **Schema 验证。** 根据严格的 JSON/XML schema 验证所有输入。
- [ ] **白名单验证。** 使用白名单而不是黑名单进行输入验证。
- [ ] **防止路径遍历。** 净化文件路径并防止目录遍历攻击。
- [ ] **防止命令注入。** 切勿将用户输入直接传递给系统命令。
- [ ] **防止 LDAP 注入。** 在 LDAP 查询中转义特殊字符。
- [ ] **防止 XML 外部实体 (XXE)。** 在 XML 解析器中禁用外部实体处理。
- [ ] **防止服务器端请求伪造 (SSRF)。** 验证服务器端请求的 URL 并将其列入白名单。
- [ ] **文件元数据净化。** 从上传的文件中剥离元数据(EXIF、IPTC)。
### 📤 输出安全 (Output Security)
- [ ] **禁用 `X-Powered-By`。** 不要泄露服务器技术信息。
- [ ] **通用错误消息。** 不要暴露堆栈跟踪或内部数据库错误。
- [ ] **数据脱敏。** 在响应中屏蔽敏感数据(例如信用卡号)。
- [ ] **安全头部。** 使用 `X-Content-Type-Options: nosniff`,`X-Frame-Options: deny`。
- [ ] **一致的错误格式。** 在所有端点上使用标准化的错误响应结构。
- [ ] **错误代码标准化。** 定义并记录不同场景的错误代码。
- [ ] **调试模式安全。** 确保在生产环境中禁用调试模式。
- [ ] **响应大小限制。** 限制响应 payload 大小以防止资源耗尽。
- [ ] **正确的 HTTP 状态码。** 使用正确的状态码(200, 201, 400, 401, 403, 404, 500 等)。
- [ ] **移除服务器指纹。** 从响应中删除版本号和服务器签名。
- [ ] **强制 Content-Type。** 始终为响应设置正确的 Content-Type 头部。
### 🗄️ 数据库安全 (Database Security)
- [ ] **参数化查询。** 使用 ORM 或预处理语句来防止 SQL 注入。
- [ ] **最小权限原则。** API 应仅具有必要权限的用户连接到数据库。
- [ ] **静态加密。** 确保敏感数据在数据库中加密。
- [ ] **审计日志。** 为敏感的数据库操作启用日志记录。
- [ ] **传输中加密。** 数据库连接使用 TLS/SSL。
- [ ] **数据库防火墙。** 仅限制应用程序服务器访问数据库。
- [ ] **连接池安全。** 正确配置和保护数据库连接池。
- [ ] **备份加密。** 加密数据库备份并测试恢复程序。
- [ ] **防止 NoSQL 注入。** 净化 MongoDB、Redis 和其他 NoSQL 数据库的输入。
- [ ] **数据库活动监控。** 对可疑的数据库查询实施实时监控。
### 📝 日志与监控 (Logging & Monitoring)
- [ ] **不要记录 PII。** 切勿记录密码、令牌或个人用户数据。
- [ ] **集中式日志记录。** 使用 ELK、Splunk 或 Datadog 等工具。
- [ ] **警报。** 为可疑活动设置警报(例如 401/403 错误激增)。
- [ ] **审计追踪。** 记录所有管理操作是谁在何时做了什么。
### ☁️ 基础设施与 CI/CD (Infrastructure & CI/CD)
- [ ] **机密管理。** 使用 Vault、AWS Secrets Manager 或环境变量。切勿硬编码密钥。
- [ ] **依赖扫描。** 使用 `npm audit` 或 Snyk 查找易受攻击的包。
- [ ] **容器安全。** 扫描 Docker 镜像以查找漏洞。
- [ ] **API 网关。** 使用网关(例如 Kong、Nginx)实施全局安全策略。
### 🌐 现代 API 技术 (Modern API Tech - GraphQL/gRPC/WebSockets)
- [ ] **GraphQL: 深度限制。** 防止嵌套查询攻击。
- [ ] **GraphQL: 自省。** 在生产中禁用自省。
- [ ] **gRPC: TLS。** gRPC 通信始终使用 TLS。
- [ ] **WebSockets: Origin 验证。** 始终检查 `Origin` 头部以防止 CSH 攻击。
- [ ] **WebSockets: 认证。** 在初始握手期间进行认证。
### 🔐 会话与 API 密钥管理 (Session & API Key Management)
- [ ] **安全的会话存储。** 使用安全的随机会话 ID 在服务器端存储会话。
- [ ] **会话超时。** 实施空闲和绝对会话超时。
- [ ] **会话失效。** 在注销和更改密码时正确使会话失效。
- [ ] **API 密钥轮换。** 实施自动密钥轮换策略(例如每 90 天)。
- [ ] **API 密钥作用域。** 将 API 密钥限制为特定的端点和操作。
- [ ] **密钥存储。** 切勿在客户端代码或 URL 中暴露 API 密钥。
- [ ] **每个用户多个密钥。** 允许用户为不同的应用程序生成多个密钥。
- [ ] **密钥撤销。** 提供即时密钥撤销功能。
### 🛡️ CSRF 与点击劫持保护 (CSRF & Clickjacking Protection)
- [ ] **CSRF 令牌。** 为更改状态的操作实施反 CSRF 令牌。
- [ ] **SameSite Cookies。** 对 cookies 使用 `SameSite=Strict` 或 `SameSite=Lax`。
- [ ] **双重提交 Cookie。** 实施 Double Submit Cookie 模式以进行 CSRF 保护。
- [ ] **X-Frame-Options。** 设置为 `DENY` 或 `SAMEORIGIN` 以防止点击劫持。
- [ ] **Content-Security-Policy。** 使用 `frame-ancestors` 指令实施 CSP。
- [ ] **自定义头部。** API 调用需要自定义头部(例如 `X-Requested-With`)。
### 📋 API 版本控制与文档 (API Versioning & Documentation)
- [ ] **URL 或 Header 中的版本。** 在 URL 中使用 `/v1/` 或 `Accept-Version` header。
- [ ] **弃用策略。** 清楚地传达 API 弃用时间表。
- [ ] **向后兼容性。** 在主要版本中保持向后兼容性。
- [ ] **安全文档。** 在生产环境中使用身份验证保护 Swagger/OpenAPI 文档。
- [ ] **移除敏感示例。** 不要在文档中包含真实的 API 密钥或凭据。
- [ ] **API 更新日志。** 为安全相关的更新维护公开的更新日志。
- [ ] **Schema 验证。** 根据 OpenAPI/JSON Schema 定义验证请求。
### 🔗 第三方与 Webhook 安全 (Third-Party & Webhook Security)
- [ ] **供应商评估。** 在集成之前对第三方 API 进行安全评估。
- [ ] **最小权限集成。** 从第三方服务请求最低必要的权限。
- [ ] **Webhook 签名验证。** 在处理之前验证 webhook 签名(例如 HMAC)。
- [ ] **Webhook IP 白名单。** 将 webhook 端点限制为已知的 IP 范围。
- [ ] **幂等键。** 使用幂等键防止重复的 webhook 处理。
- [ ] **Webhook 重试逻辑。** 为 webhook 重试实施指数退避。
- [ ] **超时配置。** 为第三方 API 调用设置适当的超时。
- [ ] **熔断器模式。** 实施熔断器以优雅地处理第三方故障。
### 🏗️ 高级安全架构 (Advanced Security Architecture)
- [ ] **零信任模型。** 永不信任,始终验证 - 验证每个请求。
- [ ] **服务网格安全。** 在微服务之间使用 mTLS(Istio/Linkerd)。
- [ ] **API 网关策略。** 在网关集中进行身份验证、速率限制和日志记录。
- [ ] **Serverless 安全。** 为 Lambda/Cloud Functions 应用最小权限 IAM 角色。
- [ ] **API 滥用检测。** 实施基于 ML 的异常检测以发现异常模式。
- [ ] **分布式追踪。** 使用 Jaeger 或 Zipkin 等工具进行安全审计追踪。
- [ ] **机密轮换。** 自动轮换数据库凭据和 API 密钥。
- [ ] **网络分段。** 将 API 服务隔离在单独的网络区域中。
### ⚖️ 合规与隐私 (Compliance & Privacy)
- [ ] **GDPR 合规。** 实施数据主体权利(访问、删除、可移植性)。
- [ ] **数据最小化。** 仅收集和存储必要的数据。
- [ ] **同意管理。** 跟踪并尊重用户对数据处理的同意。
- [ ] **被遗忘权。** 实施自动数据删除工作流。
- [ ] **数据保留策略。** 定义并执行数据保留期限。
- [ ] **隐私设计。** 从一开始就将隐私考虑纳入 API 设计。
- [ ] **跨境数据传输。** 确保遵守数据驻留要求。
- [ ] **PII 审计追踪。** 记录所有对个人身份信息的访问。
- [ ] **数据匿名化。** 对分析和测试环境的数据进行匿名化。
### 🧪 测试与自动化 (Testing & Automation)
- [ ] **渗透测试。** 定期进行渗透测试(每季度或重大更改后)。
- [ ] **模糊测试。** 使用模糊测试工具发现输入验证漏洞。
- [ ] **安全回归测试。** 在 CI/CD 流水线中包含安全测试。
- [ ] **混沌工程。** 在故障条件下测试 API 弹性。
- [ ] **自动化安全扫描。** 在 CI/CD 中集成 SAST/DAST 工具。
- [ ] **依赖扫描。** 在每次构建时自动扫描易受攻击的依赖项。
- [ ] **容器扫描。** 在部署前扫描 Docker 镜像。
- [ ] **API 契约测试。** 根据定义的 schema 验证 API 响应。
- [ ] **负载测试。** 在高负载下测试 API 行为以识别 DoS 漏洞。
### 🚨 运营安全 (Operational Security)
- [ ] **事件响应计划。** 记录并演练安全事件响应程序。
- [ ] **安全 Runbook。** 为常见安全场景创建 Runbook。
- [ ] **灾难恢复计划。** 定期测试备份和恢复程序。
- [ ] **安全培训。** 为开发团队提供定期的安全培训。
- [ ] **威胁建模。** 为新功能进行威胁建模会议。
- [ ] **漏洞赏金计划。** 考虑实施负责任的披露计划。
- [ ] **安全卫士。** 在开发团队中指定安全卫士。
- [ ] **事后分析。** 在安全事件后进行无责备的事后分析。
- [ ] **安全指标。** 跟踪并报告安全 KPI(MTTD、MTTR、漏洞数量)。
### 🔧 高级技术控制 (Advanced Technical Controls)
- [ ] **API Schema 验证。** 根据 OpenAPI/JSON Schema 验证所有请求。
- [ ] **幂等性。** 为 POST/PUT/PATCH 操作实施幂等性。
- [ ] **分页安全。** 限制页面大小并验证分页参数。
- [ ] **基于游标的分页。** 使用基于游标的分页来防止数据泄露。
- [ ] **缓存安全。** 实施 cache-control 头部并防止缓存投毒。
- [ ] **缓存失效。** 正确使缓存的敏感数据失效。
- [ ] **API Mock 安全。** 确保 mock 环境不暴露生产数据。
- [ ] **请求签名。** 为高安全性操作实施请求签名(AWS Signature v4)。
- [ ] **Nonce 使用。** 使用 nonce 防止重放攻击。
- [ ] **基于时间的验证。** 拒绝时间戳超出可接受窗口的请求。
- [ ] **压缩炸弹保护。** 限制解压后的 payload 大小以防止 DoS。
- [ ] **Unicode 安全。** 验证并净化 Unicode 输入以防止同形异义词攻击。
- [ ] **HATEOAS 实施。** 包含超媒体链接以提高 API 可发现性和安全性。
- [ ] **资源命名约定。** 使用一致、可预测的资源命名(复数名词,小写)。
- [ ] **文件下载安全。** 验证文件路径,设置 Content-Disposition 头部,扫描恶意软件。
- [ ] **流安全。** 为流端点实施适当的身份验证和速率限制。
- [ ] **临时文件清理。** 处理后自动清理临时文件。
- [ ] **证书锁定 (移动端)。** 为移动 API 客户端实施证书锁定。
- [ ] **App 认证。** 使用平台认证 API 验证移动应用的真实性。
- [ ] **越狱/Root 检测。** 检测受损设备并相应地调整安全性。
- [ ] **安全移动存储。** 在移动设备上使用平台 keychain/keystore 存储敏感数据。
- [ ] **服务器发送事件 (SSE) 安全。** 认证 SSE 连接并验证事件源。
- [ ] **长轮询安全。** 为长轮询端点实施超时和身份验证。
- [ ] **WebRTC 安全。** 使用带认证的 TURN/STUN 服务器,加密媒体流。
- [ ] **加密算法选择。** 使用 AES-256-GCM 进行加密,SHA-256+ 进行哈希。
- [ ] **密钥管理生命周期。** 实施密钥生成、轮换、撤销和销毁策略。
- [ ] **证书管理。** 自动更新证书,监控过期日期。
- [ ] **用于敏感操作的 HSM。** 使用硬件安全模块处理涉及敏感密钥的加密操作。
### 🛠️ 安全工具表
| 类别 | 工具 | 描述 |
| :--- | :--- | :--- |
| **SAST** | [SonarQube](https://www.sonarqube.org/) | 针对漏洞的静态代码分析。 |
| **DAST** | [OWASP ZAP](https://www.zaproxy.org/) | 对运行中的 API 进行动态测试。 |
| **DAST** | [Burp Suite](https://portswigger.net/burp) | 专业渗透测试工具包。 |
| **SCA** | [Snyk](https://snyk.io/) | 扫描依赖项中的已知漏洞。 |
| **测试** | [Postman](https://www.postman.com/) | 自动化安全测试脚本。 |
| **扫描** | [Nuclei](https://github.com/projectdiscovery/nuclei) | 带有模板的快速漏洞扫描器。 |
| **模糊测试** | [ffuf](https://github.com/ffuf/ffuf) | 用于发现漏洞的快速 Web 模糊测试工具。 |
| **JWT** | [jwt.io](https://jwt.io/) | JWT 调试器和验证器。 |
| **速率限制** | [Kong](https://konghq.com/) | 具有速率限制和安全策略的 API 网关。 |
| **WAF** | [ModSecurity](https://modsecurity.org/) | 开源 Web 应用防火墙。 |
| **WAF** | [Cloudflare WAF](https://www.cloudflare.com/waf/) | 基于云的 Web 应用防火墙。 |
| **API 安全** | [42Crunch](https://42crunch.com/) | 具有自动化测试的 API 安全平台。 |
| **监控** | [Datadog](https://www.datadoghq.com/) | 安全监控和警报。 |
| **机密** | [GitGuardian](https://www.gitguardian.com/) | 检测代码仓库中的机密。 |
## 🎯 优先级指南 / راهنمای سطح اولویت
### 🔴 关键 (必须有 - 首先实施)
这些是在投入生产之前必须实施的基本安全要求:
- ✅ 所有通信使用 HTTPS/TLS 1.2+
- ✅ 实施认证(OAuth2/JWT,而非 Basic Auth)
- ✅ 使用参数化查询防止 SQL 注入
- ✅ 实施速率限制以防止 DDoS
- ✅ 验证并净化所有输入
- ✅ 不要在响应中暴露敏感数据(堆栈跟踪、数据库错误)
- ✅ 使用强密码哈希(Argon2、bcrypt)
- ✅ 实施正确的 CORS 配置
- ✅ 切勿硬编码机密或 API 密钥
- ✅ 启用 HSTS (HTTP 严格传输安全)
### 🟠 高 (应该有 - 尽快实施)
能显著降低风险的重要安全措施:
- ⚠️ 为敏感账户实施 MFA
- ⚠️ 添加全面的日志记录和监控
- ⚠️ 实施具有适当验证和短 TTL 的 JWT
- ⚠️ 为更改状态的操作添加 CSRF 保护
- ⚠️ 实施 API 版本控制策略
- ⚠️ 设置自动化依赖扫描
- ⚠️ 配置安全头部(CSP、X-Frame-Options 等)
- ⚠️ 实施会话超时和失效
- ⚠️ 添加文件上传验证和恶意软件扫描
- ⚠️ 对数据库访问使用最小权限原则
### 🟡 中 (最好有 - 计划实施)
能改善整体安全状况的额外安全层:
- 📋 实施 API 密钥轮换策略
-📋 添加 webhook 签名验证
- 📋 设置集中式日志记录(ELK、Splunk)
- 📋 为关键操作实施幂等性
- 📋 为敏感操作添加请求签名
- 📋 配置缓存安全和失效
- 📋 实施分页安全
- 📋 添加分布式追踪以进行审计追踪
- 📋 在 CI/CD 中设置自动化安全测试
- 📋 对敏感信息实施数据脱敏
### 🟢 低 (可选 - 高级安全)
针对成熟安全计划的高级安全功能:
- 💡 实施零信任架构
- 💡 添加基于 ML 的 API 滥用检测
- 💡 设置混沌工程测试
- 💡 使用 mTLS 实施服务网格
- 💡 为移动应用添加证书锁定
- 💡 使用 HSM 进行加密操作
- 💡 设置漏洞赏金计划
- 💡 添加高级威胁建模
- 💡 实施行为分析
- 💡 使用 WebAuthn 进行无密码认证
### 🔴 关键 (强制 - 最高优先级)
این موارد پایهای امنیتی هستند که باید قبل از رفتن به Production پیادهسازی شوند:
- ✅ استفاده از HTTPS/TLS 1.2+ برای تمام ارتباطات
- ✅ پیادهسازی احراز هویت (OAuth2/JWT، نه Basic Auth)
- ✅ استفاده از پرسوجوهای پارامتری برای جلوگیری از SQL Injection
- ✅ پیادهسازی Rate Limiting برای جلوگیری از DDoS
- ✅ اعتبارسنجی و پاکسازی تمام ورودیها
- ✅ عدم نمایش دادههای حساس در پاسخها (Stack Trace، خطاهای DB)
- ✅ استفاده از هش قوی برای پسوردها (Argon2، bcrypt)
- ✅ پیکربندی صحیح CORS
- ✅ هرگز سکرتها یا API Key را Hardcode نکنید
- ✅ فعالسازی HSTS
### 🟠 高 (必须具备 - 早期实施)
اقدامات امنیتی مهم که به طور قابل توجهی ریسک را کاهش میدهند:
- ⚠️ پیادهسازی MFA برای حسابهای حساس
- ⚠️ افزودن لاگینگ و مانیتورینگ جامع
- ⚠️ پیادهسازی JWT با اعتبارسنجی صحیح و TTL کوتاه
- ⚠️ افزودن محافظت CSRF برای عملیات تغییر وضعیت
- ⚠️ پیادهسازی استراتژی نسخهبندی API
- ⚠️ راهاندازی اسکن خودکار وابستگیها
- ⚠️ پیکربندی هدرهای امنیتی (CSP، X-Frame-Options و غیره)
- ⚠️ پیادهسازی Timeout و Invalidation برای Session
- ⚠️ افزودن اعتبارسنجی آپلود فایل و اسکن بدافزار
- ⚠️ استفاده از اصل حداقل دسترسی برای دیتابیس
### 🟡 中 (最好具备 - 计划实施)
لایههای امنیتی اضافی که وضعیت امنیتی کلی را بهبود میبخشند:
- 📋 پیادهسازی سیاستهای چرخش API Key
- 📋 افزودن تایید امضای Webhook
- 📋 راهاندازی لاگینگ متمرکز (ELK، Splunk)
- 📋 پیادهسازی Idempotency برای عملیات بحرانی
- 📋 افزودن امضای درخواست برای عملیات حساس
- 📋 پیکربندی امنیت و Invalidation کش
- 📋 پیادهسازی امنیت Pagination
- 📋 افزودن Distributed Tracing برای Audit Trail
- 📋 راهاندازی تست امنیتی خودکار در CI/CD
- 📋 پیادهسازی ماسک کردن دادههای حساس
### 🟢 低 (可选 - 高级安全)
ویژگیهای امنیتی پیشرفته برای برنامههای امنیتی بالغ:
- 💡 پیادهسازی معماری Zero Trust
- 💡 افزودن تشخیص سوء استفاده از API مبتنی بر ML
- 💡 راهاندازی تستهای Chaos Engineering
- 💡 پیادهسازی Service Mesh با mTLS
- 💡 افزودن Certificate Pinning برای اپلیکیشنهای موبایل
- 💡 پیادهسازی HSM برای عملیات رمزنگاری
- 💡 راهاندازی برنامه Bug Bounty
- 💡 افزودن Threat Modeling پیشرفته
- 💡 پیادهسازی تحلیل رفتاری
- 💡 استفاده از WebAuthn برای احراز هویت بدون پسورد
## 📚 常见漏洞与预防 / آسیبپذیریهای رایج و پیشگیری
### 1. SQL 注入 (SQL Injection)
**风险:** 攻击者可以执行任意 SQL 命令。
**预防:**
```
# ❌ 错误 - 易受 SQL Injection 攻击
query = f"SELECT * FROM users WHERE id = {user_id}"
# ✅ 正确 - 使用参数化查询
query = "SELECT * FROM users WHERE id = ?"
cursor.execute(query, (user_id,))
```
### 2. 失效的身份认证
**风险:** 弱认证允许未授权访问。
**预防:**
```
// ✅ GOOD - Proper JWT validation
const jwt = require('jsonwebtoken');
function verifyToken(token) {
try {
return jwt.verify(token, process.env.JWT_SECRET, {
algorithms: ['HS256'], // Enforce algorithm
issuer: 'your-api',
audience: 'your-app'
});
} catch (err) {
throw new Error('Invalid token');
}
}
```
### 3. 失效的对象级授权 (BOLA)
**风险:** 用户可以访问他们不该访问的资源。
**预防:**
```
// ❌ BAD - No authorization check
app.get('/api/documents/:id', async (req, res) => {
const doc = await Document.findById(req.params.id);
res.json(doc);
});
// ✅ GOOD - Verify ownership
app.get('/api/documents/:id', authenticateUser, async (req, res) => {
const doc = await Document.findById(req.params.id);
if (doc.userId !== req.user.id) {
return res.status(403).json({ error: 'Forbidden' });
}
res.json(doc);
});
```
### 4. 速率限制绕过
**风险:** 攻击者可以使 API 不堪重负。
**预防:**
```
// ✅ GOOD - Implement rate limiting
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // limit each IP to 100 requests per windowMs
message: 'Too many requests, please try again later.'
});
app.use('/api/', limiter);
```
### 5. 批量赋值
**风险:** 用户可以修改他们不该修改的字段。
**预防:**
```
# ❌ 错误 - 接受所有字段
user.update(**request.json)
# ✅ 正确 - 白名单允许字段
allowed_fields = ['name', 'email', 'phone']
update_data = {k: v for k, v in request.json.items() if k in allowed_fields}
user.update(**update_data)
```
### 6. 安全配置错误
**风险:** 默认配置暴露漏洞。
**预防:**
```
// ✅ GOOD - Secure headers
const helmet = require('helmet');
app.use(helmet());
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"],
scriptSrc: ["'self'"],
imgSrc: ["'self'", "data:", "https:"]
}
}));
```
### 7. XSS (跨站脚本)
**风险:** 在用户浏览器中执行恶意脚本。
**预防:**
```
// ✅ GOOD - Sanitize output
const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');
const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);
const clean = DOMPurify.sanitize(userInput);
```
### 8. 不安全的直接对象引用 (IDOR)
**风险:** 可预测的 ID 允许枚举攻击。
**预防:**
```
# ✅ 正确 - 使用 UUID 代替序列 ID
import uuid
class Document(db.Model):
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
```
### 1. SQL Injection
**ریسک:** مهاجمان میتوانند دستورات SQL دلخواه اجرا کنند.
**پیشگیری:** از پرسوجوهای پارامتری یا ORM استفاده کنید.
### 2. 失效的身份认证
**ریسک:** احراز هویت ضعیف اجازه دسترسی غیرمجاز میدهد.
**پیشگیری:** از JWT با اعتبارسنجی کامل و الگوریتم اجباری استفاده کنید.
### 3. 失效的对象级别授权 (BOLA)
**ریسک:** کاربران میتوانند به منابعی که نباید دسترسی داشته باشند.
**پیشگیری:** همیشه مالکیت منبع را قبل از بازگرداندن داده بررسی کنید.
### 4. 速率限制绕过
**ریسک:** مهاجمان میتوانند API را تحت فشار قرار دهند.
**پیشگیری:** Rate Limiting مناسب پیادهسازی کنید.
### 5. 批量赋值
**ریسک:** کاربران میتوانند فیلدهایی را که نباید تغییر دهند.
**پیشگیری:** فقط فیلدهای مجاز را در Whitelist قرار دهید.
### 6. 安全配置错误
**ریسک:** پیکربندیهای پیشفرض آسیبپذیریها را فاش میکنند.
**پیشگیری:** از هدرهای امنیتی و پیکربندیهای سختگیرانه استفاده کنید.
### 7. XSS (跨站脚本)
**ریسک:** اسکریپتهای مخرب در مرورگر کاربر اجرا میشوند.
**پیشگیری:** خروجی را Sanitize کنید و از CSP استفاده کنید.
### 8. 不安全的直接对象引用 (IDOR)
**ریسک:** IDهای قابل پیشبینی اجازه حملات شمارش میدهند.
**پیشگیری:** از UUID به جای IDهای ترتیبی استفاده کنید.
## 📖 常见漏洞 / آسیبپذیریهای رایج
有关常见 API 漏洞及其预防方法的详细信息,请参阅:
**[📖 VULNERABILITIES.md](VULNERABILITIES.md)** - 涵盖 OWASP API 安全 Top 10 的完整指南
برای اطلاعات دقیق درباره آسیبپذیریهای رایج API و نحوه جلوگیری از آنها، مراجعه کنید به:
**[📖 VULNERABILITIES.md](VULNERABILITIES.md)** - راهنمای کامل شامل OWASP API Security Top 10
## 💻 实施示例 / مثالهای پیادهسازی
有关实用代码示例和实施指南,请参阅:
**[📖 EXAMPLES.md](EXAMPLES.md)** - Node.js、Python 等的真实世界代码示例
برای مثالهای کد عملی و راهنماهای پیادهسازی، مراجعه کنید به:
**[📖 EXAMPLES.md](EXAMPLES.md)** - مثالهای کد واقعی در Node.js، Python و بیشتر
## 🚀 快速入门清单 / چکلیست شروع سریع
### 对于新项目 (最低安全基准)
#### 第 1 周:基础
- [ ] 设置带有有效 TLS 证书的 HTTPS
- [ ] 实施认证(OAuth2 或 JWT)
- [ ] 为所有端点添加输入验证
- [ ] 正确配置 CORS
- [ ] 设置基本速率限制
- [ ] 使用环境变量存储机密
- [ ] 启用安全头部(helmet.js 或同等功能)
#### 第 2 周:数据保护
- [ ] 实施参数化数据库查询
- [ ] 添加密码哈希(Argon2/bcrypt)
- [ ] 使用最小权限设置数据库连接
- [ ] 实施请求大小限制
- [ ] 添加文件上传验证
- [ ] 配置正确的错误处理(生产中无堆栈跟踪)
#### 第 3 周:监控与测试
- [ ] 设置集中式日志记录
- [ ] 为安全事件配置警报
- [ ] 向 CI/CD 添加依赖扫描
- [ ] 实施自动化安全测试
- [ ] 记录 API 安全要求
- [ ] 创建事件响应计划
#### 第 4 周:高级安全
- [ ] 为管理员账户添加 MFA
- [ ] 实施 API 版本控制
- [ ] 设置自动备份
- [ ] 配置会话管理
- [ ] 添加 CSRF 保护
- [ ] 进行初步安全审计
### 针对新项目 (最低安全基线)
#### 第 1 周:基础建设
- [ ] راهاندازی HTTPS با گواهی TLS معتبر
- [ ] پیادهسازی احراز هویت (OAuth2 یا JWT)
- [ ] افزودن اعتبارسنجی ورودی برای تمام Endpointها
- [ ] پیکربندی صحیح CORS
- [ ] راهاندازی Rate Limiting پایه
- [ ] استفاده از متغیرهای محیطی برای سکرتها
- [ ] فعالسازی هدرهای امنیتی
#### 第 2 周:数据保护
- [ ] پیادهسازی پرسوجوهای پارامتری دیتابیس
- [ ] افزودن هش پسورد (Argon2/bcrypt)
- [ ] راهاندازی اتصال دیتابیس با حداقل دسترسی
- [ ] پیادهسازی محدودیت اندازه درخواست
- [ ] افزودن اعتبارسنجی آپلود فایل
- [ ] پیکربندی مدیریت خطای صحیح
#### 第 3 周:监控和测试
- [ ] راهاندازی لاگینگ متمرکز
- [ ] پیکربندی هشدارها برای رویدادهای امنیتی
- [ ] افزودن اسکن وابستگی به CI/CD
- [ ] پیادهسازی تستهای امنیتی خودکار
- [ ] مستندسازی الزامات امنیتی API
- [ ] ایجاد برنامه پاسخ به حوادث
#### 第 4 周:高级安全
- [ ] افزودن MFA برای حسابهای ادمین
- [ ] پیادهسازی نسخهبندی API
- [ ] راهاندازی پشتیبانگیری خودکار
- [ ] پیکربندی مدیریت Session
- [ ] افزودن محافظت CSRF
- [ انجام ممیزی امنیتی اولیه
## 🇮🇷 波斯版 (نسخه فارسی)
### 🔑 身份认证与授权
- [ ] **عدم استفاده از Basic Auth.** از روشهای استاندارد مثل OAuth2 یا JWT استفاده کنید.
- [ ] **چرخ را دوباره اختراع نکنید.** از کتابخانههای تست شده برای هش کردن پسورد (مثل Argon2 یا bcrypt) استفاده کنید.
- [ ] **محدودیت تلاش مجدد.** برای جلوگیری از حملات Brute-force، تعداد دفعات ورود ناموفق را محدود کنید.
- [ ] **احراز هویت چندعاملی (MFA).** برای حسابهای حساس حتما MFA پیادهسازی کنید.
- [ ] **بازیابی امن پسورد.** از توکنهای یکبار مصرف و کوتاهمدت برای بازیابی پسورد استفاده کنید.
- [ ] **بهترین شیوههای OAuth 2.1.** از PKCE برای تمام جریانهای OAuth استفاده کنید.
- [ ] **سیاست قفل حساب.** تاخیرهای تدریجی یا قفل موقت پس از تلاشهای ناموفق پیادهسازی کنید.
- [ ] **پیچیدگی پسورد.** حداقل طول (۱۲+ کاراکتر) و الزامات پیچیدگی را اعمال کنید.
- [ ] **پیادهسازی RBAC.** کنترل دسترسی مبتنی بر نقش برای مدیریت مجوزها پیادهسازی کنید.
- [ ] **ABAC برای سناریوهای پیچیده.** از کنترل دسترسی مبتنی بر ویژگی برای مجوزهای دقیق استفاده کنید.
- [ ] **امنیت ورود اجتماعی.** پارامتر state در OAuth را اعتبارسنجی کنید و ایمیل را از ارائهدهندگان اجتماعی تایید کنید.
- [ ] **احراز هویت بیومتریک.** از APIهای بیومتریک امن خاص پلتفرم استفاده کنید (Face ID، Touch ID، Windows Hello).
- [ ] **وراثت مجوز.** سلسله مراتب و قوانین وراثت مجوز واضح طراحی کنید.
- [ ] **امتیازات افزایشیافته موقت.** افزایش امتیاز محدود به زمان با لاگ ممیزی پیادهسازی کنید.
### 🎫 JWT 安全
- [ ] **کلیدهای پیچیده.** از یک Secret Key تصادفی و پیچیده (حداقل ۳۲ کاراکتر) استفاده کنید.
- [ ] **تحمیل الگوریتم.** به هدر توکن اعتماد نکنید و الگوریتم (HS256 یا RS256) را در سمت سرور اجباری کنید.
- [ ] **زمان انقضای کوتاه.** مقدار TTL را تا حد ممکن کوتاه در نظر بگیرید.
- [ ] **عدم ذخیره داده حساس.** پیلود JWT به راحتی دکود میشود؛ پسوردها یا دادههای هویتی را در آن قرار ندهید.
- [ ] **استراتژی لغو توکن.** مکانیزم لیست سیاه یا Refresh Token برای لغو توکنها پیادهسازی کنید.
- [ ] **اعتبارسنجی Claimهای JWT.** همیشه claimهای `iss`، `aud`، `exp`، `nbf` را اعتبارسنجی کنید.
- [ ] **امنیت Refresh Token.** Refresh Tokenها را به صورت امن ذخیره کنید، در هنگام استفاده چرخش دهید و به دستگاه/IP متصل کنید.
- [ ] **اتصال توکن.** توکنها را با استفاده از اثر انگشت یا شناسه دستگاه به کلاینتهای خاص متصل کنید.
### 🚦 访问控制与流量
- [ ] **Rate Limiting.** برای جلوگیری از حملات DDoS و Brute-force، محدودیت تعداد درخواست بگذارید.
- [ ] **الزام HTTPS.** از TLS 1.2 به بالا برای تمامی ارتباطات استفاده کنید.
- [ ] **استفاده از HSTS.** برای جلوگیری از حملات SSL Strip، هدر HSTS را فعال کنید.
- [ ] **تنظیمات CORS.** فقط به دامنههای مورد اعتماد اجازه دسترسی دهید. از `*` استفاده نکنید.
- [ ] **لیست سفید IP.** برای APIهای خصوصی، دسترسی را به محدودههای IP خاص محدود کنید.
- [ ] **Rate Limiting تطبیقی.** محدودیتهای نرخ مختلف بر اساس سطح کاربر و حساسیت Endpoint پیادهسازی کنید.
- [ ] **کاهش DDoS.** از CDN با محافظت DDoS استفاده کنید (Cloudflare، Akamai، AWS Shield).
- [ ] **تشخیص ربات.** مکانیزمهای تشخیص ربات پیادهسازی کنید (reCAPTCHA، hCaptcha، تحلیل رفتاری).
- [ ] **مسدودسازی جغرافیایی.** در صورت لزوم، دسترسی API را بر اساس موقعیت جغرافیایی محدود کنید.
- [ ] **پیکربندی TLS.** رمزهای ضعیف را غیرفعال کنید، از Perfect Forward Secrecy استفاده کنید، TLS 1.3 را فعال کنید.
### 📥 输入验证
- [ ] **متدهای صحیح HTTP.** استفاده درست از GET، POST، PUT و DELETE.
- [ ] **اعتبارسنجی Content-Type.** هدرهای Accept و Content-Type را چک کنید.
- [ ] **پاکسازی ورودی.** جلوگیری از حملات XSS، SQL Injection و NoSQL Injection.
- [ ] **آپلود فایل.** نوع فایل، حجم و محتوای آن را بررسی کنید تا بدافزار نباشد.
- [ ] **محدودیت اندازه درخواست.** از حملات Payload بزرگ جلوگیری کنید.
- [ ] **اعتبارسنجی Schema.** تمام ورودیها را در برابر Schemaهای JSON/XML سختگیرانه اعتبارسنجی کنید.
- [ ] **اعتبارسنجی لیست سفید.** از لیست سفید به جای لیست سیاه برای اعتبارسنجی ورودی استفاده کنید.
- [ ] **جلوگیری از Path Traversal.** مسیرهای فایل را پاکسازی کنید و از حملات Directory Traversal جلوگیری کنید.
- [ ] **جلوگیری از Command Injection.** هرگز ورودی کاربر را مستقیماً به دستورات سیستم منتقل نکنید.
- [ ] **جلوگیری از LDAP Injection.** کاراکترهای خاص را در کوئریهای LDAP Escape کنید.
- [ ] **جلوگیری از XXE.** پردازش Entity خارجی را در پارسرهای XML غیرفعال کنید.
- [ ] **جلوگیری از SSRF.** URLها را برای درخواستهای سمت سرور اعتبارسنجی و لیست سفید کنید.
- [ ] **پاکسازی Metadata فایل.** Metadata را از فایلهای آپلود شده حذف کنید (EXIF، IPTC).
### 📤 输出与响应安全
- [ ] **غیرفعال کردن X-Powered-By.** اطلاعات تکنولوژی سرور را لو ندهید.
- [ ] **پیامهای خطای عمومی.** هرگز Stack Trace یا خطاهای داخلی دیتابیس را به کاربر نمایش ندهید.
- [ ] **ماسک کردن دادهها.** دادههای حساس (مثل شماره کارت) را در پاسخها ماسک کنید.
- [ ] **هدرهای امنیتی.** از `X-Content-Type-Options: nosniff`، `X-Frame-Options: deny` استفاده کنید.
- [ ] **فرمت خطای یکپارچه.** از ساختار پاسخ خطای استاندارد در تمام Endpointها استفاده کنید.
- [ ] **استانداردسازی کد خطا.** کدهای خطا را برای سناریوهای مختلف تعریف و مستند کنید.
- [ ] **امنیت حالت Debug.** اطمینان حاصل کنید که حالت Debug در محیط Production غیرفعال است.
- [ ] **محدودیت اندازه پاسخ.** اندازه Payload پاسخ را برای جلوگیری از خستگی منابع محدود کنید.
- [ ] **کدهای وضعیت HTTP صحیح.** از کدهای وضعیت صحیح استفاده کنید (200، 201، 400، 401، 403، 404، 500 و غیره).
- [ ] **حذف اثر انگشت سرور.** شماره نسخه و امضاهای سرور را از پاسخها حذف کنید.
- [ ] **اجبار Content-Type.** همیشه هدرهای Content-Type صحیح را برای پاسخها تنظیم کنید.
### 🗄️ 数据库安全
- [ ] **پرسوجوهای پارامتری.** از ORMها یا Prepared Statements برای جلوگیری از SQL Injection استفاده کنید.
- [ ] **اصل حداقل دسترسی.** API باید با کاربری به دیتابیس وصل شود که فقط دسترسیهای ضروری را دارد.
- [ ] **رمزنگاری دادههای حساس.** اطمینان حاصل کنید که دادههای حساس در دیتابیس به صورت رمزنگاری شده ذخیره میشوند.
- [ ] **لاگهای ممیزی.** لاگینگ را برای عملیات حساس دیتابیس فعال کنید.
- [ ] **رمزنگاری در حین انتقال.** از TLS/SSL برای اتصالات دیتابیس استفاده کنید.
- [ ] **فایروال دیتابیس.** دسترسی دیتابیس را فقط به سرورهای اپلیکیشن محدود کنید.
- [ ] **امنیت Connection Pooling.** Connection Poolهای دیتابیس را به درستی پیکربندی و ایمن کنید.
- [ ] **رمزنگاری Backup.** پشتیبانهای دیتابیس را رمزنگاری کنید و رویههای بازیابی را تست کنید.
- [ ] **جلوگیری از NoSQL Injection.** ورودیها را برای MongoDB، Redis و سایر دیتابیسهای NoSQL پاکسازی کنید.
- [ ] **مانیتورینگ فعالیت دیتابیس.** مانیتورینگ بلادرنگ برای کوئریهای مشکوک دیتابیس پیادهسازی کنید.
### 📝 日志与监控
- [ ] **عدم ذخیره PII در لاگ.** هرگز پسوردها، توکنها یا دادههای شخصی کاربران را لاگ نکنید.
- [ ] **لاگینگ متمرکز.** از ابزارهایی مثل ELK، Splunk یا Datadog استفاده کنید.
- [ ] **هشداردهی (Alerting).** برای فعالیتهای مشکوک (مثلاً افزایش ناگهانی خطاهای 401 یا 403) هشدار تنظیم کنید.
- [ ] **مسیر ممیزی.** برای تمام اقدامات اداری، چه کسی چه کاری و چه زمانی انجام داده را لاگ کنید.
### ☁️ 基础设施与 CI/CD
- [ ] **مدیریت سکرتها.** از Vault یا متغیرهای محیطی استفاده کنید. هرگز کلیدها را در کد قرار ندهید (Hardcode).
- [ ] **اسکن وابستگیها.** از ابزارهایی مثل `npm audit` یا Snyk برای یافتن پکیجهای آسیبپذیر استفاده کنید.
- [ ] **امنیت کانتینر.** ایمیجهای Docker را برای یافتن آسیبپذیریها اسکن کنید.
- [ ] **API Gateway.** از Gateway (مثل Kong، Nginx) برای سیاستهای امنیتی جهانی استفاده کنید.
### 🌐 现代技术 (GraphQL/gRPC/WebSockets)
- [ ] **GraphQL: محدودیت عمق.** جلوگیری از حملات کوئریهای تودرتو (Nested Queries).
- [ ] **GraphQL: غیرفعالسازی Introspection.** این ویژگی را در محیط Production غیرفعال کنید.
- [ ] **gRPC: الزام TLS.** همیشه از برای ارتباطات gRPC استفاده کنید.
- [ ] **WebSockets: اعتبارسنجی Origin.** هدر Origin را برای جلوگیری از حملات CSWSH چک کنید.
- [ ] **WebSockets: احراز هویت.** در طول Handshake اولیه احراز هویت انجام دهید.
### 🔐 Session 和 API Key 管理
- [ ] **ذخیرهسازی امن Session.** Sessionها را در سمت سرور با IDهای تصادفی امن ذخیره کنید.
- [ ] **Timeout برای Session.** Timeoutهای Idle و مطلق برای Session پیادهسازی کنید.
- [ ] **ابطال Session.** Sessionها را در هنگام خروج و تغییر پسورد به درستی ابطال کنید.
- [ ] **چرخش API Key.** سیاستهای چرخش خودکار کلید پیادهسازی کنید (مثلاً هر ۹۰ روز).
- [ ] **محدوده API Key.** API Keyها را به Endpointها و عملیات خاص محدود کنید.
- [ ] **ذخیرهسازی کلید.** هرگز API Keyها را در کد سمت کلاینت یا URLها قرار ندهید.
- [ ] **کلیدهای متعدد برای هر کاربر.** به کاربران اجازه دهید کلیدهای متعدد برای اپلیکیشنهای مختلف تولید کنند.
- [ ] **لغو کلید.** قابلیت لغو فوری کلید را فراهم کنید.
### 🛡️ CSRF 和 Clickjacking 防护
- [ ] **توکنهای CSRF.** توکنهای ضد CSRF برای عملیات تغییر وضعیت پیادهسازی کنید.
- [ ] **کوکیهای SameSite.** از `SameSite=Strict` یا `SameSite=Lax` برای کوکیها استفاده کنید.
- [ ] **Double Submit Cookie.** الگوی Double Submit Cookie برای محافظت CSRF پیادهسازی کنید.
- [ ] **X-Frame-Options.** روی `DENY` یا `SAMEORIGIN` تنظیم کنید تا از Clickjacking جلوگیری شود.
- [ ] **Content-Security-Policy.** CSP را با دستورالعمل `frame-ancestors` پیادهسازی کنید.
- [ ] **هدرهای سفارشی.** هدرهای سفارشی (مثل `X-Requested-With`) را برای فراخوانیهای API الزامی کنید.
### 📋 API 版本控制与文档
- [ ] **نسخه در URL یا Header.** از `/v1/` در URL یا هدر `Accept-Version` استفاده کنید.
- [ ] **سیاست منسوخ شدن.** جدول زمانی منسوخ شدن API را به وضوح اطلاع دهید.
- [ ] **سازگاری با نسخه قبلی.** سازگاری با نسخه قبلی را در نسخههای اصلی حفظ کنید.
- [ ] **مستندات امن.** مستندات Swagger/OpenAPI را در Production با احراز هویت محافظت کنید.
- [ ] **حذف مثالهای حساس.** API Keyها یا اعتبارنامههای واقعی را در مستندات قرار ندهید.
- [ ] **Changelog API.** یک Changelog عمومی برای بهروزرسانیهای مرتبط با امنیت نگهداری کنید.
- [ ] **اعتبارسنجی Schema.** درخواستها را در برابر تعاریف OpenAPI/JSON Schema اعتبارسنجی کنید.
### 🔗 Third-Party 和 Webhook 安全
- [ ] **ارزیابی Vendor.** قبل از ادغام، ارزیابیهای امنیتی APIهای شخص ثالث انجام دهید.
- [ ] **ادغام با حداقل امتیاز.** حداقل مجوزهای لازم را از سرویسهای شخص ثالث درخواست کنید.
- [ ] **تایید امضای Webhook.** امضاهای Webhook (مثل HMAC) را قبل از پردازش تایید کنید.
- [ ] **لیست سفید IP برای Webhook.** Endpointهای Webhook را به محدودههای IP شناخته شده محدود کنید.
- [ ] **کلیدهای Idempotency.** از کلیدهای Idempotency برای جلوگیری از پردازش تکراری Webhook استفاده کنید.
- [ ] **منطق تلاش مجدد Webhook.** Backoff نمایی برای تلاشهای مجدد Webhook پیادهسازی کنید.
- [ ] **پیکربندی Timeout.** Timeoutهای مناسب برای فراخوانیهای API شخص ثالث تنظیم کنید.
- [ ] **الگوی Circuit Breaker.** Circuit Breakerها را برای مدیریت شکستهای شخص ثالث به صورت مناسب پیادهسازی کنید.
### 🏗️ 高级安全架构
- [ ] **مدل Zero Trust.** هرگز اعتماد نکنید، همیشه تایید کنید - هر درخواست را احراز هویت کنید.
- [ ] **امنیت Service Mesh.** از mTLS بین میکروسرویسها استفاده کنید (Istio/Linkerd).
- [ ] **سیاستهای API Gateway.** احراز هویت، Rate Limiting و لاگینگ را در Gateway متمرکز کنید.
- [ ] **امنیت Serverless.** نقشهای IAM با حداقل امتیاز را برای Lambda/Cloud Functions اعمال کنید.
- [ ] **تشخیص سوء استفاده از API.** تشخیص ناهنجاری مبتنی بر ML برای الگوهای غیرعادی پیادهسازی کنید.
- [ ] **Distributed Tracing.** از ابزارهایی مثل Jaeger یا Zipkin برای مسیرهای ممیزی امنیتی استفاده کنید.
- [ ] **چرخش سکرتها.** چرخش اعتبارنامههای دیتابیس و API Keyها را خودکار کنید.
- [ ] **تقسیمبندی شبکه.** سرویسهای API را در مناطق شبکه جداگانه ایزوله کنید.
### ⚖️ 合规与隐私
- [ ] **انطباق GDPR.** حقوق موضوع داده (دسترسی، حذف، قابلیت حمل) را پیادهسازی کنید.
- [ ] **به حداقل رساندن داده.** فقط دادههای لازم را جمعآوری و ذخیره کنید.
- [ ] **مدیریت رضایت.** رضایت کاربر را برای پردازش داده پیگیری و رعایت کنید.
- [ ] **حق فراموشی.** گردشهای کار حذف خودکار داده را پیادهسازی کنید.
- [ ] **سیاستهای نگهداری داده.** دورههای نگهداری داده را تعریف و اجرا کنید.
- [ ] **حریم خصوصی از طریق طراحی.** ملاحظات حریم خصوصی را از ابتدا در طراحی API بگنجانید.
- [ ] **انتقال داده بین مرزی.** انطباق با الزامات محل سکونت داده را تضمین کنید.
- [ ] **مسیر ممیزی برای PII.** تمام دسترسیها به اطلاعات شخصی قابل شناسایی را لاگ کنید.
- [ ] **ناشناسسازی داده.** داده را برای محیطهای تحلیل و تست ناشناس کنید.
### 🧪 测试与自动化
- [ ] **تست نفوذ.** تستهای نفوذ منظم انجام دهید (سهماهه یا پس از تغییرات عمده).
- [ ] **Fuzzing.** از ابزارهای Fuzzing برای کشف آسیبپذیریهای اعتبارسنجی ورودی استفاده کنید.
- [ ] **تست رگرسیون امنیتی.** تستهای امنیتی را در Pipeline CI/CD بگنجانید.
- [ ] **Chaos Engineering.** انعطافپذیری API را تحت شرایط شکست تست کنید.
- [ ] **اسکنهای امنیتی خودکار.** ابزارهای SAST/DAST را در CI/CD ادغام کنید.
- [ ] **اسکن وابستگی.** به طور خودکار وابستگیهای آسیبپذیر را در هر Build اسکن کنید.
- [ ] **اسکن کانتینر.** ایمیجهای Docker را قبل از استقرار اسکن کنید.
- [ ] **تست قرارداد API.** پاسخهای API را در برابر Schemaهای تعریف شده اعتبارسنجی کنید.
- [ ] **تست بار.** رفتار API را تحت بار بالا برای شناسایی آسیبپذیریهای DoS تست کنید.
### 🚨 运维安全
- [ ] **برنامه پاسخ به حوادث.** رویههای پاسخ به حوادث امنیتی را مستند و تمرین کنید.
- [ ] **Runbookهای امنیتی.** Runbook برای سناریوهای امنیتی رایج ایجاد کنید.
- [ ] **برنامه بازیابی از بلایا.** رویههای پشتیبانگیری و بازیابی را به طور منظم تست کنید.
- [ ] **آموزش امنیتی.** آموزش امنیتی منظم برای تیم توسعه ارائه دهید.
- [ ] **مدلسازی تهدید.** جلسات مدلسازی تهدید برای ویژگیهای جدید برگزار کنید.
- [ ] **برنامه Bug Bounty.** پیادهسازی برنامه افشای مسئولانه را در نظر بگیرید.
- [ ] **قهرمانان امنیتی.** قهرمانان امنیتی را در تیمهای توسعه تعیین کنید.
- [ ] **تحلیل پس از مرگ.** پس از حوادث امنیتی، تحلیلهای بدون سرزنش انجام دهید.
- [ ] **معیارهای امنیتی.** KPIهای امنیتی را پیگیری و گزارش کنید (MTTD، MTTR، تعداد آسیبپذیریها).
### 🔧 高级技术控制
- [ ] **اعتبارسنجی Schema API.** تمام درخواستها را در برابر OpenAPI/JSON Schema اعتبارسنجی کنید.
- [ ] **Idempotency.** Idempotency را برای عملیات POST/PUT/PATCH پیادهسازی کنید.
- [ ] **امنیت Pagination.** اندازه صفحه را محدود کنید و پارامترهای Pagination را اعتبارسنجی کنید.
- [ ] **Pagination مبتنی بر Cursor.** از Pagination مبتنی بر Cursor برای جلوگیری از نشت داده استفاده کنید.
- [ ] **امنیت Cache.** هدرهای Cache-Control را پیادهسازی کنید و از Cache Poisoning جلوگیری کنید.
- [ ] **ابطال Cache.** دادههای حساس کش شده را به درستی ابطال کنید.
- [ ] **امنیت Mock API.** اطمینان حاصل کنید که محیطهای Mock دادههای Production را فاش نمیکنند.
- [ ] **امضای درخواست.** امضای درخواست را برای عملیات با امنیت بالا پیادهسازی کنید (AWS Signature v4).
- [ ] **استفاده از Nonce.** از Nonceها برای جلوگیری از حملات Replay استفاده کنید.
- [ ] **اعتبارسنجی مبتنی بر زمان.** درخواستها با Timestampهای خارج از پنجره قابل قبول را رد کنید.
- [ ] **محافظت از بمب فشردهسازی.** اندازه Payload فشردهسازی نشده را برای جلوگیری از DoS محدود کنید.
- [ ] **امنیت Unicode.** ورودی Unicode را برای جلوگیری از حملات Homograph اعتبارسنجی و پاکسازی کنید.
- [ ] **پیادهسازی HATEOAS.** لینکهای Hypermedia را برای قابلیت کشف و امنیت بهتر API بگنجانید.
- [ ] **قراردادهای نامگذاری منبع.** از نامگذاری منبع یکپارچه و قابل پیشبینی استفاده کنید (اسامی جمع، حروف کوچک).
- [ ] **امنیت دانلود فایل.** مسیرهای فایل را اعتبارسنجی کنید، هدرهای Content-Disposition را تنظیم کنید، بدافزار را اسکن کنید.
- [ ] **امنیت Streaming.** احراز هویت و Rate Limiting مناسب برای Endpointهای Streaming پیادهسازی کنید.
- [ ] **پاکسازی فایلهای موقت.** فایلهای موقت را پس از پردازش به طور خودکار پاک کنید.
- [ ] **Certificate Pinning (موبایل).** Certificate Pinning را کلاینتهای API موبایل پیادهسازی کنید.
- [ ] **App Attestation.** اصالت اپلیکیشن موبایل را با استفاده از APIهای Attestation پلتفرم تایید کنید.
- [ ] **تشخیص Jailbreak/Root.** دستگاههای به خطر افتاده را تشخیص دهید و امنیت را بر این اساس تنظیم کنید.
- [ ] **ذخیرهسازی امن موبایل.** از Keychain/Keystore پلتفرم برای دادههای حساس در موبایل استفاده کنید.
- [ ] **امنیت Server-Sent Events (SSE).** اتصالات SSE را احراز هویت کنید و منابع رویداد را اعتبارسنجی کنید.
- [ ] **امنیت Long Polling.** Timeoutها و احراز هویت را برای Endpointهای Long Polling پیادهسازی کنید.
- [ ] **امنیت WebRTC.** از سرورهای TURN/STUN با احراز هویت استفاده کنید، جریانهای رسانه را رمزنگاری کنید.
- [ ] **انتخاب الگوریتم رمزنگاری.** از AES-256-GCM برای رمزنگاری، SHA-256+ برای هش استفاده کنید.
- [ ] **چرخه عمر مدیریت کلید.** سیاستهای تولید، چرخش، لغو و نابودی کلید را پیادهسازی کنید.
- [ ] **مدیریت گواهی.** تمدید گواهی را خودکار کنید، تاریخهای انقضا را مانیتور کنید.
- [ ] **HSM برای عملیات حساس.** از ماژولهای امنیتی سختافزاری برای عملیات رمزنگاری با کلیدهای حساس استفاده کنید.
### 🛠️ 安全工具表
| دستهبندی | ابزار | توضیحات |
| :--- | :--- | :--- |
| **SAST** | [SonarQube](https://www.sonarqube.org/) | تحلیل استاتیک کد برای یافتن آسیبپذیریها. |
| **DAST** | [OWASP ZAP](https://www.zaproxy.org/) | تست داینامیک APIهای در حال اجرا. |
| **SCA** | [Snyk](https://snyk.io/) | اسکن کتابخانهها برای یافتن نسخههای ناامن. |
| **تست** | [Postman](https://www.postman.com/) | اسکریپتهای تست خودکار امنیت. |
### 🛠️ 工具与资源 / ابزارها و منابع
#### 安全标准与框架
- **[OWASP API Security Top 10](https://owasp.org/www-project-api-security/)** - 十大 API 安全风险
- **[OWASP ASVS](https://owasp.org/www-project-application-security-verification-standard/)** - 应用程序安全验证标准
- **[NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)** - 综合安全框架
- **[CIS Controls](https://www.cisecurity.org/controls)** - 关键安全控制
- **[ISO/IEC 27001](https://www.iso.org/isoiec-27001-information-security.html)** - 信息安全管理
- **[PCI DSS](https://www.pcisecuritystandards.org/)** - 支付卡行业数据安全标准
- **[SOC 2](https://www.aicpa.org/interestareas/frc/assuranceadvisoryservices/aicpasoc2report.html)** - 服务组织控制 2
- **[GDPR](https://gdpr.eu/)** - 通用数据保护条例
- **[HIPAA](https://www.hhs.gov/hipaa/index.html)** - 健康保险流通与责任法案
#### 测试与扫描工具
- **[Postman Security Scanner](https://www.postman.com/automated-testing/)** - 自动化 API 安全测试
- **[Insomnia Inso](https://insomnia.rest/products/inso)** - 用于 API 测试的 CLI 工具
- **[REST Assured](https://rest-assured.io/)** - 用于 REST API 测试的 Java 库
- **[Karate DSL](https://github.com/karatelabs/karate)** - API 测试自动化框架
- **[Dredd](https://dredd.org/)** - HTTP API 测试框架
- **[Schemathesis](https://schemathesis.readthedocs.io/)** - API 的基于属性的测试
#### API 网关与管理
- **[Kong](https://konghq.com/)** - 云原生 API 网关
- **[Tyk](https://tyk.io/)** - 开源 API 网关
- **[AWS API Gateway](https://aws.amazon.com/api-gateway/)** - 托管 API 网关服务
- **[Azure API Management](https://azure.microsoft.com/en-us/services/api-management/)** - 全生命周期 API 管理
- **[Apigee](https://cloud.google.com/apigee)** - API 管理平台
- **[MuleSoft](https://www.mulesoft.com/)** - 集成和 API 平台
#### 监控与可观测性
- **[Datadog](https://www.datadoghq.com/)** - 监控和安全平台
- **[New Relic](https://newrelic.com/)** - 可观测性平台
- **[Grafana](https://grafana.com/)** - 指标可视化
- **[Prometheus](https://prometheus.io/)** - 监控和警报工具包
- **[Jaeger](https://www.jaegertracing.io/)** - 分布式追踪
- **[Zipkin](https://zipkin.io/)** - 分布式追踪系统
#### 文档与设计
- **[Swagger/OpenAPI](https://swagger.io/)** - API 文档标准
- **[Redoc](https://redocly.com/)** - OpenAPI 文档生成器
- **[Stoplight](https://stoplight.io/)** - API 设计和文档
- **[Postman](https://www.postman.com/)** - API 开发和文档
#### 学习资源
- **[API Security Articles](https://apisecurity.io/)** - 每周 API 安全通讯
- **[PortSwigger Web Security Academy](https://portswigger.net/web-security)** - 免费在线安全培训
- **[OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)** - 安全备忘单
- **[HackerOne Hacktivity](https://hackerone.com/hacktivity)** - 真实世界的漏洞报告
- **[API Security Best Practices (Microsoft)](https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design)** - API 设计指南
#### 安全标准与框架
- **OWASP API Security Top 10** - ۱۰ ریسک برتر امنیت API
- **ISO/IEC 27001** - مدیریت امنیت اطلاعات
- **PCI DSS** - استاندارد امنیت داده صنعت کارت پرداخت
- **GDPR** - مقررات عمومی حفاظت از داده
- **NIST Cybersecurity Framework** - چارچوب جامع
- 保持描述简洁明了
- 添加英语和波斯语翻译
- 遵循现有格式和结构
### 📄 许可证
本项目基于 MIT License 授权 - 详情请参阅 [LICENSE](LICENSE) 文件。
### ⭐ 表示支持
如果您觉得此清单有帮助,请给它一个 Star!这有助于其他人发现此资源。
[](https://github.com/MrAlfak/API-Security-Checklist/stargazers)
### 📞 联系与支持
- **问题反馈:** [GitHub Issues](https://github.com/MrAlfak/API-Security-Checklist/issues)
- **讨论交流:** [GitHub Discussions](https://github.com/MrAlfak/API-Security-Checklist/discussions)
- **安全漏洞:** 请通过 GitHub Security Advisories 私下报告安全问题
**免责声明:** 本清单仅作为指南,不保证完全安全。请务必进行全面的安全评估,并随时了解最新的安全实践。
**سلب مسئولیت:** این چکلیست به عنوان راهنما ارائه شده و امنیت کامل را تضمین نمیکند. همیشه ارزیابیهای امنیتی کامل انجام دهید و با آخرین روشهای امنیتی بهروز باشید.
标签:API安全, API密钥检测, API网关, API设计, CI/CD安全, CISA项目, CSRF防护, DevSecOps, GraphQL, gRPC, JSON输出, JWT安全, Llama, MITM代理, Python工具, SQL查询, WebSocket, Web安全, XML 请求, 上游代理, 依赖分析, 加密, 安全开发, 安全架构, 安全检查清单, 授权, 漏洞扫描器, 白名单, 网络安全, 蓝队分析, 输入验证, 逆向工具, 隐私保护