Версия для печати. Взято с сайта phpsql.ru

На главную   Назад   Вперед

Вставка вредоносного SQL-кода

Поскольку запросы, которые РНР передает базам данных MySQL, написаны на мощном языке программирования SQL, существует риск атаки типа SQL Injection, особенно при передаче Web-параметров в код MySQL. Злоумышленник путем передачи вредоносного SQL-кода, вставленного в форму, может взломать вашу базу данных.

Давайте представим, что у нас есть параметр формы, значение которого передается в переменную $product, которая, в свою очередь, используется в SQL-запросе:

$sql = "select * from pinfo where product = “$product”;
Если параметр пришел из формы, тогда нужно использовать специальные кавычки, используя «родные» функции РНР:
$sql = “Select * from pinfo where product = “”   . mysql_real_escape_string ($product)   .   “” ;
<pre>
Если вы этого не сделаете, кто угодно может передать этот фрагмент кода через параметр формы:
<pre>
39”;  DROP pinfo;  SELECT  “FOO
В результате будет выполнен следующий SQL-код:
select product from pinfo where product = “39”; DROP pinfo; SELECT “FOO”
Поскольку в качестве разделителя запросов в MySQL используется точка с запятой, база данных обработает три следующих запроса:
select * from pinfo where product = “39” DROP pinfo SELECT  “FOO”
He нужно быть гением, чтобы догадаться, что второй запрос уничтожит вашу таблицу.

Чтобы предотвратить атаки такого типа, нужно соблюдать два правила:

• Всегда проверяйте все параметры. Например, если параметр должен быть числом, убедитесь, что он является числом, а не чем-то другим.

• Всегдаиспользуйте функциют mysql_геа1_escape_string () для заключения передаваемых в запрос данных в кавычки.

Примечание.
Для автоматического заключения любых данных формы в кавычки вы можете использовать «волшебные кавычки» (см. #15).

Предотвратить разрушение базы данных можно путем ограничения прав MySQL-пользователя. Любая учетная запись MySQL должна быть ограничена, то есть заданы операции, которые можно выполнять под этой учетной записью. Например, вы можете создать MySQL-пользователя, который имеет право толь-ко получать данные из базы данных и ничего больше. Однако этот пользователь будет бесполезен, когда нужно вставить информацию в базу данных.

 
Предыдущая   На главную   Следующая