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

Apakah Knex.js mencegah injeksi sql?

Baca dengan cermat dari dokumentasi knex cara meneruskan nilai ke knex raw (http://knexjs.org/#Raw ).

Jika Anda meneruskan nilai sebagai pengikatan parameter ke mentah seperti:

knex.raw('select * from foo where id = ?', [1])

Dalam hal ini, parameter dan string kueri diteruskan secara terpisah ke driver database yang melindungi kueri dari injeksi SQL.

Metode pembuat kueri lainnya selalu menggunakan format pengikatan secara internal sehingga juga aman.

Untuk melihat bagaimana kueri tertentu diteruskan ke driver basis data yang dapat dilakukan:

knex('foo').where('id', 1).toSQL().toNative()

Yang akan menampilkan string SQL dan binding yang diberikan kepada driver untuk menjalankan kueri (https://runkit.com/ embed/2yhqebv6pte6 ).

Kesalahan terbesar yang dapat dilakukan dengan kueri mentah knex adalah menggunakan string templat javascript dan menyisipkan variabel langsung ke format string SQL seperti:

knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS 

Satu hal yang perlu diperhatikan adalah bahwa nama tabel/pengidentifikasi knex tidak dapat diteruskan sebagai binding ke driver, jadi dengan nama tersebut harus ekstra hati-hati untuk tidak membaca nama tabel/kolom dari pengguna dan menggunakannya tanpa memvalidasinya terlebih dahulu dengan benar.

Sunting:

Dengan mengatakan bahwa nama pengidentifikasi tidak dapat diteruskan sebagai pengikat, maksud saya ketika seseorang menggunakan ?? knex -binding untuk nama pengenal, yang akan dirender sebagai bagian dari string SQL saat diteruskan ke driver database.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Adakah yang tahu arti di balik pesan kesalahan php ini?

  2. Bagaimana cara menggunakan variabel dalam pernyataan siap untuk kueri sql?

  3. Bagaimana cara menyimpan file .txt database MySQL?

  4. SET variabel yang ditentukan pengguna di mysql mengembalikan nol?

  5. Cara menghasilkan 5 angka acak dalam prosedur tersimpan mysql