Защита срещу SQL инжекция в PHP
Здравейте. Днес ние считаме опциите тъй като може да се реализира защита срещу SQL инжекция.
Първо, нека да се справят с въпроса какво е SQL-инжекция. Самата дума инжекция означава, че нещо чуждо се въвежда някъде. В действителност, това е. Ако кодът на PHP (или друг език) данни, получени от браузъра веднага вкаран в заявката MySQL, без предварителна обработка, а след това в канала. Това означава, че нападателят може потенциално да свали цялата таблица (но може да направи повече и по-лошо от това), дори и ако се извършва с нормална заявка SELECT. Ето един пример:
Това означава, че променливата търсенето на $, получени от $ _GET веднага попада в заявката към базата данни, както и нападателят може да премине нещо като:
Това е стандартната конфигурация на сървъра MySQL (в който разделител между различните заявки - това е запетая), и чрез заместване на заявката ще бъде:
На първо място, разбира се, ще избере всичко, което е в тази таблица с поле = 1 (така да се изпълни SELECT заявка), а след това на масата е просто заличава (разбира се, ако имате права на базата данни на потребителя, но повечето от тях липсват).
Внимание! Горният пример - само за образователни цели, не е необходимо да го използва за лоши намерения.
Какви са методите? Защита срещу SQL инжекция PHP
Най-важното нещо - да не се включва празна променлива директно в SQL заявка. Най-добре е да го преминат през специална програма.
В случай на MySQL и PHP има две възможности. Първо малко по-голям (така да се каже "допотопни"), а другата модерна и обектно-ориентирано. Изборът на метод зависи от това как да прехвърляте данни към MySQL. Ако използвате остаряла функция mysql_query - ще подходи първия метод, ако една модерна и надеждна клас PHP ЗНП - втора.
Помислете за първия метод за защита срещу SQL PHP инжектирането през mysql_query
Ако все още използвате всички стари функции mysql_connect, mysql_select_db и mysql_query, помощта в защита срещу SQL инжекция годни функция: mysql_real_escape_string.
Същността на тази функция е активна в автоматичен извод на предаваната променлива в кавички. Изглежда, че толкова трудно, но повечето от исканията, по който тази функция се използва за успешно предпазва от SQL инжекция. В краен случай, запитването води до грешка от сървъра на базата данни, но се случват катастрофалните промени.
Помислете за нашия пример:
В крайна сметка всичко ще се оправи. MySQL молбата открива следния код:
Вторият метод: защита срещу SQL PHP инжектиране и PDO
ЗНП - вградена PHP клас, който осигурява модерна връзка с база данни, обектно-ориентиран подход и вградена защита от инжекциите.
ЗНП има вградена функция за подготовката им, се подготвя искане за изпълнение с оглед на определените параметри и изпълни функция, която можете да подадете параметри на заявката.
Да разгледаме следния пример:
Мисля, че на кода и всичко е ясно, но аз ще ви обясни.
Първо, ние се създаде заявка към базата данни (доколкото това е само обект в PHP) - $ PreparedStatement. При създаване (с помощта подготви), ние се отбележи, че искането ще участва един параметър: колона (параметър може да бъде всяко число, но е важно, че декларацията на тези параметри в запитването започва с двоеточие.
След това ние осъществяваме искане, преминавайки множество параметри, за да замести в заявката с функцията изпълни. В този случай, всички променливи, се предават на заявката с функцията Извършваме автоматично защитени от SQL инжекция.
Най-общо казано, ако PHP версия позволява използването на ЗНП е не само по-безопасен, но също така и по-удобно от гледна точка на кода на, и по-бързо от гледна точка на заявка (те имат вграден механизъм, който да работи с транзакции, заявки, както и много други). Но използвам на ЗНП в следващите издания.
Благодаря ви за вниманието, надявам се тези примери ще ви помогнат със защита от SQL инжекции на сайтовете си.
Сигурен съм, че тази информация владее techpixel.com. и успешно се прилага за защита срещу SQL инжекция в своите проекти на място.
- MySQL заявка с размера на, където
- MySQL се присъединят
- Поставяне на записи в MySQL заобикаляйки ...