English | 繁中版 | 简中版 | العربية | Azərbaycan | Български | বাংলা | Català | Čeština | Deutsch | Ελληνικά | Español | فارسی | Français | हिंदी | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Checklist penanggulangan keamanan yang paling penting ketika merancang, menguji, dan melepaskan API ke khalayak
- Jangan gunakan
Basic Auth. Gunakan autentikasi baku. - Gunakan mekanisme baku untuk
autentikasi,pembuatan token, danpenyimpanan kata sandi. - Gunakan maksimal percobaan berulang dan fitur penjara pada Login.
- Gunakan enkripsi untuk seluruh data sensitif.
- Batasi permintaan (throttling) di sisi peladen untuk menghindari serangan yang dapat melumpukan sistem (Contoh: DDoS, serangan paksa).
- Gunakan HTTPS di sisi peladen untuk menghindari serangan pencegatan / MItM (Man In The Middle Attack).
- Gunakan tajuk
HSTSpada SSL untuk mencegah serangan SSL Strip. - Matikan daftar direktori.
- Untuk API pribadi, izinkan akses hanya dari IP/host yang masuk daftar putih.
- Selalu validasi
redirect_uridi sisi peladen sehingga hanya URL-URL yang ada di dalam daftar putih yang boleh digunakan. - Selalu coba untuk mempertukarkan kode bukan token (jangan ijinkan
response_type=token). - Gunakan parameter
statedengan campuran nilai acak (random hash) untuk mencegah CSRF pada proses autentikasi. - Tetapkan cakupan baku dan validasi parameter cakupan untuk setiap aplikasi.
- Gunakan metode HTTP yang sesuai dengan operasi yang digunakan,
GET untuk membaca catatan,POST untuk membuat catatan baru,PUT/PATCH untuk mengganti secara keseluruhan/mengubah sebagian catatan,DELETE untuk menghapus catatandan tanggapan405 Method Not Allowedjika metode permintaan tidak dikenali pada sumber daya. - Validasi
content-typepada tajuk Accept pada permintaan (Negosiasi konten) sehingga hanya mengijinkan format yang dikenali (Contoh:application/xml,application/json, dan lain sebagainya). Berikan tanggapan406 Not Acceptablejika nilai tajuk Accept tidak dikenali. - Validasi
content-typedari data yang dipos oleh pengguna (Contoh:application/x-www-form-urlencoded,multipart/form-data,application/json, dan lain sebagainya). - Validasi masukan dari pengguna untuk menghindari kerentanan umum (Contoh:
XSS,SQL-Injection,Remote Code Execution, dan lain sebagainya). - Jangan gunakan data sensitif seperti
kredensial,kata sandi,token keamanan, ataukunci APIpada URL. Gunakan tajuk Authorization baku. - Gunakan hanya enkripsi sisi server.
- Gunakan layanan pintu gerbang API (API Gateway) untuk memungkinan singgahan, pembatasan laju, pendeteksian lalu lintas tinggi, dan penyebaran sumber daya API secara dinamis.
- Cek apakah seluruh titik akhir terlindungi oleh autentikasi untuk menghindari proses autentikasi yang rusak.
- Sumber daya ID kepunyaan pengguna sebaiknya dihindari. Lebih baik menggunakan
/me/ordersdaripada/user/654321/orders. - Jangan gunakan ID yang bertambah secara otomatis. Sebaiknya gunakan
UUID. - Jika hendak menguraikan berkas XML, pastikan penguraian entitas tidak diaktikan untuk menghindari serangan
XXE(XML External Entity). - Jika hendak menguraikan berkas XML, pastikan perluasan entitas tidak diaktifkan untuk menghindari
Billion Laughs/XML bombmelalui serangan perluasan entitas eksponensial. - Gunakan CDN untuk unggah berkas.
- Jika berhubungan dengan jumlah data yang sangat besar, gunakan Pekerja dan Antrian untuk memproses sebanyak mungkin di balik layar dan kembalikan tanggapan cepat untuk menghindari pemblokiran HTTP.
- Jangan lupa untuk mematikan mode DEBUG.
- Gunakan stack yang tidak dapat dieksekusi jika tersedia.
- Kirim tajuk
X-Content-Type-Options: nosniff. - Kirim tajuk
X-Frame-Options: deny. - Kirim tajuk
Content-Security-Policy: default-src 'none'. - Hapus tajuk sidik jari -
X-Powered-By,Server,X-AspNet-Versiondan lain sebagainya. - Paksa
content-typepada tanggapan. Jika mengambalikanapplication/jsonmaka tajukcontent-typeadalahapplication/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.
- Jangan kembalikan data sensitif seperti
kredensial,kata sandi, dantoken keamanan. - Kembalikan kode status yang layak sesuai dengan operasi yang diselesaikan (Contoh:
200 OK,400 Bad Request,401 Unauthorized,405 Method Not Allowed, dan lain sebagainya).
- Audit rancangan dan pelaksanaan dengan pengujian unit/integrasi.
- Gunakan proses ulasan kode dan kesampingkan persetujuan sendiri.
- Pastikan seluruh komponen layanan dipindai secara statis menggunakan anti virus sebelum didorong ke lingkungan produksi, termasuk pustaka-pustaka milik vendor dan ketergantungan lainnya.
- Jalankan uji keamanan (analisis statis/dinamis) secara terus-menerus pada kode Anda.
- Memeriksa dependensi Anda (perangkat lunak dan OS) untuk mengetahui kerentanannya.
- Rancang solusi kembali ke versi sebelumnya pada proses penyebaran.
- Gunakan login terpusat untuk semua layanan dan komponen.
- Gunakan agen untuk memantau semua lalu lintas, kesalahan, permintaan, dan respons.
- Gunakan peringatan untuk SMS, Slack, Email, Telegram, Kibana, Cloudwatch, dll.
- Pastikan Anda tidak mencatat data apapun yang sensitif, seperti kartu kredit, kata sandi, PIN, dll.
- Gunakan sistem IDS dan/atau IPS untuk memantau permintaan dan instans API Anda.
- yosriady/api-development-tools - Kumpulan sumber yang berguna untuk membangun 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.
Silahkan berkontribusi dengan cara menduplikasi repositori ini, lakukan perubahan, dan kirimkan PR. Jika ada pertanyaan silakan kirim email ke team@shieldfy.io.