Mysql
 sql >> база данни >  >> RDS >> Mysql

Knex.js предотвратява ли инжектирането на sql?

Прочетете внимателно от документацията на knex как да предавате стойности на knex raw (http://knexjs.org/#Raw ).

Ако предавате стойности като свързване на параметър към raw като:

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

В този случай параметрите и низът на заявката се предават отделно към драйвера на базата данни, защитавайки заявката от SQL инжекция.

Други методи за създаване на заявки винаги използват вътрешно обвързващ формат, така че те също са безопасни.

За да видите как определена заявка се предава към драйвера на базата данни, можете да направите:

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

Което ще изведе SQL низ и връзки, които се дават на драйвера за изпълнение на заявката (https://runkit.com/ embed/2yhqebv6pte6 ).

Най-голямата грешка, която човек може да направи с необработените заявки на knex, е да използва низ от шаблон на javascript и да интерполира променливи директно във формат на SQL низ като:

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

Едно нещо, което трябва да се отбележи, е, че имената на таблици/идентификатори на knex не могат да се предават като свързвания към драйвера, така че с тях трябва да внимавате да не четете имената на таблици/колони от потребителя и да ги използвате, без първо да ги валидирате правилно.

Редактиране:

Като казвам, че имената на идентификатори не могат да се предават като обвързване, имам предвид, че когато се използва ?? knex -binding за име на идентификатор, което ще бъде изобразено като част от SQL низ, когато се предаде на драйвера на базата данни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да задам двигателя за съхранение по подразбиране, използван от MySQL?

  2. Защо не мога да покажа същия резултат два пъти, използвайки mysqli_fetch_assoc?

  3. Премахнете дублиращи се думи от полето в mysql

  4. Как да съхранявате 60 булеви числа в база данни на MySQL?

  5. Защо даденият синтаксис е валиден в mysql?