mysql_real_escape_string
Экранирует специальные символы в строках для
использования в выражениях SQL
&reftitle.description;
stringmysql_real_escape_stringstringunescaped_stringresourcelink_identifier
Экранирует специальные символы в unescaped_string,
принимая во внимание кодировку соединения, таким образом, что результат
можно безопасно использовать в SQL-запросе в функци mysql_query.
Если вставляются бинарные данные, то к ним так же необходимо применять эту функцию.
mysql_real_escape_string вызывает библиотечную функцмю MySQL
mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам:
\x00, \n,
\r, \, ',
" and \x1a.
Эта функция должна всегда (за несколькими исключениями) использоваться для того,
чтобы обезопасить данные, вставляемые в запрос перед отправкой его в MySQL.
&reftitle.parameters;
unescaped_string
Строка, которая должна быть экранирована.
&mysql.linkid.description;
&reftitle.returnvalues;
Возвращает строку, в которой экранированы все необходимые символы,
или &false; в случае ошибки.
&reftitle.examples;
Простой пример использования
mysql_real_escape_string
]]>
Пример взлома с использованием SQL Injection
]]>
Запрос, который будет отправлен в MySQL:
Это позволит кому угодно войти в систему без пароля.
Лучший вариант составления запроса
Применение mysql_real_escape_string к каждой переменной,
вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является
наилучшим вариантом составления запросов и не зависит от установки
Magic Quotes.
]]>
Запрос, составленный таким образом, будет выполнен без ошибок,
и взлом с помощью SQL Injection окажется невозможен.
&reftitle.notes;
Функцию mysql_real_escape_string можно использовать
только после того, как установлено соединение с MySQL. В противном
случае возникнет ошибка уровня E_WARNING, а функция
возвратит &false;. Если link_identifier не указан,
используется последнее открытое соединение.
Если magic_quotes_gpc включены,
то сначала данные следует обработать функцией stripslashes.
Если mysql_real_escape_string применяется к данным,
которые уже были прослешены, то в результате слеши в данных будут удваиваться.
Если не пользоваться этой функцией, то запрос становится уязвимым для
взлома с помощью SQL Injection.
mysql_real_escape_string не экранирует символы
% и _. Эти знаки являются масками
групп символов в операторах MySQL LIKE,
GRANT или REVOKE.
&reftitle.seealso;
mysql_client_encodingaddslashesstripslashesДиректива magic_quotes_gpcДиректива magic_quotes_runtime