Назад | Перейти на главную страницу

Можно ли использовать MySQL «Query» (при обработке на сервере)?

(Не похоже на MySQL Injection) Я просто хочу подтвердить, что кто-то сказал мне a query может быть изменен (или) изменен (кем-то злоумышленником / хакером из середины), пока мы его отправляем. Является ли это возможным?

Я имею в виду, допустим, есть запрос (точно фиксированный запрос) в php:
$query = 'SELECT password WHERE id=1';
$result = mysql_query($query);

(1) Можно ли изменить / модифицировать этот запрос в режиме «Отправка» (до того, как он будет доставлен на Сервер)?
(2) Или .. Может returning result быть измененным / доработанным способом "Возврат" (обратно с Сервера)?

Итак, по его словам, последний $result мы получим, будет неверным относительно того, что мы действительно запросили (даже настоящая таблица все еще безопасна или не взломана). Дело происходит внутри mysql_query обработать.

Так возможно ли это? Извините, если это глупый вопрос, но я действительно запутался.

Возможно, в зависимости от того, используете ли вы пользовательский ввод в своем запросе.

Например, следующий код может быть уязвимым. Обратите внимание, что требуется ввод данных от пользователя $_POST['UnsanitisedInput'] и напрямую использует его в запросе, не очищая его чем-то вроде mysql_real_escape_string().

$result = mysql_query('SELECT Stuff FROM Things WHERE Widget = ' . $_POST['UnsanitisedInput']);

Однако для запроса, подобного тому, который вы опубликовали, который не требует ввода данных пользователем, его нельзя изменить, если, конечно, ваш сервер не скомпрометирован.

Если вы хотите прочитать дополнительную информацию по этой теме, такая атака называется SQL-инъекция.

Он может иметь в виду атаку с использованием SQL-инъекции, которую можно использовать для изменения запроса, если вы используете неанитизированные пользовательские данные непосредственно в своих запросах, например

$query = 'SELECT * FROM table WHERE id = ' . $_GET['id'];
mysql_query($query);

Здесь вы напрямую используете '`$ _GET [' id '], значение которого вы не можете гарантировать. Вместо этого вы должны сделать это так.

$query = 'SELECT * FROM table WHERE id = ' . mysql_real_escape_string($_GET['id']);
mysql_query($query);

В остальном вопрос о том, что злоумышленник изменяет фактический запрос на пути через сеть, возникает только в том случае, если

  • WebServer (с кодом PHP) и серверы базы данных являются отдельными и,
  • запросы проходят через Интернет НЕ только через частную сеть.
  • И в этом случае вы не используете SSL для подключения к базе данных.

Если что-либо из вышеперечисленного неверно, ответ будет

НЕТ, злоумышленник не может изменить ваш запрос ИЛИ результат между базой данных и веб-сервером

Поэтому, если вы запрашиваете сервер БД через общедоступный Интернет, вы можете использовать SSL, чтобы избежать перехвата или подделки сетевых пакетов.

Обновить
Под обработкой вы имеете в виду передачу между БД и серверами приложений, верно? Или вы имеете в виду в памяти сервера, например, вмешательство в память процесса MySQL / PHP?

Я рассмотрел проблему с сетью выше.

В соответствии с изменением запроса ВО ВРЕМЯ его обработки, ИТ может быть выполнен только с помощью собственного процесса, который хакер может установить только в том случае, если ваш сервер был взломан.
В этом случае злоумышленнику не нужно преодолевать все эти проблемы, поскольку он может просто редактировать ваши файлы PHP.

Все возможно, в зависимости от ваших настроек. Другие люди уже писали о возможных SQL-инъекциях, когда вы не проверяете ввод данных пользователем, но что, если у вас есть запрос без ввода данных пользователем?

Связь по сети может быть подвержена тем же атакам MITM, что и многие другие сетевые протоколы, если сеть скомпрометирована, заставляя вас думать, что вы подключаетесь к своему серверу, когда вы фактически подключаетесь к чужому серверу.

Если вы разговариваете с локальным сервером mysql, используя mysql.sock тогда, если сам сервер скомпрометирован, mysql.sock файл может быть заменен файлом сокета, который обращается к поддельному серверу mysql (который может изменить запрос и отправить его на настоящий сервер mysql или отправить его на настоящий сервер mysql и изменить результаты перед их возвратом).

Однако, скорее всего, если сервер будет скомпрометирован, кто бы это ни сделал, просто отредактирует ваш php файл и изменит запрос, а не проделает всю эту дополнительную работу.

При атаке «человек посередине» возвращаемые данные с сервера могут быть легко изменены, поэтому запустите SSL (хотя теория SSLStrip не делает это надежным).

Что касается редактирования запроса между конечным пользователем и страницей PHP, то не совсем, если у вас нет дыры где-то еще на вашем сайте, которая позволяет им редактировать ваш PHP. Также я думаю, что данные между PHP и MySQL по умолчанию не зашифрованы, вы можете либо туннелировать это (безумный уровень безопасности), либо запустить SSL MySQL IIRC.