Dalam pengembangan aplikasi web, frontend merupakan bagian yang berinteraksi langsung dengan pengguna. Sedangkan backend bertanggung jawab untuk menangani logika bisnis, penyimpanan data, dan keamanan. Dalam arsitektur aplikasi web, komunikasi antara frontend dan backend dilakukan melalui request dan response. Namun, memberikan kepercayaan penuh pada request dari frontend bisa berakibat fatal. Berikut beberapa hal yang paling berbahaya jika kita terlalu percaya dengan request dari frontend:
1. Manipulasi Data
Frontend berada di sisi klien yang artinya pengguna memiliki kontrol penuh terhadapnya. Dengan alat seperti browser developer tools, pengguna bisa memanipulasi request sebelum dikirim ke backend. Ini termasuk mengubah data form, parameter URL, dan header request. Tanpa validasi dan sanitasi yang tepat di sisi server, data yang dimanipulasi bisa menyebabkan integritas data rusak dan bahkan memicu kerentanan keamanan.
Contoh Kasus:
Pengguna mengakses aplikasi e-commerce dan melihat form untuk mengubah alamat pengiriman. Dengan menggunakan alat seperti browser developer tools, pengguna mengubah data yang akan dikirim ke server, misalnya mengubah ID pengguna menjadi ID pengguna lain.
Bahaya:
Jika backend tidak memverifikasi bahwa ID pengguna yang mengajukan permintaan perubahan alamat adalah sama dengan ID pengguna yang sedang login, ini bisa menyebabkan perubahan alamat yang tidak sah, sehingga pesanan bisa dikirim ke alamat yang salah.
2. Injeksi SQL
Jika backend tidak memvalidasi dan membersihkan input dari frontend, ini bisa membuka pintu bagi serangan injeksi SQL. Penyerang dapat menyisipkan pernyataan SQL berbahaya ke dalam input yang kemudian dieksekusi oleh database. Ini bisa mengakibatkan kebocoran data, penghapusan data, atau bahkan pengambilalihan database.
Contoh Kasus:
Form login di aplikasi web mengirimkan nama pengguna dan kata sandi ke server. Pengguna yang berbahaya memasukkan admin' -- sebagai nama pengguna dan kata sandi kosong.
Bahaya:
Jika backend tidak menggunakan parameterized queries dan hanya menyisipkan input langsung ke dalam query SQL, maka query bisa menjadi:
SELECT * FROM users WHERE username = 'admin' --' AND password = '';
Bagian `--` mengomentari sisa query, memungkinkan pengguna login sebagai admin tanpa memasukkan kata sandi.
3. Cross-Site Scripting (XSS)
Cross-Site Scripting terjadi ketika aplikasi menerima data dari pengguna dan menampilkannya di halaman web tanpa validasi atau encoding yang benar. Jika backend menerima dan memproses data dari frontend tanpa pemeriksaan yang memadai, penyerang bisa menyisipkan skrip berbahaya yang dieksekusi di browser pengguna lain, mencuri informasi sensitif seperti cookies atau mengubah tampilan halaman web.
Contoh Kasus:
Pengguna mengirimkan komentar yang mengandung skrip berbahaya:
<script>alert('XSS!');</script>
Bahaya:
Jika backend tidak melakukan sanitasi input dan langsung menyimpan serta menampilkan komentar ini di halaman web, setiap pengguna yang melihat komentar ini akan menjalankan skrip tersebut di browser mereka. Ini bisa digunakan untuk mencuri cookie sesi atau melakukan tindakan berbahaya lainnya.
4. Authorization Bypass
Frontend sering kali memiliki kontrol UI untuk membatasi akses berdasarkan peran pengguna. Namun, kontrol ini hanya bersifat kosmetik dan tidak dapat dijadikan sebagai satu-satunya lapisan keamanan. Jika backend tidak memverifikasi otorisasi untuk setiap request, pengguna bisa memalsukan request untuk mengakses data atau fungsi yang seharusnya dibatasi.
Contoh Kasus:
Aplikasi memiliki kontrol UI yang hanya menampilkan tombol "Hapus Pengguna" untuk administrator. Namun, pengguna biasa mencoba mengirimkan request langsung ke endpoint yang menangani penghapusan pengguna dengan alat seperti Postman.
Bahaya:
Jika backend tidak memeriksa apakah pengguna yang mengirim request memiliki peran administrator, pengguna biasa bisa menghapus akun pengguna lain tanpa izin.
5. Parameter Tampering
Parameter Tampering adalah manipulasi data dalam request yang dikirim dari frontend ke backend. Misalnya, harga barang dalam aplikasi e-commerce atau tingkat akses dalam aplikasi berbasis peran bisa diubah oleh pengguna. Tanpa validasi dan pemeriksaan yang tepat, backend mungkin menerima dan memproses data yang sudah dimanipulasi ini, menyebabkan kerugian finansial atau pelanggaran hak akses.
Contoh Kasus:
Aplikasi e-commerce mengirimkan harga produk dalam request saat menambahkannya ke keranjang belanja:
{
"productId": 123,
"quantity": 1,
"price": 100.00
}
Pengguna mengubah harga menjadi 1.00 dengan alat seperti browser developer tools.
Bahaya:
Jika backend tidak memvalidasi harga produk berdasarkan data di database, melainkan menerima harga dari request, pengguna bisa membayar harga yang jauh lebih rendah dari seharusnya. Tapi alangkah baiknya jika harga tidak usah dikirim melainkan backend yang mengkalkulasi harga secara mandiri.
6. Sensitive Data Exposure
Informasi sensitif seperti nomor kartu kredit, data pribadi, dan kata sandi seharusnya tidak pernah dikirimkan atau diterima dalam bentuk yang mudah dibaca (plain text). Jika backend mempercayai frontend dalam hal ini, data sensitif bisa terekspos dalam perjalanan atau di sisi klien, membuatnya rentan terhadap penyadapan atau pencurian.
Contoh Kasus:
Aplikasi mengirimkan nomor kartu kredit dalam request untuk menyelesaikan transaksi:
{
"creditCardNumber": "4111111111111111",
"expiryDate": "12/24",
"cvv": "123"
}
Bahaya:
Jika data ini dikirimkan melalui koneksi yang tidak aman (HTTP) atau disimpan tanpa enkripsi di server, data sensitif bisa dicuri oleh penyerang yang menyadap jaringan atau mengakses server.
Kesimpulan
Mempercayai request dari frontend tanpa validasi dan pemeriksaan yang memadai di sisi backend adalah praktik yang sangat berbahaya. Backend harus selalu dianggap sebagai sumber kebenaran dan bertanggung jawab untuk memverifikasi, membersihkan, dan memvalidasi semua data yang diterima dari frontend. Ini melibatkan penerapan prinsip-prinsip keamanan seperti validasi input, otorisasi berbasis peran, dan enkripsi data. Dengan demikian, kita dapat melindungi aplikasi web dari berbagai ancaman keamanan dan memastikan integritas serta kerahasiaan data pengguna.