Подтвердить что ты не робот

Что действительно делает mysql_real_escape_string()?

Одна вещь, которую я ненавижу по поводу документации в разы (когда вы новичок) - это то, как она не описывает вещи на английском языке. Кто-нибудь мог бы перевести эту документацию для меня? Я хотел бы знать, как именно это усложняет хакеру вставлять символы.

http://php.net/manual/en/function.mysql-real-escape-string.php

Кроме того, если это так, как хакер попытается вставить символы?

4b9b3361

Ответ 1

Функция добавляет escape-символ, обратную косую черту, \, перед некоторыми потенциально опасными символами в строке, переданной функции. Символы, спрятанные, -

\ x00,\n,\r, \, ', "и\x1a.

Это может помочь предотвратить атаки SQL-инъекций, которые часто выполняются с использованием символа для добавления вредоносного кода в SQL-запрос.

Ответ 2

Предположим, вы хотите сохранить строку I'm a "foobar" в базе данных.
Ваш запрос будет выглядеть примерно как INSERT INTO foos (text) VALUES ("$text").
При замене переменной $text это будет выглядеть следующим образом:

INSERT INTO foos (text) VALUES ("I'm a "foobar"")

Теперь, где точно заканчивается строка? Вы, возможно, знаете, SQL-парсер этого не делает. Мало того, что это просто сломает этот запрос, его также можно использовать для ввода команд SQL, которые вы не планировали.

mysql_real_escape_string гарантирует, что такие двусмысленности не возникают, экранируя символы, имеющие особое значение для синтаксического анализатора SQL:

mysql_real_escape_string($text)  =>  I\'m a \"foobar\"

Это будет:

INSERT INTO foos (text) VALUES ("I\'m a \"foobar\"")

Это делает утверждение однозначным и безопасным. Сигнал \ сигнализирует, что следующий символ не должен восприниматься его особым значением как ограничитель строки. Есть несколько таких символов, о которых mysql_real_escape_string заботится.

Escaping - довольно универсальная вещь в языках программирования BTW, все в одном и том же направлении. Если вы хотите напечатать приведенное выше предложение буквально на PHP, вам также необходимо избегать его по тем же причинам:

$text = 'I\'m a "foobar"';
// or
$text = "I'm a \"foobar\"";

Ответ 3

PHP mysql_real_escape_string function - это только оболочка для MySQLs mysql_real_escape_string функция. Он в основном готовит входную строку, которая должна быть безопасно использована в объявление строки MySQL путем экранирования определенных символов, чтобы они не могли быть неверно истолкованы как разделитель строк или разделитель escape-последовательности и, таким образом, разрешить определенные инъекционные атаки.

Реальный в mysql_real_escape_string в противоположность mysql_escape_string обусловлен тем, что он также учитывает кодировку текущего символа, поскольку рискованные символы не кодируются одинаково в разных кодировках символов. Но вам нужно правильно определить кодировку символов, чтобы правильно работать mysql_real_escape_string.

Ответ 4

Лучшее объяснение здесь.

http://www.w3schools.com/php/func_mysql_real_escape_string.asp

http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

Как правило, это помогает избежать внедрения SQL, например, рассмотрим следующий код:

<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// This means the query sent to MySQL would be:
echo $query;
?>

и хакер может отправить запрос, например:

SELECT * FROM пользователей WHERE user = 'aidan' AND password = '' OR '' = ''

Это позволит любому войти в систему без действительного пароля.

Ответ 5

mysql_real_escape_string() помогает избежать специальных символов, таких как одинарная кавычка и т.д., которые пользователи могут отправить на ваш script. Вам нужно избегать таких символов, потому что это полезно, если вы хотите избежать SQL Injection.

Я бы посоветовал вам проверить:

mysql_real_escape_string() по сравнению с подготовленными отчетами

Чтобы быть на более безопасной стороне, вам нужно перейти на Подготовленные утверждения, как показано в предыдущей статье.

Ответ 6

Функция mysqli_real_escape_string() выделяет специальные символы в строке для использования в инструкции SQL.