MrAlfak/API-Security-Checklist

GitHub: MrAlfak/API-Security-Checklist

一份覆盖 API 全生命周期的安全设计、开发与审计综合清单,包含最佳实践与代码示例。

Stars: 0 | Forks: 0

# 🛡️ Ultimate API 安全清单 ### 设计、测试和发布安全 API 的全面指南。 ### API 安全综合清单 - 安全设计、测试和发布完整指南。 [![GitHub stars](https://img.shields.io/github/stars/MrAlfak/API-Security-Checklist?style=for-the-badge)](https://github.com/MrAlfak/API-Security-Checklist/stargazers) [![GitHub forks](https://img.shields.io/github/forks/MrAlfak/API-Security-Checklist?style=for-the-badge)](https://github.com/MrAlfak/API-Security-Checklist/network) [![GitHub issues](https://img.shields.io/github/issues/MrAlfak/API-Security-Checklist?style=for-the-badge)](https://github.com/MrAlfak/API-Security-Checklist/issues) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) [![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=for-the-badge)](CONTRIBUTING.md) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](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!这有助于其他人发现此资源。 [![GitHub stars](https://img.shields.io/github/stars/MrAlfak/API-Security-Checklist?style=social)](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 请求, 上游代理, 依赖分析, 加密, 安全开发, 安全架构, 安全检查清单, 授权, 漏洞扫描器, 白名单, 网络安全, 蓝队分析, 输入验证, 逆向工具, 隐私保护