English | 繁中版 | 简中版 | العربية | Azərbaycan | Български | বাংলা | Català | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська
Những giải pháp an toàn và cách khắc phục khi thiết kế, kiểm tra và phát hành API cho ứng dụng của bạn.
- Không sử dụng
Basic Auth. Sử dụng giao thức xác thực tiêu chuẩn. - Không tự thiết kế lại các giải pháp
Authentication,token generation,password storage. Hãy sử dụng các giải pháp tiêu chuẩn. - Sử dụng
Max Retryvà chức năng Auto Block ở trang Login. - Mã hóa các dữ liệu nhạy cảm.
- Giới hạn request (Throttling) để phòng tránh các tấn công DDoS / brute-force.
- Sử dụng giao thức HTTPS ở phía server để tránh MITM (Man In The Middle Attack).
- Sử dụng
HSTSheader với SSL để tránh tấn công SSL Strip. - Tắt danh sách thư mục.
- Đối với các API riêng tư, chỉ cho phép truy cập từ các IP / máy chủ có trong danh sách cho phép / danh sách trắng / whitelist.
- Luôn xác nhận
redirect_uriphía server để chỉ cho phép redirect đến các URL tin cậy. - Ưu tiên sử dụng
response_type=codethay vìresponse_type=token). - Sử dụng tham số
statecùng một giá trị hash ngẫu nhiên để chống lại tấn công CSRF trong quá trình xác thực OAuth. - Định nghĩa phạm vi mặc định, và xác nhận các tham số phạm vi cho mỗi ứng dụng.
- Sử dụng các HTTP method phù hợp với từng hành động:
GET (đọc),POST (tạo mới),PUT/PATCH (cập nhật/sửa),DELETE (để xóa bản ghi), và phản hồi405 Method Not Allowednếu HTTP method không phù hợp với tài nguyên được request. - Xác nhận dữ liệu
content-typeở mỗi tiêu đề (Content Negotiation) chỉ cho phép những định dạng được hỗ trợ (chẳng hạn như.application/xml,application/json, vv) và phản hồi406 Not Acceptablenếu không khớp. - Xác nhận dữ liệu
content-typeđược chấp nhận khi gửi lên (chẳng hạn như.application/x-www-form-urlencoded,multipart/form-data,application/json...). - Kiểm tra dữ liệu truyền lên từ người dùng để tránh các lỗ hổng phổ biến (chẳng hạn như
XSS,SQL-Injection,Remote Code Execution...). - Không sử dụng các dữ liệu nhạy cảm như (
credentials,Passwords,security tokens, hoặcAPI keys) tại URL, sử dụng header Authorization để xác thực. - Chỉ sử dụng mã hóa phía máy chủ.
- Sử dụng API Gateway để kích hoạt cache, Rate Limit policies (chẳng hạng như.
Quota,Spike Arrest,Concurrent Rate Limit) và deploy APIs resources linh động hơn.
- Đảm bảo rằng các endpoint chỉ xử lý dữ liệu sau khi đã qua bước xác thực.
- Nên tránh việc sử dụng ID của tài nguyên. Sử dụng
/me/ordersthay vì/user/654321/orders. - Không nên thiết kế ID dạng tự động tăng. Sử dụng UUID để thay thế.
- Nếu bạn muốn parse XML, hãy chắc chắn rằng
entity parsingkhông được kích hoạt để tránh tấn côngXXE(XML external entity attack). - Nếu bạn muốn parse XML, hãy chắc chắn rằng
entity expansionkhông được kích hoạt để tránh tấn côngBillion Laughs/XML bomb. - Sử dụng CDN để tải lên tệp tin.
- Nếu bạn đang cần xử lý với lượng dữ liệu lớn, sử dụng các kỹ thuật Workers và Queues để xử lý tác vụ dưới nền càng nhiều càng tốt và giúp phản hồi nhanh để tránh bị timeout HTTP.
- Đừng quên tắt chế độ DEBUG.
- Sử dụng stack không thực thi khi có sẵn.
- Thêm
X-Content-Type-Options: nosniffvào response headers. - Thêm
X-Frame-Options: denyvào response headers. - Thêm
Content-Security-Policy: default-src 'none'vào response headers. - Loại bỏ các header chứa thông tin nhạy cảm như phiên bản web server, ví dụ:
X-Powered-By,Server,X-AspNet-Version, v.v... - Bắt buộc có
content-typetrong response headers, nếu bạn trả vềapplication/jsonthì headercontent-typesẽ có giá trịapplication/json. - Do not return overly specific error messages to the client that could reveal implementation details, use generic messages instead, and log detailed information only on the server side.
- Không trả về client các thông tin nhạy cảm như
credentials,Passwords,security tokens. - Trả về status code tương ứng với hành động đã hoàn thành. (chẳng hạn.
200 OK,400 Bad Request,401 Unauthorized,405 Method Not Allowed...).
- Kiểm tra thiết kế và thực hiện đầy đủ việc test với unit/integration.
- Áp dụng quy trình đánh giá code và bỏ qua việc tự phê duyệt.
- Đảm bảo các thành phần của dịch vụ được quét với các anti virus trước khi đưa ra phiên bản production, bao gồm các thư viện và các gói khác.
- Liên tục chạy các bài kiểm tra bảo mật (phân tích tĩnh/động) trên mã của bạn.
- Kiểm tra các phần phụ thuộc của bạn (cả phần mềm và hệ điều hành) để tìm các lỗ hổng đã biết.
- Thiết kế một giải pháp rollback cho việc triển khai.
- Sử dụng đăng nhập tập trung cho tất cả các dịch vụ và thành phần.
- Sử dụng các tác nhân để giám sát tất cả lưu lượng truy cập, lỗi, yêu cầu, và phản hồi.
- Sử dụng cảnh báo cho SMS, Slack, Email, Telegram, Kibana, Cloudwatch, vv.
- Đảm bảo rằng bạn không ghi nhật ký bất kỳ dữ liệu nhạy cảm nào thẻ tín dụng, mật khẩu, mã PIN, vv.
- Sử dụng hệ thống IDS và/hoặc IPS để giám sát các yêu cầu và phản hồi của API của bạn.
- yosriady/api-development-tools - Tập hợp các tài nguyên hữu ích để xây dựng API RESTful HTTP+JSON.
- You don't need JWT, just use a randomly generated API key. If you need asymmetric encryption or tamper prevention, here are some alternatives to JWT.
- Implement sliding window rate limiting per API key and IP.
- Use exponential backoff for repeated failed authentication attempts.
- Implement CAPTCHA or proof-of-work challenges after suspicious activity.
- Monitor and alert on unusual API usage patterns (time, volume, endpoints).
- Disable introspection in production environments.
- Implement query depth limiting to prevent nested query attacks.
- Use query cost analysis to prevent resource exhaustion.
- Whitelist allowed queries in production when possible.
- Rotate API keys and secrets on a regular schedule.
- Use hardware security modules (HSM) for signing operations.
- Implement secret scanning in CI/CD pipelines.
- Never commit secrets to version control - use environment variables or secret managers.
- Implement mutual TLS (mTLS) for service-to-service communication.
- Validate all requests even from internal services.
- Use short-lived tokens with automatic refresh.
- Implement request signing for sensitive operations.
Hãy đóng góp bằng cách forking kho này, thực hiện một số thay đổi và gửi yêu cầu kéo. Đối với bất kỳ câu hỏi nào, hãy gửi email cho chúng tôi theo địa chỉ team@shieldfy.io.