addslashes()
lwn. mysql_real_escape_string()
dalam Mencegah Suntikan SQL
Walaupun sering disebut-sebut sebagai alternatif yang lebih selamat kepada addslashes()
, mysql_real_escape_string()
kekal sebagai kaedah yang disyorkan untuk mencegah kelemahan suntikan SQL dalam aplikasi PHP. Memahami batasan addslashes()
adalah kunci untuk membina keselamatan yang teguh.
Pertimbangkan ini: pertanyaan SQL, bergantung pada addslashes()
untuk pembersihan input pengguna, menemui rentetan yang mengandungi petikan tunggal ('). addslashes()
mungkin tersilap mengenal pasti petikan ini sebagai sebahagian daripada aksara berbilangbait, menyebabkan pertanyaan itu terdedah kepada suntikan.
Penyerang boleh mengeksploitasi ini dengan menambahkan tanda sempang (-) atau aksara serupa yang menamatkan jujukan berbilang bait dalam pengekodan Unicode tertentu (seperti ISO-8859-1, tetapi bukan UTF-8). Ini memperdaya addslashes()
untuk menganggap petikan tunggal sebagai sebahagian daripada aksara berbilang bait yang sah, memintas mekanisme melarikan diri dan membenarkan pelaksanaan kod berniat jahat.
Kerentanan adalah khusus pengekodan. UTF-8, pengekodan Unicode yang digunakan secara meluas, secara amnya selamat daripada serangan khusus ini kerana ia tidak menggunakan aksara penamatan berbilangbait yang sama.
Untuk perlindungan suntikan SQL yang optimum, sentiasa utamakan mysql_real_escape_string()
daripada addslashes()
. Tambah ini dengan pengesahan input peringkat aplikasi dan penggunaan pernyataan yang disediakan untuk interaksi pangkalan data. Dengan mengakui kelemahan addslashes()
dan melaksanakan amalan terbaik ini, pembangun boleh mengurangkan risiko serangan suntikan SQL dengan ketara.
Atas ialah kandungan terperinci Adakah `addslashes()` Benar-benar Melindungi Terhadap SQL Injection, dan Mengapa Anda Perlu Menggunakan `mysql_real_escape_string()` Sebaliknya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!