Mekanisme Input Validation Untuk Keamanan Aplikasi - Rumah IT

Baru

recent

Mekanisme Input Validation Untuk Keamanan Aplikasi

Mekanisme Input Validation Untuk Keamanan Aplikasi

Input Validation adalah teknik pemrograman yang memastikan hanya data yang diformat dengan benar yang dapat masuk ke komponen sistem perangkat lunak. Validasi input dilakukan untuk memastikan hanya data yang terbentuk dengan benar yang memasuki alur kerja dalam sistem informasi, mencegah data yang salah format tetap ada di database dan memicu malfungsi berbagai komponen hilir. Validasi input harus dilakukan sedini mungkin dalam aliran data, sebaiknya segera setelah data diterima dari pihak eksternal.


Validasi Input tidak boleh digunakan sebagai metode utama untuk mencegah XSS , SQL Injection dan serangan lain yang tercakup dalam lembar contekan masing-masing tetapi dapat berkontribusi secara signifikan untuk mengurangi dampaknya jika diterapkan dengan benar.


Implementasi Input Validation

Validasi input dapat diimplementasikan menggunakan teknik pemrograman apa pun yang memungkinkan penegakan kebenaran sintaksis dan semantik yang efektif, misalnya:

  1. Validator tipe data tersedia secara native di kerangka kerja aplikasi web (seperti Django Validators , Apache Commons Validator , dll).
  2. Validasi terhadap Skema JSON dan Skema XML (XSD) untuk input dalam format ini.
  3. Ketik konversi (misalnya Integer.parseInt()di Java, int()di Python) dengan penanganan pengecualian yang ketat
  4. Rentang nilai minimum dan maksimum memeriksa parameter numerik dan tanggal, memeriksa panjang minimum dan maksimum untuk string.
  5. Larik nilai yang diizinkan untuk set kecil parameter string (mis. hari dalam seminggu).
  6. Ekspresi reguler untuk data terstruktur lainnya yang mencakup seluruh string input (^...$)dan tidak menggunakan karakter pengganti "karakter apa pun" (seperti .atau \S)


Ketentuan Input Validation

Aplikasi harus memeriksa apakah data valid secara sintaksis dan semantik (dalam urutan itu) sebelum menggunakannya dengan cara apa pun (termasuk menampilkannya kembali ke pengguna).

1. Validasi Sintaks
Berarti bahwa data dalam bentuk yang diharapkan. Misalnya, aplikasi memungkinkan pengguna untuk memilih "ID akun" empat digit untuk melakukan beberapa jenis operasi. Aplikasi harus menganggap pengguna memasukkan payload injeksi SQL, dan harus memeriksa apakah data yang dimasukkan oleh pengguna panjangnya tepat empat digit, dan hanya terdiri dari angka (selain menggunakan parameterisasi kueri yang tepat).

2. Validasi Semantik
Hanya mencakup menerima input yang berada dalam rentang yang dapat diterima untuk fungsionalitas dan konteks aplikasi yang diberikan. Misalnya, tanggal mulai harus sebelum tanggal akhir saat memilih rentang tanggal.

Jenis-Jenis Input Validation

1. Whitelisting dan Blacklisting

Ada dua pendekatan umum untuk melakukan validasi sintaks masukan, umumnya dikenal sebagai daftar hitam (blacklisting) dan daftar putih (whitelisting).

Blacklisting atau Daftar hitam
Validasi daftar hitam berupaya untuk memeriksa bahwa data yang diberikan tidak mengandung konten "yang diketahui buruk". Misalnya, aplikasi web mungkin memblokir input yang berisi teks persis <SCRIPT> untuk membantu mencegah XSS. Namun, pembelaan ini dapat dihindari dengan tag skrip huruf kecil atau tag skrip campuran huruf besar-kecil.

Whitelisting atau Daftar putih
validasi daftar putih mencoba untuk memeriksa bahwa data yang diberikan cocok dengan seperangkat aturan "baik yang diketahui". Misalnya aturan validasi daftar putih untuk negara bagian AS akan berupa kode 2 huruf yang hanya merupakan salah satu negara bagian AS yang valid.
Saat membuat perangkat lunak yang aman, daftar putih adalah pendekatan minimal yang disarankan. Daftar hitam rentan terhadap kesalahan dan dapat dilewati dengan berbagai teknik penghindaran dan bisa berbahaya jika bergantung pada dirinya sendiri.

Meskipun daftar hitam sering kali dapat dihindari, seringkali berguna untuk membantu mendeteksi serangan yang jelas. Jadi, meskipun daftar putih membantu membatasi permukaan serangan dengan memastikan data memiliki validitas sintaksis dan semantik yang tepat, daftar hitam membantu mendeteksi dan berpotensi menghentikan serangan yang nyata.

2. Validasi sisi klien dan sisi Server

Validasi input harus selalu dilakukan di sisi server untuk keamanan. Sementara validasi sisi klien dapat berguna untuk fungsional dan beberapa tujuan keamanan seringkali dapat dengan mudah dilewati. Ini membuat validasi sisi server menjadi lebih mendasar untuk keamanan.

Misalnya, validasi JavaScript dapat memperingatkan pengguna bahwa bidang tertentu harus terdiri dari angka, tetapi aplikasi sisi server harus memvalidasi bahwa data yang dikirimkan hanya terdiri dari angka dalam rentang numerik yang sesuai untuk fitur tersebut.

3. Reguler Expression (ReGex)

Ekspresi reguler menawarkan cara untuk memeriksa apakah data cocok dengan pola tertentu. Mari kita mulai dengan contoh dasar.

Ekspresi reguler berikut digunakan untuk menentukan aturan daftar putih untuk memvalidasi nama pengguna.

^[a-z0-9_]{3,16}$

Ekspresi reguler ini hanya mengizinkan huruf kecil, angka, dan karakter garis bawah. Nama pengguna juga dibatasi dengan panjang 3 dan 16 karakter. Kekurangan menggunakan Regex sebagai input validation :

- Rentan terhadap serangan DDOS (Denial of Service)
Kehati-hatian harus dilakukan saat membuat ekspresi reguler. Ekspresi yang dirancang dengan buruk dapat mengakibatkan potensi penolakan kondisi layanan (alias ReDoS ). Berbagai alat dapat menguji untuk memverifikasi bahwa ekspresi reguler tidak rentan terhadap ReDoS.

- Masalah Kompleksitas
Ekspresi reguler hanyalah salah satu cara untuk menyelesaikan validasi. Ekspresi reguler mungkin sulit dipertahankan atau dipahami untuk beberapa pengembang. Alternatif validasi lainnya melibatkan penulisan metode validasi secara terprogram yang dapat lebih mudah dipertahankan untuk beberapa pengembang.

4. Input validation dengan pembatasan

Validasi input tidak selalu membuat data "aman" karena bentuk input kompleks tertentu mungkin "valid" tetapi tetap berbahaya. Misalnya alamat email yang valid mungkin berisi serangan injeksi SQL atau URL yang valid mungkin berisi serangan Cross Site Scripting . Pertahanan tambahan selain validasi input harus selalu diterapkan pada data seperti parameterisasi kueri atau pelolosan.

Misalnya pada form input kita hanya membatasi input sampai 16 karakter saja. Validasi ini sering kita jumpai pada input nomor KTP atau NIK.

5. Validasi dengan sanitasi input HTML

Semua data pengguna yang dikontrol harus dikodekan saat dikembalikan di halaman HTML untuk mencegah eksekusi data berbahaya (XSS). Misalnya <script> akan dikembalikan sebagai &lt;script&gt;

Jenis pengkodean khusus untuk konteks halaman tempat data yang dikontrol pengguna disisipkan. Misalnya, pengkodean entitas HTML sesuai untuk data yang ditempatkan ke dalam badan HTML. Namun, data pengguna yang ditempatkan ke dalam skrip memerlukan penyandian output khusus JavaScript.

6. Validasi Upload File

Banyak situs web memungkinkan pengguna mengunggah file, seperti gambar profil atau lainnya. Pemfilteran unggahan file adalah bagian yang sangat penting dari keamanan aplikasi web yang juga sangat sulit untuk dilakukan dengan benar.

Dan sayangnya taruhannya tinggi, karena kerentanan yang terkait dengan fungsi pengunggahan file Anda dapat dengan cepat berubah menjadi masalah kritis dan dapat dieksploitasi dengan dampak yang mencakup eksekusi kode jarak jauh pada server web yang mendasarinya.

Untuk penjelasan lebih rinci mengenai validasi upload file, silahkan baca artikel : Teknik Validasi Input Pada Upload File .

7. Validasi Alamat Email 

Validasi alamat email dibagi menjadi dua bagian yaitu validasi sintaksis dan validasi semantik. Pada validasi sintaksis format alamat email ditentukan oleh RFC 5321 , dan jauh lebih rumit daripada yang disadari kebanyakan orang.

Validasi semantik adalah tentang menentukan apakah alamat email itu benar dan sah. Cara paling umum untuk melakukannya adalah dengan mengirim email ke pengguna, dan mengharuskan mereka mengklik link di email, atau memasukkan kode yang telah dikirimkan kepada mereka.

Untuk penjelasan lebih rinci mengenai validasi alamat email, silahkan baca artikel : Teknik Validasi Input Pada Alamat Email .

8. Validasi Mass Assignment (Input Pengguna Tak Terduga)

Beberapa framework mendukung pengikatan otomatis parameter permintaan HTTP ke objek sisi server yang digunakan oleh aplikasi. Fitur pengikatan otomatis ini memungkinkan penyerang memperbarui objek sisi server yang tidak dimaksudkan untuk dimodifikasi. Penyerang mungkin dapat mengubah tingkat kontrol akses mereka atau menghindari logika bisnis aplikasi yang dimaksud dengan fitur ini.

Serangan ini memiliki beberapa nama antara lain: mass assignment, autobinding dan object injection.

Sebagai contoh sederhana, jika objek pengguna memiliki hak istimewa bidang yang menentukan tingkat hak istimewa pengguna dalam aplikasi, pengguna jahat dapat mencari halaman tempat data pengguna diubah dan menambahkan hak istimewa=admin ke parameter HTTP yang dikirim. Jika pengikatan otomatis diaktifkan dengan cara yang tidak aman, objek sisi server yang mewakili pengguna akan dimodifikasi sebagaimana mestinya.

Dua pendekatan dapat digunakan untuk menangani hal ini:
  • Hindari binding input secara langsung dan gunakan Data Transfer Objects (DTOs).
  • Aktifkan pengikatan otomatis tetapi tetapkan aturan daftar putih untuk setiap halaman atau fitur untuk menentukan bidang mana yang diizinkan untuk diikat otomatis.

Referensi :
1. https://github.com/owasp-russia/top-10-proactive-controls/blob/master/source/c5-validate-all-inputs.rst
2. https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html
All Rights Reserved by Rumah IT - Rumah Teknologi Informasi © 2013 - 2022
Powered By Blogger

Contact Form

Name

Email *

Message *

Powered by Blogger.