Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `mysql_real_escape_string` adalah Pertahanan yang Boleh Dipercayai Terhadap Suntikan SQL?

Adakah `mysql_real_escape_string` adalah Pertahanan yang Boleh Dipercayai Terhadap Suntikan SQL?

DDD
DDDasal
2024-10-26 05:00:31714semak imbas

Is `mysql_real_escape_string` a Reliable Defense Against SQL Injection?

Kelemahan mysql_real_escape_string

Walaupun mysql_real_escape_string menyediakan satu bentuk penapisan data input untuk menghalang serangan suntikan SQL, batasannya memerlukan perhatian.

Menggabungkan Pertanyaan:
Seperti yang dinyatakan, menggabungkan pertanyaan menggunakan mysql_real_escape_string tidak melindungi sepenuhnya daripada suntikan SQL. Pertimbangkan contoh berikut:

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));

Input seperti "5 OR 1=1" boleh memintas perlindungan yang disediakan oleh mysql_real_escape_string kerana penggunaan yang salah, menganggap nilai berangka sebagai rentetan.

Skop Sempit:
mysql_real_escape_string direka khusus untuk mengubah suai nilai rentetan yang bertujuan untuk dimasukkan dalam rentetan yang dipetik dalam penyataan SQL.

$value = mysql_real_escape_string($value, $link);
$sql = "... `foo` = '$value' ...";

Jika digunakan di luar konteks sempit ini, mysql_real_escapetently_string mungkin hilang cipta ralat sintaks atau kelemahan XSS.

Percanggahan Charset:
Menetapkan pengekodan sambungan pangkalan data secara tidak betul boleh memperkenalkan kelemahan. Menggunakan mysql_query("SET NAMES 'utf8'", $link) untuk menetapkan pengekodan aksara boleh membawa kepada percanggahan antara cara mysql_ API mengendalikan rentetan dan cara pangkalan data mentafsirnya.

Pelaksanaan Salah:
mysql_real_escape_string terdedah kepada penggunaan yang salah, seperti:

  • Menggunakannya pada nilai yang tidak disertakan dalam petikan
  • Memasukkannya dalam pertanyaan SQL itu sendiri
  • Menyalahtafsirnya sebagai pengganti untuk pernyataan yang disediakan

Walaupun mysql_real_escape_string boleh memberikan perlindungan terhadap serangan suntikan apabila digunakan dengan betul, adalah disyorkan untuk menggunakan teknik yang lebih mantap, seperti pernyataan yang disediakan, untuk memastikan keselamatan yang menyeluruh.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string` adalah Pertahanan yang Boleh Dipercayai Terhadap Suntikan SQL?. 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