Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

kerentanan mysql_escape_string

Jawaban yang buruk:

Tidak andal. Anda mengacu pada mysql_escape_string() , yang tidak memperhitungkan penyandian koneksi (sementara mysql_real_escape_string() tidak).

Jadi mungkin string yang dibuat dengan hati-hati, dengan codepoint UTF8 tidak lengkap yang dibuat dengan hati-hati di depan, mungkin menghasilkan, katakanlah, tanda kutipan diloloskan oleh mysql_escape_string() tetapi pelarian itu sendiri diabaikan oleh MySQL karena akan "melihatnya" sebagai karakter UTF8.

Mis.:

0xC2' OR 1=1 ;--

akan diloloskan oleh mysql_escape_string() sebagai

0xC2\' OR 1=1 ;--

yang akan dirakit menjadi

WHERE password='0xC2\' OR 1=1 ;--';

dan dilihat oleh MySQL (jika penyandian koneksi yang benar berlaku) sebagai, katakanlah,

WHERE password='€' OR 1=1 ;[--';]    <-- the bracketed part is considered a comment and ignored

yang akan menjadi injeksi SQL klasik.

Tapi ini memainkan fakta bahwa Anda menentukan, mungkin melalui gangguan, fungsi yang tidak digunakan lagi . Jika Anda benar-benar mengacu pada mysql_real_escape_string() , maka itu tidak akan berhasil.

Juga, ini mengasumsikan bahwa baik server, maupun lapisan aplikasi (misalnya PHP) tidak menggunakan validasi charset apa pun saat mengisi input. Jika ya, UTF8 yang tidak valid akan dihapus pada saat kedatangan, dan bahkan tidak pernah terlihat oleh mysql_escape_string , yang tentu saja sudah cukup.

Jawaban sebenarnya:

Jangan gunakan mysql_escape_string (atau mysql_whatever ) sama sekali. Mereka sudah usang dan kode Anda mungkin berhenti bekerja. Gunakan fungsi PDO sebagai gantinya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengambil setiap catatan ke-N dari sebuah tabel?

  2. Kunci asing non-primer di Django

  3. Mengalami masalah saat membuat tabel sementara dari UNION

  4. Bagaimana saya bisa membuat kesalahan fatal dari SEMUA peringatan mysql?

  5. Bagaimana cara menambahkan kolom menggunakan alter di mysql?