Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Pemrograman Web Aman: Input, Query, dan Hak Akses

Pelajaran 8 dari 14

Validasi tipe, panjang, rentang, allowlist, dan escaping

Validasi tipe dan panjang

Setelah pelajaran ini kamu bisa menolak masukan yang bukan tipe atau bentuk yang diharapkan, termasuk angka Unicode yang lolos int() dan isdigit(), dan membatasi panjang teks tanpa membuang karakter sah.

±13 menitDiperiksa 7 Okt 2026

Materi

Validasi memastikan masukan memenuhi kontrak sebelum dipakai: tipenya benar, bentuknya benar, panjangnya dalam batas. OWASP menekankan bahwa validasi tidak menggantikan query berparameter atau escaping keluaran; ketiganya bekerja bersama. Validasi menangkap data yang salah lebih awal dan memberi pesan yang jelas, sedangkan parameter tetap menjaga query dari data yang lolos validasi.

Fungsi int() lebih longgar daripada yang dikira. Ia menerima spasi di awal dan akhir, garis bawah pemisah ribuan seperti 1_000, tanda plus, dan digit Unicode apa pun, termasuk angka lebar penuh 12 dan angka Arab-Indik ١٢. str.isdigit() bahkan menerima pangkat dua ², yang justru ditolak int(). Kalau kontraknya "angka 0–9 ASCII", tulis kontrak itu persis: re.fullmatch(r"[0-9]{1,3}", teks), baru kemudian int(). Pola \d tanpa flag re.ASCII juga cocok dengan semua digit Unicode.

import re

def baca_lantai(teks):
    if not isinstance(teks, str) or not re.fullmatch(r"[0-9]{1,2}", teks):
        raise ValueError("lantai harus 1-2 digit angka 0-9")
    return int(teks)

int("12"), int(" 12 "), int("1_000")    # (12, 12, 1000) — semuanya lolos int()
"²".isdigit()                              # True, padahal int("²") gagal

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Kolom kode pos hanya boleh berisi angka 0–9 ASCII. Pemeriksaan mana yang menolak '٤٠١١٥' (angka Arab-Indik) dan '40115' (angka lebar penuh)?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke