Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `mysql_real_escape_string()` Benar-benar Berkesan Melawan SQL Injection?

Adakah `mysql_real_escape_string()` Benar-benar Berkesan Melawan SQL Injection?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-09 13:10:02997semak imbas

Is `mysql_real_escape_string()` Really Effective Against SQL Injection?

Adakah mysql_real_escape_string() Rosak? Analisis Yang Lebih Dalam

Walaupun penggunaannya meluas, beberapa kebimbangan telah dibangkitkan mengenai keberkesanan mysql_real_escape_string() dalam mencegah serangan suntikan SQL. Artikel ini menyiasat tuntutan ini dan meneroka had dan alternatif kepada fungsi ini.

Kecacatan dalam mysql_real_escape_string()

Kebimbangan tentang mysql_real_escape_string() berpunca daripada pergantungannya pada arus set aksara sambungan MySQL. Kebergantungan ini boleh membawa kepada kelemahan jika set aksara tidak dikonfigurasikan dengan betul atau jika ia ditukar semasa pelaksanaan pertanyaan.

Dokumentasi MySQL secara eksplisit menyatakan bahawa set aksara yang digunakan oleh mysql_real_escape_string() dikawal oleh mysql_set(_character_set ). Menetapkan set aksara dengan pernyataan SET NAMES atau SET CHARACTER SET tidak menjejaskan set aksara yang digunakan oleh mysql_real_escape_string().

Kod Bukti

Kod berikut menunjukkan kerentanan :

mysql_set_charset('latin1');
$escaped_string = mysql_real_escape_string("'@CHARACTER SET utf8");

Dalam contoh ini, mysql_set_charset() menetapkan set aksara sambungan kepada 'latin1'. Walau bagaimanapun, fungsi mysql_real_escape_string() masih terlepas daripada rentetan seolah-olah set aksara ialah 'utf8'.

Alternatif kepada mysql_real_escape_string()

Berdasarkan batasan ini, adalah dinasihatkan untuk mengelak daripada bergantung semata-mata mysql_real_escape_string() untuk perlindungan suntikan SQL. Sebaliknya, pertimbangkan untuk menggunakan alternatif berikut:

  • Pernyataan Disediakan: Gunakan keupayaan PDO atau mysqli PHP untuk menjana pernyataan yang disediakan untuk melaksanakan pertanyaan.
  • Watak Manipulasi Set: Pastikan set aksara yang betul ditetapkan menggunakan mysql_set_charset() dan ia tidak berubah semasa pelaksanaan pertanyaan.
  • Pengesahan dan Penapisan: Laksanakan teknik pengesahan dan penapisan input untuk mengelakkan aksara berniat jahat daripada dimasukkan ke dalam pertanyaan.

Kesimpulan

Walaupun mysql_real_escape_string() kekal sebagai kaedah yang sah untuk melepaskan rentetan, adalah penting untuk mengetahui batasannya dan menggunakan keselamatan tambahan langkah-langkah untuk mencegah serangan suntikan SQL. Dengan memahami dan mengurangkan kelemahan ini, pembangun boleh melindungi aplikasi MySQL mereka dengan berkesan daripada input berniat jahat.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` Benar-benar Berkesan Melawan SQL Injection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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