Serangan PHP dan injeksi SQL [2]
Kutipan Ajaib
Seperti disebutkan di atas, injeksi SQL terutama mengirimkan data yang tidak aman ke database untuk mencapai tujuan serangan. Untuk mencegah serangan injeksi SQL, PHP hadir dengan fungsi yang dapat memproses string input dan melakukan pemrosesan keamanan awal pada input di level bawah, yaitu Magic Quotes. (php.ini magic_quotes_gpc). jika magic_quotes_gpc
Jika opsi ini diaktifkan, tanda kutip tunggal, tanda kutip ganda, dan karakter lain dalam string masukan akan secara otomatis diawali dengan garis miring terbalik .
Tapi Magic Quotes bukanlah solusi universal, tidak memblokir semua karakter yang berpotensi berbahaya, dan di banyak server Magic Quotes tidak diaktifkan. Oleh karena itu, kita juga perlu menggunakan berbagai metode lain untuk mencegah injeksi SQL.
Banyak database menyediakan fungsionalitas pemrosesan data masukan ini secara asli. Misalnya, fungsi operasi MySQL PHP memiliki fungsi yang disebut mysql_real_escape_string(), yang dapat menghindari karakter khusus dan karakter yang dapat menyebabkan kesalahan operasi database.
lihat:
http://cn2.php.net/mysql_real_escape_string
Jika tertarik, Anda bisa membaca komentar di bawah ini :)
Lihat kode ini:
//Jika fungsi Magic Quotes diaktifkan
jika (get_magic_quotes_gpc()) {
$nama = garis miring($nama);
}kalau tidak{
$nama = mysql_real_escape_string($nama);
}
mysql_query("SELECT * FROM users WHERE name='{$name}'");
Perhatikan bahwa sebelum kita menggunakan fungsi yang disediakan oleh database, kita harus menentukan apakah Magic Quotes diaktifkan, seperti pada contoh di atas, jika tidak itu akan diulang dua kali. Pemrosesan akan salah. Jika MQ diaktifkan, kita perlu menghapus yang ditambahkan untuk mendapatkan data sebenarnya.
Selain melakukan preprocessing terhadap data berbentuk string di atas, saat menyimpan data Biner di database juga harus memperhatikan preprocessing. Jika tidak, data mungkin bertentangan dengan format penyimpanan database itu sendiri, menyebabkan database crash, catatan data hilang, atau bahkan seluruh database hilang. Beberapa database, seperti PostgreSQL, menyediakan fungsi pg_escape_bytea() yang khusus digunakan untuk menyandikan data biner, yang dapat menyandikan data serupa dengan Base64.
menyukai:
// untuk penggunaan data teks biasa:
pg_escape_string($regular_strings);
// untuk penggunaan data biner:
pg_escape_bytea($binary_data);
Dalam kasus lain, kita juga perlu menggunakan mekanisme seperti itu. Artinya, bahasa multi-byte seperti Cina, Jepang, dll yang tidak didukung oleh sistem database itu sendiri. Beberapa di antaranya memiliki rentang ASCII yang tumpang tindih dengan rentang data biner.
Namun, pengkodean data dapat menyebabkan kueri seperti LIKE abc% gagal.