Атаки с помощью PHP и SQL-инъекций [2]
Волшебные цитаты
Как упоминалось выше, SQL-инъекция в основном передает небезопасные данные в базу данных для достижения цели атаки. Чтобы предотвратить атаки SQL-инъекций, в PHP имеется функция, которая может обрабатывать входную строку и выполнять предварительную обработку безопасности на входе на нижнем уровне, то есть Magic Quotes. (php.ini Magic_quotes_gpc). если Magic_quotes_gpc
Если эта опция включена, перед одинарными, двойными кавычками и другими символами во входной строке автоматически ставится обратная косая черта .
Но Magic Quotes — не слишком универсальное решение, оно не блокирует всех потенциально опасных символов, а на многих серверах Magic Quotes не включена. Поэтому нам также необходимо использовать различные другие методы для предотвращения SQL-инъекций.
Многие базы данных изначально предоставляют эту функцию обработки входных данных. Например, операционная функция MySQL в PHP имеет функцию mysql_real_escape_string(), которая может экранировать специальные символы и символы, которые могут вызвать ошибки в работе базы данных.
обратитесь к:
http://cn2.php.net/mysql_real_escape_string
Если вам интересно, вы можете прочитать комментарии ниже :)
Посмотрите на этот код:
//Если включена функция Magic Quotes
если (get_magic_quotes_gpc()) {
$name = полоски ($name);
}еще{
$name = mysql_real_escape_string($name);
}
mysql_query("SELECT * FROMusers WHERE name='{$name}'");
Обратите внимание: прежде чем использовать функции, предоставляемые базой данных, мы должны определить, включены ли Magic Quotes, как в приведенном выше примере, в противном случае оно будет повторено дважды. Обработка пойдет не так. Если MQ включен, нам нужно удалить добавленный , чтобы получить реальные данные.
Помимо предварительной обработки приведенных выше данных в строковой форме, при хранении двоичных данных в базе данных также следует обратить внимание на предварительную обработку. В противном случае данные могут конфликтовать с форматом хранения самой базы данных, что приведет к сбою базы данных, потере записей данных или даже к потере всей базы данных. Некоторые базы данных, такие как PostgreSQL, предоставляют функцию pg_escape_bytea(), специально используемую для кодирования двоичных данных, которая может кодировать данные аналогично Base64.
нравиться:
// для использования текстовых данных:
pg_escape_string($regular_strings);
// для использования двоичных данных:
pg_escape_bytea($binary_data);
В другом случае нам тоже придется использовать такой механизм. То есть многобайтовые языки, такие как китайский, японский и т. д., которые не поддерживаются самой системой баз данных. Некоторые из них имеют диапазоны ASCII, которые перекрываются с диапазонами двоичных данных.
Однако кодирование данных может привести к сбою таких запросов, как LIKE abc%.