Injection – Tantangan pada Keamanan Web

Penulis: Nur Hakim Arif, Arya Dhanika, Monika Retta Diniari

Pembimbing dan Editor: Nico Surantha, PhD

 

Sebuah aplikasi berbasis web dapat berinteraksi dengan pengguna melalui input teks yang diberikan oleh pengguna. Input teks ini kemudian diproses oleh aplikasi tersebut untuk menghasilkan output yang diinginkan oleh pengguna. Wujud input teks yang dimaksud meliputi: mouse click, keyword searches, typing on text box, dll. Salah satu kelemahan dari sebuah aplikasi web, yaitu website dapat diekploitasi lewat input teks yang diberikan ke dalamnya. Kelemahan atau Vulnerability ini disebut dengan nama injection.

Sebagai contoh, saat pengguna berinteraksi dengan website untuk mencari suatu barang menggunakan kolom pencarian. Website akan menerima input teks dan mencari nama barang yang sesuai dengan input teks tersebut. Dengan menggunakan metode injection, penyerang yang ingin mengekploitasi kelemahan website, memasukkan suatu kode atau sintaks yang ketika diproses oleh website dapat menyebabkan kerusakan pada website tersebut,  memodifikasi isi database, atau bahkan memodifikasi struktur databasenya. Kerusakan-kerusakan yang dapat terjadi pada database, seperti: men-dump database yang hanya dapat diakses oleh beberapa orang saja, dan memasukkan superuser yang baru, adalah beberapa jenis akibat dari serangan injection.

Injection pada dasarnya terbagi menjadi 2 tipe serangan; server-side injection dan SQL  injection:

  • Server-Side Injection melakukan serangan dengan cara memasukkan suatu file kode skrip yang dapat merusak website. Skrip tersebut akan dijalankan oleh website karena dianggap bagian dari aplikasi web melalui upload file yang website sediakan.
  • SQL Injection adalah serangan pada website yang dilakukan dengan sintaks SQL (suatu bahasa pemrograman yang banyak dipakai di database sebuah website), dimana sintaks SQL tersebut dapat menyebabkan kerusakan atau perubahan pada database website.

Serangan injection ini dapat dicegah dengan membuat filter untuk beberapa bentuk input yang dapat digunakan sebagai celah serangan tersebut sehingga input berbahaya tersebut tidak akan diproses oleh website ataupun database. Filter dilakukan pada saat input tersebut diterima oleh aplikasi web dengan memformat input teks tersebut sesuai dengan tipe data ataupun kebutuhan proses selanjutnya.

Pada server-side injection, tindakan pengamanan dapat dilakukan dengan validasi input oleh server sebelum diterima dan diproses oleh website. Validasi dapat berbentuk pemeriksaan apakah input data sesuai dengan tipe data yang akan diproses oleh server website. Sebagai contoh, ketika penyerang mencoba memasukkan skrip file lewat input website yang meminta upload file gambar .jpeg, server akan menolak input file selain file jpeg. Input dalam bentuk JSON dapat diamankan dengan parsing yang tidak menggunakan function eval(), tetapi menggunakan JSON.parse(). Cara pengamanan ini memastikan bahwa server hanya akan menerima data dalam bentuk format JSON saja,  Sehingga, ketika ada potongan kode dalam input file yang diterima oleh server bukan dalam format JSON, potongan kode itu tidak akan dijalankan. “Use strict” juga dapat digunakan pada fungsi-fungsi yang dibuat untuk keperluan website, jadi fungsi hanya akan menjalankan parameter yang telah ditentukan di dalam kode.

Pada SQL injection, dapat dilakukan beberapa tindakan pengamanan seperti: prepared statements, validasi input teks, dan pengaturan hak akses. Prepared statements mencegah attacker menjalankan kode SQL di data input yang memanfaatkan bagaimana syntaks SQL diproses oleh server. Hak Akses juga perlu diatur agar hanya pengguna-pengguna tertentu yang dapat mengakses beberapa fitur dari sebuah website, misalnya pengguna biasa tidak bisa mengakses dan memodifikasi fitur yang hanya admin yang bisa lakukan, eg: mengatur pengguna, menambah pengguna baru, atau mengubah level akses pengguna. Untuk demo lengkap dari jenis serangan injection, ditampilkan oleh video di bawah ini.

Nico Surantha