Учебное пособие: Работа с базой данных MySQL средствами PHP

echo "Таблица '$table' содержит $fields колонок и $rows cтpoк<BR>"

echo "Таблица содержит следующие поля:<ВR>";

// "Проходимся" по всем полям и выводим информацию о них.

for ($i=0; $i<$fields; $i++)

{

$type = mysql_field_type($result, $i);

$name = mysql_field_name($result, $i);

$len = mysql_field_len($result, $i);

$flags.= mysql_field_flags($result, $i) ;

echo "$name $type($len) $flags<BR>\n";

}

?>


3. MySQL И ПРОБЛЕМЫ БЕЗОПАСНОСТИ

Запросы, отправляемые серверу MySQL, представляют собой обыкновенные строки РНР:

mysql_query("INSERT INTO table SET name='$name'");

В $name может храниться строка, содержащая апострофы.

Рассмотрим, какой запрос придет серверу MySQL, если $name равно "cat's":

INSERT INTO table SET name='cat's'

Эта команда синтаксически некорректна и породит ошибку во время выполнения.

Но может быть и хуже.

Рассмотрим такой запрос:

mysql_query("DELETE FROM table WHERE name='$name'");

Если параметр $name приходит из формы, и злоумышленник указал в нем следующую строку: "!' or 1=1 or '!", то после подстановки получится такой запрос к базе данных:

DELETE FROM table- WHERE name=' !' OR 1=1 OR ' !'

Этот запрос удалит все записи из таблицы table, потому что выражение SQL 1=1 всегда истинно.

Рассмотрим два способы защиты от подобных ошибок или действий злоумышленника:

● Экранирование спецсимволов.

● Шаблоны запросов и placeholders.

3.1 Экранирование спецсимволов

Прежде чем передавать значения переменных формы в SQL-запросы, необходимо специальным образом экранировать в них некоторые символы (в частности, апостроф), например, поставить перед ними обратный слэш. Для вставки предназначена функция:

К-во Просмотров: 1121
Бесплатно скачать Учебное пособие: Работа с базой данных MySQL средствами PHP