HTTP GET request adalah metode pengiriman data melalui URL yang melekat pada query string. Karena karakternya yang transparan di dalam URL, GET request rentan terhadap berbagai risiko keamanan seperti kebocoran data sensitif pada browser history, web server logs, dan serangan Cross-Site Scripting (XSS). Praktik terbaik pengamanan GET request mewajibkan penggunaan enkripsi HTTPS secara penuh, menghindari pengiriman data sensitif seperti kata sandi atau token otentikasi di dalam parameter URL, serta menerapkan sanitasi input yang ketat pada sisi server.
Matriks Risiko Keamanan HTTP GET Request
| Ancaman Keamanan | Mekanisme Serangan | Dampak | Mitigasi Utama |
|---|---|---|---|
| URL Data Leakage | Parameter terekam di browser history, proxy, dan server logs. | Pencurian kredensial atau informasi personal pengguna (PII). | Gunakan POST untuk data sensitif; batasi masa berlaku token. |
| Parameter Pollution (HPP) | Penambahan parameter duplikat untuk memanipulasi logika aplikasi. | Bypass validasi, perilaku aplikasi yang tidak konsisten. | Validasi ketat skema parameter input di sisi backend. |
| Cross-Site Scripting (XSS) | Reflected XSS melalui parameter GET yang dirender langsung ke DOM. | Pencurian sesi via eksekusi skrip berbahaya di sisi klien. | Terapkan context-aware output encoding dan CSP. |
| CSRF pada GET (Read-only) | Eksploitasi sumber daya dengan memicu pemuatan data melalui gambar/link. | Kebocoran informasi status akun pengguna. | Gunakan header kustom atau token anti-CSRF bahkan untuk endpoint baca. |
Langkah Teknis Implementasi Keamanan
Penerapan arsitektur aman pada endpoint GET memerlukan validasi berlapis sebelum data diproses oleh aplikasi.
1. Validasi dan Sanitasi Input
Jangan pernah mempercayai data dari URL (Never trust user input). Setiap parameter yang diterima melalui req.query harus divalidasi tipe data, panjang karakter, dan formatnya menggunakan pustaka validasi yang valid.
// Contoh validasi parameter GET menggunakan Express.js dan Joi
const Joi = require('joi');
const schema = Joi.object({
id: Joi.number().integer().required(),
search: Joi.string().max(50).alphanumeric()
});
app.get('/api/item', (req, res) => {
const { error, value } = schema.validate(req.query);
if (error) {
return res.status(400.json({ error: 'Invalid parameters' }));
}
// Lanjutkan proses logika bisnis dengan data 'value'
});
2. Konfigurasi Header Keamanan
Lindungi respons dari GET request dengan menyetel header HTTP yang tepat untuk mencegah browser mengeksekusi konten berbahaya.
- Content-Security-Policy (CSP): Membatasi sumber eksekusi skrip.
- X-Content-Type-Options: nosniff: Mencegah browser melakukan MIME-sniffing terhadap respons.
- Cache-Control: no-store: Mencegah penyimpanan data sensitif di cache browser atau perantara (proxy).
Troubleshooting Masalah Umum GET Request
Jika aplikasi mengalami masalah terkait integritas data GET, periksa beberapa titik kritis berikut:
- Panjang URL Terlampau Batas (URI Too Long): Batasi jumlah parameter atau beralih ke metode POST jika payload data besar. Server web seperti Nginx memiliki batasan default 4KB hingga 8KB untuk baris header/URL.
- Kebocoran Token di Referrer Header: Jika tautan dalam GET request mengarah ke domain eksternal, gunakan kebijakan
Referrer-Policy: no-referreruntuk mencegah kebocoran parameter sensitif.