(PHP 4 >= 4.3.0, PHP 5)
mysql_real_escape_string -- Экранирует специальные символы в строках для использования в выражениях SQLЭкранирует специальные символы в unescaped_string, принимая во внимание кодировку соединения, таким образом, что результат можно безопасно использовать в SQL-запросе в функци mysql_query(). Если вставляются бинарные данные, то к ним так же необходимо применять эту функцию.
mysql_real_escape_string() вызывает библиотечную функцмю MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \x00, \n, \r, \, ', " and \x1a.
Эта функция должна всегда (за несколькими исключениями) использоваться для того, чтобы обезопасить данные, вставляемые в запрос перед отправкой его в MySQL.
Строка, которая должна быть экранирована.
The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If by chance no connection is found or established, an E_WARNING level warning is generated.
Возвращает строку, в которой экранированы все необходимые символы, или FALSE в случае ошибки.
Пример 2. Пример взлома с использованием SQL Injection
Запрос, который будет отправлен в MySQL:
Это позволит кому угодно войти в систему без пароля. |
Пример 3. Лучший вариант составления запроса Применение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом составления запросов и не зависит от установки Magic Quotes.
Запрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен. |
Замечание: Функцию 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.
mysql_client_encoding() |
addslashes() |
stripslashes() |
Директива magic_quotes_gpc |
Директива magic_quotes_runtime |
Пред. | Начало | След. |
mysql_query | Уровень выше | mysql_result |