Adakah mysql_real_escape_string Cukup untuk Mencegah Suntikan SQL?

Susan Sarandon
Lepaskan: 2024-10-26 21:30:29
asal
761 orang telah melayarinya

  Is mysql_real_escape_string Enough to Prevent SQL Injection?

Kesilapan yang Perlu Dielakkan dengan mysql_real_escape_string

Walaupun merupakan kaedah yang biasa digunakan untuk mencegah suntikan SQL, mysql_real_escape_string boleh gagal melindungi daripada serangan jika digunakan dengan betul . Walaupun ia melarikan diri dengan cekap aksara khas dalam nilai rentetan, senario tertentu boleh timbul apabila keberkesanannya terjejas.

Penggunaan Betul: Nilai Rentetan Dipetik

mysql_real_escape_string hanya boleh digunakan apabila memasukkan kandungan teks yang disertakan dalam petikan dalam pernyataan SQL. Contohnya:

$value = mysql_real_escape_string($value, $link);
$sql = "... `foo` = '$value' ...";
Salin selepas log masuk

Penggunaan Salah

Aplikasi mysql_real_escape_string yang salah boleh membawa kepada kelemahan. Kesilapan biasa termasuk:

  • Menggunakannya dalam konteks bukan petikan (cth., ... column_name = $value ...)
  • Menggunakannya pada nilai bukan rentetan (cth., input angka)
  • Menyalahgunakannya di luar konteks SQL (cth., $sql = mysql_real_escape_string("... foo = '$value' ..."))

Pertimbangan Pengekodan

Satu lagi perangkap ialah salah konfigurasi pengekodan sambungan pangkalan data. Kaedah yang betul ialah:

mysql_set_charset('utf8', $link);
Salin selepas log masuk

Walau bagaimanapun, menggunakan mysql_query("SET NAMES 'utf8'", $link) boleh menyebabkan percanggahan antara pengekodan yang diandaikan oleh mysql_ API dan pengekodan sebenar pangkalan data. Ini berpotensi membenarkan serangan suntikan yang melibatkan rentetan berbilangbait.

Kesimpulan

mysql_real_escape_string kekal sebagai alat yang berharga jika digunakan seperti yang dimaksudkan. Walau bagaimanapun, mengiktiraf hadnya dan menerapkannya dengan betul adalah penting untuk mengelakkan kelemahan suntikan SQL. Adalah disyorkan untuk meneroka alternatif yang lebih moden seperti pernyataan yang disediakan untuk meningkatkan keselamatan dan kemudahan penggunaan.

Atas ialah kandungan terperinci Adakah mysql_real_escape_string Cukup untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan