Beranda

Security

Web Application Security Fundamentals #0...

Web Application Security Fundamentals #07: Input Validation

Pelajari allowlist, schema validation, canonicalization, server-side validation, dan perbedaannya dari sanitization serta output encoding.

Web Application Security Fundamentals #07: Input Validation
6 dibaca
Belum ada penilaian

Input Validation memastikan data memenuhi bentuk dan aturan yang diharapkan sebelum diproses. Ia penting, tetapi bukan obat untuk semua vulnerability dan tidak menggantikan parameterization maupun output encoding.

Etika dan scope: praktikkan hanya pada local lab, aplikasi milik sendiri, atau sistem yang memberikan izin tertulis. Tutorial ini tidak mengizinkan pengujian terhadap target publik.

Ilustrasi perlindungan web application

Tujuan pembelajaran

  • memvalidasi type, length, range, format, dan business rule
  • memahami allowlist serta canonicalization
  • membedakan validation, sanitization, dan encoding
  • menerapkan validation di server

Prasyarat

Gunakan browser modern, Developer Tools, dan local lab. Catat versi tool serta environment ketika menguji. Output contoh bersifat ilustratif kecuali dinyatakan sebagai hasil pengujian; jangan menganggap perilaku satu stack berlaku universal.

1. Tentukan schema

Mulai dari contract. Field umur semestinya integer dalam range, bukan string bebas. Status sebaiknya enum. Identifier memiliki format dan panjang yang jelas.

const OrderSchema = z.object({
  productId: z.string().uuid(),
  quantity: z.number().int().min(1).max(20)
}).strict();

Contoh memakai Zod 3.x. .strict() menolak key tak dikenal; cek dokumentasi versi sebelum mengadopsi.

2. Validasi server-side

Client-side validation bagus untuk UX, tetapi dapat dilewati. Server harus memvalidasi ulang setiap input termasuk header, cookie, webhook, file metadata, dan data dari service lain.

3. Pilih allowlist

Jika domain input terbatas, definisikan nilai yang diterima. Blacklist pola berbahaya mudah dilewati dengan encoding, variasi syntax, atau context berbeda. Namun regex kompleks juga dapat menimbulkan performance issue; batasi panjang sebelum regex.

4. Canonicalization

Normalisasi hanya jika business rule membutuhkannya dan lakukan konsisten sebelum comparison. Unicode, path, hostname, dan case memiliki aturan berbeda. Jangan membuat normalisasi buatan sendiri untuk security-critical identifier.

5. Business validation

Schema benar belum berarti transaksi sah. Quantity 10 mungkin valid secara type tetapi melanggar stok atau limit pengguna. Jalankan invariant pada server dan gunakan transaction/concurrency control yang sesuai.

6. Validation bukan sanitization

Validation menerima atau menolak input berdasarkan contract. Sanitization mengubah data. Output encoding melindungi context output. Parameterization memisahkan data dari query. Gunakan control sesuai sink.

7. Error response

Kembalikan pesan yang membantu tanpa stack trace, query, secret, atau detail internal. Simpan correlation ID untuk troubleshooting.

{
  "error": "invalid_request",
  "fields": {"quantity": "must be between 1 and 20"},
  "correlationId": "req_example"
}

8. Negative test

Uji missing field, extra field, wrong type, boundary, oversized input, malformed encoding, duplicate value, dan concurrency. Property-based testing atau fuzzing dapat membantu pada local lab, tetapi hasil harus ditinjau.

Kesalahan umum

  • Hanya memvalidasi form browser.
  • Menggunakan blacklist karakter.
  • Menghapus karakter diam-diam hingga arti data berubah.
  • Menganggap validation mencegah seluruh XSS/SQL injection.
  • Tidak membatasi ukuran request.

Quality gate sebelum diterapkan

  • [ ] Scope dan asset sudah jelas.
  • [ ] Control dijalankan di sisi yang menjadi security boundary.
  • [ ] Positive test dan negative test tersedia.
  • [ ] Error tidak membocorkan secret atau detail internal.
  • [ ] Logging cukup untuk detection tanpa merekam credential.
  • [ ] Versi dependency dan dokumentasi dicatat.
  • [ ] Tidak ada klaim “100% aman”.
  • [ ] Perubahan diuji pada staging atau local lab.

Kesimpulan

Input yang valid masih perlu identity dan session yang benar. Tutorial berikutnya membahas Authentication dan Session Management.

Referensi resmi

Post Terkait

Web Application Security Fundamentals #06: Secure SDLC

Masukkan threat modeling, secure design, code review, testing, deployment, monitoring, dan incident learning ke seluruh...

25 Agt 2026

Web Application Security Fundamentals #05: Common Web Attack Vectors

Kenali jalur serangan umum seperti input, identity, session, upload, dependency, dan business logic tanpa menguji target...

25 Agt 2026

Web Application Security Fundamentals #04: Mengenal OWASP Top 10:2025

Mengenal kategori OWASP Top 10:2025, perubahan dari 2021, batas penggunaannya, serta cara mengubahnya menjadi backlog en...

24 Agt 2026

© 2026 Yowisben. Semua hak dilindungi.

Powered by LONTAR CMS v1.71.0