Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy Knex.js zapobiega wstrzykiwaniu sql?

Przeczytaj uważnie dokumentację knex, jak przekazywać wartości do knex raw (http://knexjs.org/#Raw ).

Jeśli przekazujesz wartości jako powiązanie parametrów z surowymi, jak:

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

W takim przypadku parametry i ciąg zapytania są przekazywane oddzielnie do sterownika bazy danych chroniącego zapytanie przed wstrzyknięciem SQL.

Inne metody konstruktora zapytań zawsze używają formatu wiązania wewnętrznie, więc są również bezpieczne.

Aby zobaczyć, jak określone zapytanie jest przekazywane do sterownika bazy danych, można:

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

Który wygeneruje ciąg SQL i powiązania, które są przekazywane sterownikowi do uruchomienia zapytania (https://runkit.com/ embed/2yhqebv6pte6 ).

Największym błędem, jaki można zrobić z surowymi zapytaniami knex, jest użycie szablonu javascript i interpolacja zmiennych bezpośrednio do formatu ciągu SQL, takiego jak:

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

Należy zwrócić uwagę na to, że nazwy tabel/identyfikatorów Knex nie mogą być przekazywane jako powiązania do sterownika, dlatego należy zachować szczególną ostrożność, aby nie odczytać nazw tabel/kolumn od użytkownika i nie używać ich bez uprzedniego ich poprawnego sprawdzenia.

Edycja:

Mówiąc, że nazwy identyfikatorów nie mogą być przekazywane jako wiązania, mam na myśli to, że gdy używa się ?? knex -binding dla nazwy identyfikatora, który będzie renderowany jako część ciągu SQL po przekazaniu do sterownika bazy danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak naprawić „MySQL ERROR 1819 (HY000):” w systemie Linux?

  2. Aktualizacja schematu online w klastrze MySQL Galera przy użyciu metody RSU

  3. MySQL:Rozszerz zakres dat o nowe wiersze

  4. końcowe zera nie trafiają do bazy danych

  5. SQL UPDATE wszystkie wartości w polu z dołączonym ciągiem CONCAT nie działa