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

Защита от инжектиране на SQL само със str_replace

Този изолиран пример е неуязвим за инжектиране.

Но трябва да осъзнаете, че защитата от sql инжектиранене е просто замяна на символ . И обстоятелствата може да се различават от тези, които приемате в момента за даденост. Така вашият код ще стане уязвим в дългосрочен план, поради съществени недостатъци на този метод :

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

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

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

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

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




  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 ГРЕШКА 1067

  2. UTF-8:Генерал? Кошче? Unicode?

  3. Вмъкване в таблица на mysql и презаписване на всички текущи данни

  4. Работа с MySQL TIMESTAMP колони в SQL Server

  5. PDO::PARAM за тип десетичен?