За последние несколько дней я получаю сотни сообщений об ошибках, похоже, кто-то пытается взломать закрытую часть моего сайта. Одним из механизмов безопасности, который мы используем, является блокировка, основанная на количестве обращений на IP (т. Е. Если один IP-адрес посещает эту страницу чаще, чем x раз в неделю).
Сообщение об ошибке включает в себя дамп сервера, и я вижу, что хакер пытается войти, изменив свой IP-адрес.
И мне просто интересно … как же он это сделал ?!
Включая здесь соответствующие серверные переменные:
_SERVER dump:
Array
(
[CLIENTIP] => 10.0.1.92
[HTTP_X_REQUESTED_WITH] => XMLHttpRequest
[HTTP_X_FORWARDED_FOR] => -1' OR 2+819-819-1=0+0+0+1 --, 104.196.143.54
[HTTP_X_FORWARDED_PORT] => 443
[HTTP_X_FORWARDED_PROTO] => https
[REMOTE_ADDR] => -1' OR 2+819-819-1=0+0+0+1 --
//etc
)
Если вы посмотрите внимательно, пользователь вставил заголовок X-Forwarded-For ( HTTP_X_FORWARDED_FOR
). Этот заголовок никогда не следует доверять, когда он приходит извне, особенно если он не копируется в REMOTE_ADDR
(который обычно содержит IP-адрес хоста, напрямую подключающегося к вашему серверу).
Поэтому убедитесь, что ваш сервер выбрасывает этот заголовок и не копирует его в любое другое поле. Я не знаю ваших настроек, но кажется, что вы используете прокси (под вашим контролем) где-то в ландшафте. CLIENT_IP
похоже, что прокси IP (но это спекуляция без знания вашей точной настройки).
Этот прокси (или, вернее, самая лучшая система — я назову это внешний интерфейс— принимает соединения из Интернета) должен нести ответственность за выбросив заголовок и добавив его снова с адресом своего прямого клиента-так как
ТЛ; др: Злоумышленник передал заголовок, который обычно используется в доверенной установке для передачи информации о «пути запроса». Этот заголовок был принят вашей системой, из-за чего выяснилось, что запросы пришли с какого-то странного «IP».
Кроме того, они попробовали SQL-инъекцию, которую можно использовать для выполнения произвольных операторов в базе данных (если вы не разделяете команды и параметры должным образом). -1' OR 2+819-819-1=0+0+0+1
в определенном сценарии — приведет к тому, что запрос будет возвращать все результаты, так как он сводится к -1' OR 1=1
, что всегда верно, если ваш запрос выглядит так: … WHERE foo = '-1' OR 1=1
,
Других решений пока нет …