6 Kerentanan Keamanan Utama PHP Dan Cara Memperbaikinya

Menurut Kinsta, 79,2% dari semua situs web mengandalkan PHP sampai taraf tertentu. Meskipun PHP adalah salah satu bahasa pemrograman pengembangan web tertua, namun masih sangat populer dan digunakan secara luas. Seperti bahasa atau framework lain, PHP juga rentan terhadap serangan. Dengan penggunaan PHP yang luas, dampak dari eksploitasi kerentanan keamanan PHP terlalu tinggi Untuk membantu Anda dalam hal ini, kami akan membahas tentang 6 kerentanan keamanan utama PHP dan cara memperbaikinya.

1. Secrets

Aplikasi web berurusan dengan banyak informasi sensitif seperti kata sandi, kunci SSH, kunci API, dll. Jika jatuh ke tangan yang salah, konsekuensinya bisa menjadi bencana besar. Oleh karena itu, penting untuk menangani informasi sensitif dengan aman. Salah satu cara paling sederhana yang digunakan penyerang untuk menemukan rahasia adalah dengan memasukkannya ke dalam kode. Bersamaan dengan itu, rahasia dalam transit juga dapat diakses dengan mencegat lalu lintas.

Ada beberapa cara untuk melakukan Secrets:

  • Jangan menulis langsung informasi rahasia di dalam code
  • Gunakan enkripsi
  • Gunakan manajemen password

2. Vulnerable Libraries

Menurut daftar, ada lebih dari 20.000 library untuk PHP. Sehingga pengembang menggunakan beberapa library PHP  ke dalam aplikasi. Namun jika library ini rentan, hal ini menjadi pembuka celah pada aplikasi yang dibuat. Ada 2 cara mengurangi risiko dari library yang rentan

  • Menghapus library yang tidak digunakan
  • Terapkan manajemen tambalan

3. SQL Injections

Injeksi SQL adalah jenis kerentanan injeksi kode di mana penyerang mengirimkan input berbahaya ke aplikasi untuk melakukan kueri SQL berbahaya. Ada berbagai jenis injeksi SQL:

  • Blind SQL Injection: Dalam jenis injeksi ini, kueri tidak menampilkan data atau kesalahan. Respon kueri menunjukkan apakah kueri berhasil dieksekusi atau tidak. Penyerang terus mencoba kueri berbeda berdasarkan respons untuk menemukan kueri jahat yang melakukan tindakan yang diinginkan.
  • Blind Time-based SQL Injection: Ini adalah versi dari tipe di atas di mana penyerang menyertakan waktu tidur dalam kueri. Waktu respons menunjukkan apakah kueri berhasil atau tidak.
  • Error-based SQL Injection: Penyerang menggunakan informasi dari kesalahan yang ditampilkan pada aplikasi saat dia menyuntikkan masukan berbahaya.
  • Union-based SQL Injection: Penyerang membuat input sedemikian rupa sehingga menggabungkan hasil dari dua atau lebih kueri dan menampilkan informasi bersama dengan tampilan data dari kueri yang sah.

Ada beberapa cara Memperbaiki Kerentanan Injeksi SQL

  • Bersihkan input pengguna: Ini menghilangkan arti dari karakter khusus dan sistem memperlakukannya sebagai string. Akibatnya, masukan berbahaya akan kehilangan kekuatannya dan tidak dapat dijalankan sebagai kueri SQL.
  • Parameterisasi kueri SQL: Dengan parameterisasi kueri SQL, Anda mendefinisikan kueri SQL dan parameter yang berasal dari input. Jika penyerang memasukkan string berbahaya, sistem akan menganggapnya tidak tepercaya dan tidak menjalankannya sebagai kueri SQL.

4. Command Injection

Command Injection adalah kerentanan yang memungkinkan penyerang menjalankan perintah shell sewenang-wenang pada sistem dengan membuat masukan berbahaya ke aplikasi. Command Injection terjadi ketika aplikasi PHP memanggil shell sistem. Mari kita ambil contoh dimana aplikasi PHP menggunakan utilitas ping dari sistem. Aplikasi mengambil nama host atau IP sebagai input, menggunakan fungsi seperti exec(), passthru(), atau system(), dan meneruskan input ke utilitas ping sistem, dan menampilkan output.

Cara Memperbaiki Kerentanan Command Injection

  • Hindari menggunakan panggilan shell: Hindari menggunakan fungsi seperti exec(), passthru(), dan system(). Cobalah untuk menemukan API atau pustaka yang menyediakan fungsi yang sama dengan perintah sistem.
  • Validasi masukan: Saat meneruskan masukan ke perintah, validasikan untuk memastikan tidak ada sesuatu yang tidak aman. Misalnya, jika Anda meneruskan IP atau nama host ke perintah ping, validasi bahwa input tersebut memang IP atau nama host

5. Cross-Site Scripting

Cross-site Scripting adalah kerentanan yang memungkinkan penyerang untuk mengeksekusi skrip sisi browser sewenang-wenang dengan menyusun masukan berbahaya. Ini adalah kerentanan yang memengaruhi pengguna akhir aplikasi. Ada 3 jenis utama skrip lintas situs:

  • Reflected XSS : Skrip berbahaya hanya ada di sisi browser dan penyerang harus mengirim muatan ke korban.

  • Stored XSS : Skrip berbahaya disimpan dalam database dan skrip dijalankan saat korban mengaksesnya dari database.

  • DOM XSS: Skrip berbahaya ditulis ke DOM dan klien membaca dari DOM.

Ada 3 Cara Memperbaiki Kerentanan Scripting Lintas Situs, antara lain:

  • Sanitasi input pengguna: Ini membersihkan setiap bagian yang berpotensi berbahaya dalam input yang akan menyebabkan serangan XSS. Sanitasi input mengeluarkan arti khusus dan aplikasi menganggapnya hanya sebagai data dan bukan sebagai skrip.
  • Validasi input pengguna: Ini membatasi input yang dapat dimasukkan pengguna sebelum memprosesnya. Akibatnya, input skrip berbahaya berkurang. Misalnya, memvalidasi email sebelum pengiriman mencegah penyerang memasukkan muatan XSS di kolom email
  • Gunakan bendera HttpOnly: Saat Anda menggunakan bendera HttpOnly untuk cookie, jika skrip sisi klien mencoba membaca cookie, browser mengembalikan string kosong. Ini tidak benar-benar memperbaiki kerentanan skrip lintas situs tetapi membatasi dampaknya.

6. Insecure Deserialization

PHP menggunakan serialisasi untuk mengubah objek menjadi aliran byte dan deserialisasi untuk mengubah aliran byte kembali ke objek. Meskipun ini membantu menyimpan atau meneruskan nilai tanpa kehilangan jenis dan strukturnya, ini menyisakan ruang untuk kerentanan deserialisasi yang tidak aman. Cara memperbaiki Insecure Deserialization adalah sebagai berikut

  • Sertakan pemeriksaan integritas data: Menggunakan pemeriksaan integritas data seperti checksum 
  • Gunakan serialisasi kustom: Menggunakan serialisasi kustom dan struktur deserialisasi dan logika, untuk mempersulit penyerang
  • Hindari deserialisasi data dari sumber yang tidak tepercaya
  • Menggunakan data deserialized di lingkungan dengan hak rendah:

Sumber : Security Boulevard, 6 Major PHP Security Vulnerabilities And How To Fix Them


Berita Terkait

Imbauan Keamanan : Remote Exploitation Pada Kerentanan Man-In-The-Disk Di Whatsapp

2021-06-21 dyah

Pada imbauan ini menjelaskan serangan phishing sederhana melalui aplikasi WhatsApp yang mengakibatkan kebocoran data pada external storage (/sdcard), serta bagaimana kerentanan WhatsApp

Imbauan Keamanan : Trickbot Malware

2021-05-24 dyah

TrickBot merupakan malware berjenis trojan yang dikembangkan dan dioperasikan oleh sekelompok pelaku kejahatan siber yang sudah ahli.

Imbauan Keamanan : Serangan Brute Force Gru

2021-07-19 dyah

Sejak pertengahan 2019 sampai dengan awal 2021, CISA US mendeteksi adanya peningkatan aktifitas serangan siber yang dilakukan oleh aktor serangan yang dikenal sebagai siber Fancy Bear, APT28, Strontium

Imbauan Keamanan : Kerentanan Pada Windows Domain Name System (Dns) Server Remote Code Execution

2021-05-17 dyah

Tanggal 9 Maret 2021, Windows mengumumkan panduan keamanan terkait adanya kerentanan pada produk Windows Server berupa Server Remote Code Execution.

Komunikasi e-mail terenkripsi?

Silahkan gunakan Pretty Good Privacy (PGP).