Rumah >pembangunan bahagian belakang >tutorial php >Adakah mysql_real_escape_string() Benar-benar Selamat? Potensi Perangkap dengan Pengekodan Aksara Asia.

Adakah mysql_real_escape_string() Benar-benar Selamat? Potensi Perangkap dengan Pengekodan Aksara Asia.

DDD
DDDasal
2024-10-26 15:02:02704semak imbas

 Is mysql_real_escape_string() Really Safe? The Potential Pitfall with Asian Character Encodings.

Melindungi Terhadap Suntikan SQL: Had mysql_real_escape_string()

Walaupun mysql_real_escape_string() biasanya digunakan untuk menghalang suntikan SQL, ia telah digunakan untuk menghalang suntikan SQL. mendakwa bahawa ia boleh dipintas dengan pengekodan aksara Asia tertentu pada tapak web yang tidak menggunakan pernyataan yang disediakan.

Isu Pintasan

Menurut Justin Shattuck, pintasan itu adalah mungkin dengan menggunakan aksara daripada pengekodan aksara Big5 atau GBK. Pengekodan ini membenarkan garis miring belakang diwakili sebagai bait tertib kedua atau lebih tinggi, yang boleh mengelirukan mysql_real_escape_string() untuk tidak melepaskannya dengan betul.

Penjelasan Stefan Esser

Stefan Esser menyatakan bahawa kelemahan itu timbul kerana mysql_real_escape_string() tidak menyedari perubahan yang dibuat melalui SET NAMES, yang boleh menukar pengekodan. Apabila pengekodan berbilang bait digunakan, garis miring ke belakang boleh diwakili sebagai berbilang bait, yang berpotensi memintas proses melarikan diri.

Adakah UTF-8 Selamat?

Esser menyatakan bahawa UTF-8 adalah pengecualian kepada isu ini, kerana ia mengendalikan garis miring ke belakang dengan betul dalam sebarang kedudukan bait. Walau bagaimanapun, dia mengesyorkan menggunakan mysql_set_charset untuk menukar pengekodan, kerana ia adalah pilihan yang lebih selamat dan terkini.

Pengesyoran

Untuk melindungi sepenuhnya daripada suntikan SQL, disyorkan untuk menggunakan disediakan kenyataan, yang tidak terdedah kepada isu pintasan ini. Jika kenyataan yang disediakan bukan pilihan, anda harus mempertimbangkan perkara berikut:

  • Elakkan menggunakan SET NAMES dengan mysql_real_escape_string()
  • Gunakan mysql_set_charset untuk menukar pengekodan apabila perlu
  • Gunakan pengekodan UTF-8, kerana ia tidak terdedah kepada pintasan ini

Atas ialah kandungan terperinci Adakah mysql_real_escape_string() Benar-benar Selamat? Potensi Perangkap dengan Pengekodan Aksara Asia.. 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