Validasi Input untuk Proyek Mahasiswa agar Data Aman

Mahasiswa memeriksa data formulir dan aturan keamanan aplikasi pada laptop di ruang kerja kampus

Dalam proyek mahasiswa, kesalahan data sering dianggap sekadar masalah teknis kecil. Padahal, data yang tidak diperiksa dapat menyebabkan perhitungan keliru, proses aplikasi gagal, atau membuka celah keamanan. Formulir pendaftaran, sistem inventaris, aplikasi kasir, dan API tugas kuliah sama-sama membutuhkan pemeriksaan data sebelum diproses atau disimpan.

Validasi input adalah proses memeriksa apakah data yang diterima aplikasi memenuhi persyaratan yang telah ditentukan. Pemeriksaan ini dapat mencakup tipe data, format, panjang, rentang nilai, struktur, serta aturan yang berkaitan dengan proses bisnis. Tujuannya bukan hanya membuat aplikasi berjalan lebih baik, tetapi juga mengurangi risiko penyalahgunaan dan kerentanan perangkat lunak.

Apa Itu Validasi Input dan Mengapa Penting?

Setiap data yang masuk ke aplikasi sebaiknya diperlakukan sebagai data yang belum tepercaya. Sumbernya bisa berupa pengguna, aplikasi lain, API internal, antrean pesan, atau penyimpanan yang sebelumnya telah digunakan. Data dari sumber internal pun tetap perlu diperiksa ketika melewati batas kepercayaan atau masuk ke proses baru.

Validasi membantu aplikasi memastikan bahwa data sesuai dengan kebutuhan. Contohnya, jumlah barang harus berupa angka yang tidak negatif, alamat email mengikuti format yang diterima, dan tanggal pengembalian tidak bertentangan dengan tanggal peminjaman. Tanpa aturan tersebut, aplikasi dapat menyimpan data yang tidak masuk akal dan menghasilkan keputusan yang salah.

Dalam pengembangan perangkat lunak yang aman, validasi input merupakan bagian dari praktik pengembangan untuk mengurangi jumlah dan dampak kerentanan. Namun, validasi bukan satu-satunya kontrol keamanan. Fungsinya perlu dipadukan dengan perlindungan lain sesuai risiko aplikasi.

Validasi Sintaksis dan Semantik

Validasi sintaksis

Validasi sintaksis memeriksa bentuk atau struktur data. Contohnya meliputi tipe data, pola, panjang teks, field wajib, field tambahan, jumlah item dalam array, dan kedalaman struktur bersarang. Pada API, pemeriksaan ini memastikan request memiliki struktur yang diharapkan sebelum diproses.

Misalnya, field stok harus berupa bilangan bulat, nama produk tidak boleh kosong, dan daftar barang dalam satu transaksi tidak boleh melebihi jumlah yang ditetapkan aplikasi.

Validasi semantik

Validasi semantik memeriksa kewajaran data berdasarkan makna dan aturan bisnis. Dua tanggal mungkin sama-sama memiliki format benar, tetapi tanggal selesai tidak seharusnya lebih awal daripada tanggal mulai. Demikian pula, diskon tidak boleh membuat harga akhir berada di luar aturan transaksi yang berlaku.

Validasi sintaksis menjawab pertanyaan “apakah bentuk datanya benar?”, sedangkan validasi semantik menjawab “apakah data tersebut masuk akal untuk proses ini?”. Keduanya diperlukan agar pemeriksaan lebih menyeluruh.

Aturan Validasi Berdasarkan Jenis Data

  • Teks: tentukan apakah field wajib diisi, batas panjang minimum dan maksimum, serta karakter atau pola yang diperbolehkan.
  • Angka: tetapkan tipe angka, nilai minimum, nilai maksimum, dan aturan apakah bilangan negatif atau desimal diperbolehkan.
  • Tanggal: gunakan format yang konsisten dan periksa hubungan antar tanggal sesuai kebutuhan proses.
  • Email atau nomor tertentu: periksa pola yang diperlukan aplikasi tanpa menganggap pemeriksaan format sebagai bukti bahwa alamat tersebut benar-benar aktif.
  • Enum atau pilihan: gunakan daftar nilai yang diterima secara eksplisit, bukan menerima sembarang teks.
  • Array dan objek: batasi jumlah item, field yang tersedia, kedalaman struktur, serta tipe setiap elemen.

Selain memeriksa isi field, batasi juga ukuran request, panjang input, jumlah elemen, dan kedalaman data. Batas ini membantu mengurangi risiko penggunaan sumber daya secara berlebihan.

Client-Side dan Server-Side: Keduanya Memiliki Peran

Validasi di sisi klien, misalnya pada formulir browser, berguna untuk memberikan umpan balik cepat. Pengguna dapat segera mengetahui bahwa field wajib belum diisi atau format data belum benar. Hal ini meningkatkan pengalaman penggunaan dan mengurangi pengiriman data yang jelas-jelas salah.

Namun, pemeriksaan di sisi klien dapat dilewati atau diubah. Karena itu, validasi sisi server tetap wajib dilakukan sebelum data diproses atau disimpan. Server harus menerapkan aturan yang menjadi sumber keputusan utama, termasuk batas ukuran request dan struktur data.

Pola praktisnya adalah menggunakan validasi klien untuk kenyamanan, lalu mengulang pemeriksaan secara tepercaya di server. Pesan kesalahan sebaiknya jelas bagi pengguna, tetapi tidak membocorkan informasi internal yang tidak perlu.

Allowlist Lebih Terarah daripada Denylist

Allowlist menetapkan nilai atau pola yang memang diterima aplikasi. Contohnya, status transaksi hanya boleh berupa “baru”, “diproses”, atau “selesai”. Pendekatan ini lebih terarah karena aplikasi menerima pilihan yang diketahui aman dan relevan.

Sebaliknya, denylist mencoba memblokir pola yang dianggap berbahaya. Cara ini sulit diterapkan secara lengkap karena variasi input dapat sangat banyak. Denylist mungkin berguna sebagai lapisan tambahan, tetapi tidak sebaiknya menjadi satu-satunya mekanisme validasi.

Validasi Input Bukan Pengganti Kontrol Keamanan Lain

Validasi input memiliki tujuan berbeda dari kontrol berikut:

  • Query terparameterisasi membantu memisahkan data dari perintah database.
  • Output encoding menyesuaikan data saat ditampilkan agar tidak ditafsirkan sebagai kode.
  • Sanitasi HTML diperlukan bila aplikasi memang menerima atau menampilkan markup HTML tertentu.
  • Pemeriksaan otorisasi menentukan apakah pengguna berhak melakukan tindakan atau mengakses data.

Artinya, input yang telah lolos validasi belum tentu boleh menjalankan tindakan tertentu atau aman ditampilkan dalam semua konteks. Setiap kontrol harus diterapkan pada tahap yang sesuai.

Perhatian Khusus pada Unggah Berkas

Fitur unggah berkas memerlukan pemeriksaan tambahan. Jangan hanya mengandalkan ekstensi atau nama berkas karena keduanya dapat dimanipulasi. Periksa ukuran, isi, dan karakteristik berkas sesuai kebutuhan aplikasi. Atur pula lokasi penyimpanan serta cara berkas disajikan agar tidak menimbulkan risiko tambahan.

Untuk proyek mahasiswa, tetapkan batas ukuran dan jenis berkas yang benar-benar dibutuhkan. Jika aplikasi hanya memerlukan gambar, jangan membuka penerimaan semua jenis berkas tanpa alasan yang jelas.

Kesalahan Umum dalam Menerapkan Validasi

  • Hanya melakukan validasi di browser dan mengabaikan server.
  • Menerima field tambahan tanpa batas pada request atau objek bersarang.
  • Menganggap data dari API internal atau database selalu aman.
  • Mencoba menyelesaikan semua risiko dengan denylist.
  • Menggunakan nama atau ekstensi berkas sebagai satu-satunya pemeriksaan unggahan.
  • Mencampur validasi dengan otorisasi, sanitasi, atau perlindungan query.
  • Tidak menetapkan batas panjang teks, ukuran request, jumlah item, dan kedalaman struktur.

Checklist Implementasi untuk Proyek Mahasiswa

  1. Daftar semua sumber input, termasuk formulir, API, antrean, database, dan unggah berkas.
  2. Tentukan tipe, format, panjang, rentang, field wajib, dan nilai yang diperbolehkan untuk setiap field.
  3. Tambahkan aturan semantik, termasuk hubungan antarfield dan ketentuan proses bisnis.
  4. Terapkan pemeriksaan di server, meskipun validasi klien sudah tersedia.
  5. Gunakan allowlist untuk pilihan, status, format, dan struktur yang dapat ditentukan.
  6. Batasi ukuran request, jumlah item, panjang input, serta kedalaman data.
  7. Pisahkan validasi dari query terparameterisasi, output encoding, sanitasi HTML, dan otorisasi.
  8. Dokumentasikan alasan setiap aturan agar mudah dipelihara oleh anggota tim.

Uji Input Valid dan Tidak Valid

Pengujian perlu mencakup lebih dari satu contoh data benar. Siapkan skenario input valid, field kosong, format salah, nilai di luar rentang, tipe data yang keliru, field tambahan, struktur bersarang, dan input berukuran besar. Uji pula unggah berkas dengan ukuran atau karakteristik yang tidak sesuai aturan.

Pastikan aplikasi menolak data yang tidak memenuhi aturan tanpa gagal secara tidak terkendali. Periksa bahwa pesan kesalahan membantu pengguna memperbaiki input, sementara server tetap menjaga data internal dan aturan keamanan.

Dengan validasi input yang terencana, proyek mahasiswa menjadi lebih konsisten, mudah diuji, dan lebih siap menghadapi penggunaan nyata. Kebiasaan ini juga membangun fondasi penting untuk pengembangan aplikasi yang cerdas secara digital, berintegritas, dan siap menghadapi dunia global.

Categories:

Leave a Reply

Your email address will not be published. Required fields are marked *