Учебное пособие: Работа с базой данных 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-запросы, необходимо специальным образом экранировать в них некоторые символы (в частности, апостроф), например, поставить перед ними обратный слэш. Для вставки предназначена функция: