Skip to content

Bab 7: Keamanan Backend

Published: at 10:57 PM

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.

7.2. SQL Injection dan XSS

SQL Injection

Serangan ini memanfaatkan celah dalam query SQL untuk menyisipkan perintah berbahaya.
Cara Mencegah SQL Injection

  1. Gunakan Parameterized Query:

    const query = "SELECT * FROM users WHERE email = ?";
    connection.query(query, [userEmail]);
    
  2. 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

  3. Escape Output:

    • Gunakan pustaka seperti DOMPurify untuk membersihkan input yang berisi HTML.
  4. 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

  1. Dapatkan Sertifikat SSL:

    • Gunakan Let’s Encrypt untuk sertifikat gratis.
  2. 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;
      }
      
  3. Redirect HTTP ke HTTPS:

    server {
      listen 80;
      server_name example.com;
      return 301 https://$host$request_uri;
    }
    

    Tips Tambahan

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

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

  1. Gunakan CDN (Content Delivery Network)

    • CDN seperti Cloudflare dapat menyerap lalu lintas serangan sebelum mencapai server utama.
  2. Rate Limiting dan WAF

    • Gunakan Web Application Firewall (WAF) untuk memfilter lalu lintas mencurigakan.
  3. Konfigurasi Firewall

    • Atur firewall untuk membatasi akses hanya dari IP tertentu atau negara tertentu.
  4. Load Balancing

    • Gunakan load balancer untuk mendistribusikan lalu lintas ke beberapa server.
  5. Monitoring Trafik

    • Pantau pola lalu lintas dengan alat seperti Grafana atau ELK Stack untuk mendeteksi lonjakan abnormal.
      Contoh Konfigurasi Cloudflare untuk DDOS

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.