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

Bagaimana cara keluar dari karakter khusus mysql dengan sockets.io/node.js/javascript

Jangan lakukan

Anda bertanya tentang solusi yang salah untuk masalah tersebut.

Untuk mengganti apostrof dengan backslash-apostrof Anda dapat menggunakan:

str = msg.replace(/'/g, '\\\'');

tetapi Anda tidak boleh melakukan itu . Saya hanya memberikan info itu karena itulah pertanyaan Anda, tetapi baca di bawah.

Mengapa itu ide yang buruk

Anda tidak boleh melakukannya di sisi klien dan Anda juga tidak boleh melakukannya di sisi server. Jika menghindari kerentanan injeksi SQL adalah masalah sederhana mengganti apostrof dengan backslash-apostrof maka itu tidak akan menjadi masalah. Sayangnya ini lebih rumit.

Memiliki info yang Anda berikan, bahkan tidak mungkin untuk mengetahui apakah tanda garis miring terbalik akan melakukan apa yang Anda harapkan di tempat pertama tanpa melihat kode Anda yang benar-benar membuat kueri basis data. Tapi itu tidak masalah karena Anda seharusnya tidak pernah melakukan itu. Tidak pernah. Lihat jawaban tersebut untuk mengetahui alasannya - pertanyaan tersebut bukan tentang injeksi SQL tetapi contoh kode menyertakan kerentanan injeksi SQL dan jawabannya menjelaskannya:

Komik strip wajib

Apa yang harus Anda lakukan sebagai gantinya

Karena itu, Anda tidak memberi tahu modul apa yang Anda gunakan untuk menanyakan database tetapi tidak masalah jika Anda menggunakan mysql module atau Sequelize atau apa pun yang sepadan, harus selalu ada mekanisme interpolasi variabel dengan cara yang aman tanpa melepaskan dan menggabungkan string secara manual.

Contoh

Anda bahkan tidak menunjukkan satu baris kode pun yang relevan di sini, jadi saya tidak dapat memberi tahu Anda cara memperbaikinya, tetapi pertimbangkan contoh ini:

Tidak aman:

connection.query(
  "SELECT * FROM player WHERE nick = '"
  + data.login + "' AND pass = '" + data.pass + "'",
  function (err, rows) {
    //...
  }
);

Masih tidak aman, rumit, tidak dapat dibaca, tidak dapat dipelihara, dan tidak dapat diandalkan:

connection.query(
  "SELECT * FROM player WHERE nick = '"
  + data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
  function (err, rows) {
    //...
  }
);

Aman dan sederhana:

connection.query(
  "SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
  function (err, rows) {
    // ...
  }
);

Info selengkapnya

Untuk info lebih lanjut lihat dokumen:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara MySQL dan SQL?

  2. konversi tanggal php ke format mysql

  3. Mengapa Huruf Arab Tidak Dimasukkan Dalam Basis Data?

  4. PHP MySQL PDO:cara mempertahankan angka nol di depan kolom zerofill int

  5. Cara membuat sql-mode=NO_ENGINE_SUBSTITUTION permanen di MySQL my.cnf