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

колко безопасни са изготвените изявления за ЗНП

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

Начинът, по който работят параметрите на заявката е, че заявката се изпраща до сървъра на базата данни, когато извикате prepare() , а стойностите на параметрите се изпращат по-късно, когато извикате execute() . Така че те се съхраняват отделно от текстовата форма на заявката. Никога няма възможност за SQL инжектиране (при условие PDO::ATTR_EMULATE_PREPARES е невярно).

Така че да, параметрите на заявката ви помагат да избегнете тази форма на уязвимост в сигурността.

Дали са 100% доказателство срещу някаква уязвимост в сигурността? Не разбира се, че не. Както може би знаете, параметърът на заявката заема само мястото на една литерална стойност в SQL израз. Не можете да направите един параметър заместител на списък със стойности, например:

SELECT * FROM blog WHERE userid IN ( ? );

Не можете да използвате параметър, за да направите имената на таблици или колони динамични:

SELECT * FROM blog ORDER BY ?;

Не можете да използвате параметър за друг тип SQL синтаксис:

SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;

Така че има доста случаи, в които трябва да манипулирате заявката като низ, преди prepare() обадете се. В тези случаи все пак трябва да пишете код внимателно, за да избегнете 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. Дали да се използва ИМЕНА НА НАБОРИ

  2. MySQL в облака - плюсове и минуси на Amazon RDS

  3. Как да получите числови типове от MySQL с помощта на PDO?

  4. Присъединяване към MySQL срещу ИЗПОЛЗВАНЕ?

  5. Използване на нишки за отправяне на заявки за база данни