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

Най-добрият начин за защита на SQL заявка в PHP

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

Първо, трябва да потвърдите всички въвеждането на потребителя (потребителски имена, имейли и т.н.), преди да го използвате в заявка. Например:- Ако сте разрешили само буквено-цифрови знаци в потребителско име, тогава трябва да проверите дали входът всъщност е буквено-цифров или не, преди да продължите да формирате заявка за база данни и също така трябва да проверите размера на всички входове.

След това според мен Prepared Statements е най-добрият избор за предотвратяване на SQL инжектиране.

Проблем с mysql_real_escape_string():-

Тъй като mysql_real_escape_string() избягва символите според набора от знаци по подразбиране, така че е по-добре от функцията addslashes() и правилно дезинфекцира SQL инжекции, произтичащи от злоупотреба с многобайтови набори от знаци , но в друга статия тук , е показан сценарий за заобикаляне, който обяснява, че инжектирането все още може да се извърши.

Решение:-

Така че правилният и по-добър начин за предотвратяване на SQL инжектиране е да използвате подготвени оператори. Това е техника, при която SQL изразите се компилират предварително преди вмъкването на потребителския вход (параметри) и се третират като SQL шаблони за многократна употреба. Така че, той разделя въведеното от потребителя от действителния SQL-код и SQL-парсерът никога не анализира въведеното от потребителя.

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

Можете да се обърнете към ръководството на PHP за подробности за внедряването.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Контекстният мениджър за MySQLdb на Python

  2. Примери за параметризирани заявки

  3. AWS RDS MySql – как да разрешите достъп след настройка на „Публично достъпен“

  4. MySQL сортиране по изчисление

  5. Mysql Средна колона за време?