Bab 7: Keamanan Backend
7.1. Melindungi API: Rate Limiting dan Throttling
Mengapa API Perlu Dilindungi?
API sering menjadi target serangan seperti brute force, abuse, atau scraping data. Rate limiting dan throttling adalah dua mekanisme untuk membatasi akses ke API.
-
Rate Limiting: Membatasi jumlah permintaan dalam jangka waktu tertentu.
-
Throttling: Mengatur kecepatan permintaan dari klien untuk mencegah server kelebihan beban.
Contoh Implementasi Rate Limiting dengan Express.jsconst rateLimit = require("express-rate-limit"); const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 menit max: 100, // Maksimal 100 permintaan per IP message: "Terlalu banyak permintaan, coba lagi nanti.", }); app.use("/api", limiter);
Tools Populer
-
Nginx: Mendukung rate limiting di level server.
-
Redis: Digunakan untuk penyimpanan sementara dalam throttling berbasis token bucket.
7.2. SQL Injection dan XSS
SQL Injection
Serangan ini memanfaatkan celah dalam query SQL untuk menyisipkan perintah berbahaya.
Cara Mencegah SQL Injection
-
Gunakan Parameterized Query:
const query = "SELECT * FROM users WHERE email = ?"; connection.query(query, [userEmail]);
-
Validasi Input: Jangan menerima data mentah dari pengguna tanpa sanitasi.
Cross-Site Scripting (XSS)
Serangan ini menyisipkan skrip berbahaya dalam aplikasi untuk mencuri data pengguna.
Cara Mencegah XSS -
Escape Output:
- Gunakan pustaka seperti DOMPurify untuk membersihkan input yang berisi HTML.
-
Gunakan Header Keamanan:
app.use( helmet({ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], }, }, }) );
7.3. Penggunaan HTTPS dan SSL/TLS
Apa itu HTTPS?
HTTPS (HyperText Transfer Protocol Secure) menggunakan protokol SSL/TLS untuk mengenkripsi data antara klien dan server, melindungi dari serangan man-in-the-middle (MITM).
Cara Implementasi HTTPS
-
Dapatkan Sertifikat SSL:
- Gunakan Let’s Encrypt untuk sertifikat gratis.
-
Konfigurasi pada Nginx/Apache:
-
Contoh konfigurasi Nginx:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.pem; ssl_certificate_key /path/to/privatekey.pem; }
-
-
Redirect HTTP ke HTTPS:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
Tips Tambahan
- Selalu gunakan protokol TLS terbaru.
- Hindari SSL versi lama karena rentan terhadap serangan seperti POODLE.
7.4. Enkripsi Data dan Password
Enkripsi Data
Data sensitif, seperti informasi pribadi pengguna, harus dienkripsi baik saat transit maupun saat tersimpan.
Contoh Enkripsi AES di Node.js
const crypto = require("crypto");
const algorithm = "aes-256-cbc";
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
const encrypt = text => {
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update(text, "utf8", "hex");
encrypted += cipher.final("hex");
return encrypted;
};
Hashing Password
Password harus di-hash, bukan hanya dienkripsi. Hashing adalah proses satu arah yang sulit dikembalikan ke bentuk asli.
Contoh Hashing dengan Bcrypt
const bcrypt = require("bcrypt");
const hashPassword = async password => {
const salt = await bcrypt.genSalt(10);
return await bcrypt.hash(password, salt);
};
const verifyPassword = async (password, hashedPassword) => {
return await bcrypt.compare(password, hashedPassword);
};
Rekomendasi
- Gunakan algoritma hashing kuat seperti bcrypt, Argon2, atau PBKDF2.
- Hindari MD5 atau SHA-1 karena sudah tidak aman.
7.5. Menghadapi Serangan DDOS
Apa itu DDOS?
Distributed Denial of Service (DDOS) adalah serangan yang membanjiri server dengan lalu lintas besar, membuat server tidak bisa merespons permintaan yang sah.
Strategi Menghadapi DDOS
-
Gunakan CDN (Content Delivery Network)
- CDN seperti Cloudflare dapat menyerap lalu lintas serangan sebelum mencapai server utama.
-
Rate Limiting dan WAF
- Gunakan Web Application Firewall (WAF) untuk memfilter lalu lintas mencurigakan.
-
Konfigurasi Firewall
- Atur firewall untuk membatasi akses hanya dari IP tertentu atau negara tertentu.
-
Load Balancing
- Gunakan load balancer untuk mendistribusikan lalu lintas ke beberapa server.
-
Monitoring Trafik
- Pantau pola lalu lintas dengan alat seperti Grafana atau ELK Stack untuk mendeteksi lonjakan abnormal.
Contoh Konfigurasi Cloudflare untuk DDOS
- Pantau pola lalu lintas dengan alat seperti Grafana atau ELK Stack untuk mendeteksi lonjakan abnormal.
- Aktifkan mode “Under Attack” untuk perlindungan ekstra saat serangan terdeteksi.
Kesimpulan:
Keamanan backend adalah komponen kritis dalam pengembangan aplikasi. Dengan menerapkan teknik seperti rate limiting, enkripsi data, penggunaan HTTPS, dan alat pencegahan DDOS, pengembang dapat melindungi aplikasi dari berbagai ancaman keamanan.