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 9 dari 14

Validasi tipe, panjang, rentang, allowlist, dan escaping

Rentang, allowlist, dan fullmatch

Setelah pelajaran ini kamu bisa memeriksa rentang nilai, keanggotaan persis dalam daftar yang diizinkan, dan pola yang harus cocok dengan seluruh teks.

±13 menitDiperiksa 7 Okt 2026

Materi

Setelah tipe benar, nilainya diperiksa terhadap aturan bisnis. Rentang ditulis dengan dua batas yang jelas, misalnya 1 <= jumlah <= 99. Nilai dari daftar pilihan, seperti jenis pengiriman, diperiksa dengan keanggotaan persis di sebuah set; OWASP menyebut keanggotaan persis berlaku juga untuk nilai yang dikirim dari menu tarik-turun, karena pengirim bisa mengirim nilai di luar menu. Satu jebakan Python: True dan False adalah int, sehingga isinstance(True, int) bernilai benar dan True lolos sebagai jumlah 1. Tolak bool secara terpisah.

Untuk teks berpola, OWASP meminta pola dicocokkan dengan seluruh nilai dan menyebut fullmatch di Python. re.match hanya menambatkan awal teks, sehingga 40115abc lolos pola lima digit. Menambahkan $ juga belum cukup: $ cocok tepat sebelum baris baru di akhir teks, sehingga "40115\n" lolos re.match(r"^[0-9]{5}$", ...). re.fullmatch menuntut pola menutup seluruh teks, tanpa pengecualian itu.

import re

LAYANAN = {"cuci", "setrika", "cuci-setrika"}

def validasi_laundry(data):
    berat = data.get("berat_kg")
    if isinstance(berat, bool) or not isinstance(berat, int) or not 1 <= berat <= 30:
        raise ValueError("berat 1-30 kg")
    if data.get("layanan") not in LAYANAN:
        raise ValueError("layanan tidak dikenal")
    if not re.fullmatch(r"[A-Z]{2}[0-9]{4}", data.get("kode", "")):
        raise ValueError("kode nota salah")
    return {"berat_kg": berat, "layanan": data["layanan"], "kode": data["kode"]}

Latihan

0/3 lulus

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

Latihan 3 dari 3

Apa hasil re.match(r"^[0-9]{5}$", "40115\n")?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke