Pada contoh code yang rentan (vulnerable) di atas, nilai dari variabel $attr
(yang bisa berasal dari pengguna atau sumber lain) langsung dimasukkan ke dalam query database tanpa pengecekan. Ini berarti jika ada pengguna jahat yang memasukkan data berbahaya, seperti karakter khusus atau perintah tertentu, data tersebut bisa merusak database. Misalnya, seseorang bisa memasukkan sesuatu yang bisa memanipulasi query dan menjalankan perintah berbahaya, yang dapat mengakibatkan pencurian data atau kerusakan pada situs.
Singkatnya, kode ini tidak melindungi situs dengan baik dari input berbahaya, yang bisa menimbulkan risiko keamanan yang serius.
Patch (perbaikan) menggunakan WordPress core API
Kalau menggunakan platform CMS WordPress, menutup celah keamanan kode PHP dari serangan SQL Injection seperti ini sebenarnya cukup mudah.
WordPress sudah punya fitur bawaan untuk membantu pengembang menjaga keamanan kode, yaitu dengan menggunakan wpdb::prepare
method (referensi). Dengan fitur ini, input dari pengguna akan otomatis diolah agar aman sebelum dimasukkan ke database. Jadi, tidak perlu repot-repot menciptakan sistem keamanan dari nol, cukup manfaatkan API yang sudah disediakan WordPress.
Implementasinya seperti ini:
P.S.:
Snippet di atas didapat dari riset software plugin WordPress: uListing.