10 Kesalahan Coding Yang Membuat Aplikasi Kurang Aman

9 months ago 63
BOOK THIS SPACE FOR AD
ARTICLE AD

Yasmin Ramadini

Ketika mengembangkan aplikasi, salah satu aspek penting yang sering dilupakan developer yaitu secure coding. Padahal, aplikasi yang rentan dapat menyebabkan banyak kerugian, seperti kebocoran data, kerugian finansial, bahkan membuat citra perusahaan menjadi buruk. Untuk itu, penting sekali menerapkan secure coding pada proses development software.

Berikut ini daftar 10 kesalahan coding yang membuat aplikasi kurang aman berdasarkan OWASP Top Ten:

Tidak ada yang salah ketika kita mengambil inputan data user dari client-side dan memasukkannya ke dalam logic aplikasi untuk diproses. Namun yang menjadi masalah adalah ketika kita 100% mempercayai data tersebut benar-benar data yang diharapkan.

Misalnya, pada website e-commerce, kita menyimpan data harga produk ke dalam inputan yang di-disabled atau hidden input, sehingga di backend, kita cukup mengambil data dari client-side dan langsung menggunakannya dalam proses pembayaran. Hal ini cukup berbahaya, karena siapapun dapat mengubahnya sesimpel dengan melakukan inspect element dan mengedit value harga tersebut.

Contoh lain yaitu menentukan access control menggunakan cookie. Kita berpikir bahwa dengan menambahkan cookie “isAdmin”, maka kita bisa menentukan dengan mudah dan aman apakah user tersebut admin atau bukan tanpa melakukan validasi lagi di backend. Padahal, siapapun dapat menggunakan web proxy seperti Burp Suite untuk mengubah nilai cookie tersebut.

Mengambil data dari client-side memang memberikan banyak keuntungan seperti lebih memudahkan developer tanpa harus membuat logic lagi di backend. Namun, sepenuhnya bergantung pada data dari client-side juga tidaklah aman. Maka dari itu, sebaiknya lakukanlah logic hanya di backend. Jika tetap harus mengambil data dari client-side, maka harus dilakukan validasi terlebih dahulu di backend.

Ketika proses development, seringkali kita menulis langsung kredensial seperti access token third party, kredensial database, dan data sensitif lainnya ke dalam source code. Tidak masalah jika source code tersebut hanya bisa dilihat oleh team internal saja, namun sangat berbahaya jika source code tersebut tersedia secara public di GitHub atau dapat dilihat di client-side.

Penting sekali untuk menyimpan kredensial tersebut di tempat yang lebih aman seperti di dalam file .env sehingga tidak dapat diakses langsung oleh orang lain.

Ketika kita menggunakan layanan/framework, maka biasanya kita akan diberikan default credential yang tidak terlalu aman seperti username “admin” dan password “admin”. Ini dapat memudahkan pada saat proses development. Namun jika sudah masuk fase production, maka default credential tersebut harus diganti dengan yang lebih aman. Karena attacker dapat mengunjungi dokumentasi layanan/framework tersebut dan menemukan default credential-nya.

Maka dari itu, selalu ganti default credential dengan yang lebih aman pada fase production.

Teknologi berupa framework/library/dependency/bahasa pemrograman versi lama terkadang memiliki kerentanan yang telah diketahui atau disebut known vulnerabilities.

Pertama-tama, attacker akan mencari tahu versi teknologi yang digunakan suatu aplikasi. Kemudian mereka akan mencari kerentanan pada versi teknologi tersebut dan mengeksploitasinya.

Kerentanan pada known vulnerabilities juga cukup berbahaya mulai dari information disclosure hingga remote command execution (RCE). Penting sekali agar developer selalu menggunakan teknologi versi terbaru.

Laravel debug mode

Debug mode merupakan fitur pada framework yang memungkinkan kita untuk melihat detail error pada fase development. Namun, mengaktifkan debug mode pada fase production dapat menjadi kesalahan yang fatal.

Debug mode biasanya akan menampilkan detail kesalahan termasuk lokasi kesalahan pada source code, query SQL, versi framework, daftar routes, dan informasi sensitif lainnya.

Menampilkan debug mode kepada pengguna dapat menyebabkan sebagian source code terlihat beserta dengan query SQL-nya yang dapat dimanfaatkan attacker untuk memanipulasi logic pada aplikasi tersebut. Selain itu, dengan mengetahui versi framework, maka attacker dapat mencari known vulnerabilities.

Debug mode biasanya muncul ketika pengguna memasukkan data yang tidak tepat seperti mengakses path yang tidak ada atau memasukkan tipe data string yang padahal seharusnya tipe data number.

Maka dari itu, jangan lupa untuk mematikan debug mode ketika sudah memasukki fase production.

Validasi dan sanitasi inputan merupakan hal yang sangat penting karena sebagian besar cyber attack pada website berasal dari inputan pengguna.

Hapuslah karakter yang tidak diperlukan seperti ‘, “, <, >, ?. Jika terpaksa harus menggunakan karakter tersebut, lakukanlah escape sebelum diproses oleh aplikasi dan gunakan HTML encoding sebelum menampilkan data di browser.

Beberapa framework telah memiliki fitur bawaan untuk melakukan validasi dan sanitasi inputan sehingga kita tidak perlu melakukannya dari awal.

Validasi di client-side memberikan banyak manfaat seperti meningkatkan user experience dan mengurangi beban pada backend. Namun, attacker dapat menggunakan web proxy untuk melewati validasi dengan cara meng-intercept request dan mengedit datanya, lalu meneruskannya kembali ke server.

Sangat berbahaya jika backend tidak melakukan validasi lagi dan langsung mempercayai data tersebut. Maka dari itu, selalu lakukan validasi ulang di backend.

Permasalahan access control merupakan jenis kerentanan yang paling sering ditemui pada aplikasi. Misalnya seperti halaman admin yang tidak memerlukan fitur autentikasi dengan anggapan bahwa pengguna tidak akan mengetahuinya karena memang URL-nya tidak disertakan pada aplikasi. Padahal, attacker dapat melakukan fuzzing path dan tidak menutup kemungkinan jika halaman tersebut akan ditemukan.

Selain pada aplikasi utama, API juga seringkali memiliki pengecekan access control yang lemah. Misalnya ketika aplikasi merequest data user dengan URL /api/users/10, maka attacker dapat mengubahnya menjadi /api/users/11 dan mendapatkan data sensitif milik orang lain.

Broken access control juga banyak ditemui pada aplikasi yang memiliki banyak role pengguna. Contohnya pada aplikasi manajemen, terdapat role user biasa dan administrator. Administrator dapat menghapus siapa saja dari grup miliknya dengan menekan tombol hapus member yang akan mengirim request ke endpoint /api/deleteMember/<id user>, sementara tombol tersebut tidak ada pada interface user biasa. Namun, ketika user biasa langsung mengakses endpoint tersebut, maka ia dapat menghapus siapapun termasuk administrator.

Maka dari itu, penting sekali untuk mengecek access control pengguna sebelum mengakses suatu fitur/endpoint.

Ketika menyimpan data sensitif seperti kartu kredit dan password di database, maka kita harus melakukan enkripsi terlebih dahulu untuk meminimalisir terungkapnya data pada pihak yang tidak berwenang.

Namun, seringkali kita melakukan enkripsi menggunakan algoritma yang lemah seperti MD5 dan SHA1. Sebagai gantinya, gunakanlah algoritma yang lebih kuat seperti SHA2.

Tidak hanya saat penyimpanan data, pada proses pengiriman data juga harus dienkripsi agar tidak dapat dibaca oleh attacker yang menyadap komunikasi atau biasa disebut man in the middle (MITM). Hal ini dapat dilakukan dengan menggunakan HTTPS.

Ketika melakukan logout, maka pengguna tidak boleh melakukan fungsionalitas apapun pada aplikasi yang membutuhkan autentikasi. Namun dalam beberapa kasus, ditemukan bahwa pengguna tetap dapat mengakses fungsionalitas tersebut setelah logout.

Hal ini dapat disebabkan oleh pengakhiran session yang tidak benar seperti hanya menghapus access token di local storage saja atau bahkan lupa melakukan cek autentikasi ketika akan mengakses suatu halaman.

Maka dari itu, lakukanlah pengecekan autentikasi pada setiap halaman yang membutuhkan autentikasi serta akhiri session dengan benar di server, bukan di client-side.

Menerapkan praktik coding yang aman akan memiliki dampak baik bagi aplikasi yang sedang dikembangkan maupun bagi perusahaan. Hal ini dapat meningkatkan kepercayaan pengguna, mematuhi kebijakan hukum yang berlaku, dan meminimalisir terjadinya cyber attack. Yuk mulai terapkan secure coding mulai dari sekarang!

Read Entire Article