Rumah >pembangunan bahagian belakang >tutorial php >Adakah mysql_real_escape_string() Benar-benar Selamat? Potensi Perangkap dengan Pengekodan Aksara Asia.
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:
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!