Cara membersihkan input pengguna dengan PHP

Cara membersihkan input pengguna dengan PHP

iis

September 15, 2019

Apakah ada fungsi catchall di suatu tempat yang bekerja dengan baik untuk membersihkan input pengguna untuk injeksi SQL dan serangan XSS, sementara masih memungkinkan jenis tag HTML tertentu?

Ini adalah kesalahpahaman umum bahwa input pengguna dapat difilter. PHP bahkan memiliki “fitur” yang sekarang sudah usang, yang disebut kutipan ajaib, yang dibangun berdasarkan ide ini. Ini omong kosong. Lupakan tentang penyaringan (atau pembersihan, atau apa pun orang menyebutnya).

sqli

Apa yang harus Anda lakukan, untuk menghindari masalah, cukup sederhana: setiap kali Anda memasukkan string ke dalam kode asing, Anda harus menghindarinya, sesuai dengan aturan bahasa itu. Misalnya, jika Anda menyematkan string dalam beberapa penargetan SQL MySQL, Anda harus melarikan diri string dengan fungsi MySQL untuk tujuan ini (mysqli_real_escape_string). (Atau, dalam hal database, menggunakan pernyataan yang disiapkan adalah pendekatan yang lebih baik, bila mungkin.)

Contoh lain adalah HTML: Jika Anda menanamkan string dalam markup HTML, Anda harus menghindarinya dengan htmlspecialchars. Ini berarti bahwa setiap pernyataan gema atau cetak harus menggunakan htmlspecialchars.

Contoh ketiga bisa berupa perintah shell: Jika Anda akan menanamkan string (seperti argumen) ke perintah eksternal, dan memanggilnya dengan exec, maka Anda harus menggunakan escapeshellcmd dan escapeshellarg.

Dan seterusnya dan seterusnya …

Satu-satunya kasus di mana Anda perlu memfilter data secara aktif, adalah jika Anda menerima input yang telah diformat sebelumnya. Misalnya, jika Anda membiarkan pengguna memposting markup HTML, yang Anda rencanakan untuk ditampilkan di situs. Namun, Anda harus bijaksana untuk menghindari ini di semua biaya, karena tidak peduli seberapa baik Anda memfilternya, itu akan selalu menjadi lubang keamanan potensial.