Validasi input dan output encoding — Vibe Coding dan Security: Dari Prompt ke Aplikasi Aman

MATERI 9 DARI 28

Validasi input dan output encoding

Validasi bentuk data di server dan encode output sesuai konteks untuk mencegah data rusak dan XSS.

Tujuan pembelajaran

  • Membedakan validation, sanitization, dan encoding.
  • Menerapkan allowlist dan batas panjang.
  • Menghindari output HTML mentah.

Konsep utama

Validasi dekat boundary

Validasi segera setelah data masuk melalui HTTP, CLI, file, atau queue.

Contextual encoding

HTML, URL, JavaScript, dan SQL membutuhkan perlakuan berbeda.

Alur kerja teknis

  1. Tulis tujuan dan acceptance criteria.
  2. Buat perubahan kecil yang dapat ditinjau.
  3. Jalankan test dan baca diff sebelum menerima hasil AI.

Contoh implementasi

Validasi username Python

import re

def validate_username(value: str) -> str:
    value = value.strip().lower()
    if not re.fullmatch(r"[a-z0-9._-]{3,30}", value):
        raise ValueError("Username tidak valid")
    return value

Escape output dengan textContent

const output = document.querySelector("#hasil");
const nama = new URLSearchParams(location.search).get("nama") ?? "";
output.textContent = nama; // bukan innerHTML

Escape HTML PHP

$safeName = htmlspecialchars($name, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
echo "<p>Halo {$safeName}</p>";

Aspek keamanan

  • Gunakan allowlist untuk format terstruktur.
  • Jangan “membersihkan” input lalu memasukkannya ke query string SQL.
  • Encode saat output, bukan mengubah data asli tanpa alasan.

Kesalahan umum

  • Menerima kode AI tanpa membaca diff dan memahami alur data.
  • Menguji hanya happy path dan mengabaikan input salah atau batas nilai.
  • Menyimpan secret, token, atau data nyata di prompt dan source code.

Pengujian dan verifikasi

  1. Jalankan contoh dengan input normal.
  2. Ulangi dengan input kosong, tipe salah, dan nilai batas.
  3. Pastikan error tidak membocorkan secret atau detail internal.

Latihan

  1. Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
  2. Tambahkan satu negative test lalu jelaskan risiko yang dicegah.

Checklist

  • Tujuan dan batas pekerjaan jelas.
  • Input divalidasi di server.
  • Secret tidak berada di source/prompt.
  • Test lulus dan diff sudah dibaca.

Rangkuman

Validasi bentuk data di server dan encode output sesuai konteks untuk mencegah data rusak dan XSS.