Согласно этомуОсновы SQL-инъекцийстатья:
<…> Для взлома\фаззинга SQL-запросов в основном используются следующие операции.
'
Одинарная кавычка"
Двойная кавычка\
Обратная косая черта (символ экранирования MySQL)
Иногда встречаются также шестнадцатеричные символы (например 0x3a3a
, ).
Я хочу регистрировать и удалять все запросы, содержащие их. Вот где я сейчас:
set $susp 0;
if ($request_uri ~ "%27") {
set $susp 1;
}
location ~ \.php {
if ($susp = 1) {
access_log /var/log/nginx/for-review.log;
return 500;
}
# further fastcgi configuration
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
(Я это понимаюесли это зло, но этоказалось необходимым)
Это не срабатывает на /foo/ba'r
, но, по крайней мере, отлично работает на /?foo=b'ar
. Но это все: другие символы, которые я пробую, тоже не срабатывают.
Вот что я попробовал:
$request_uri ~ "%27|%22"
: одинарный работает, двойной нет$request_uri ~ "%27|\""
: одинарный работает, двойной нет$request_uri ~ "%27|0x"
: оба работают, но0x
дают ложные срабатываниябольшой палец=230x240
И я даже не уверен, как мне подойти к обратному слешу.
Ребята, вы знаете, как это сделать?
P.S. Думал об использованииАмазонка БЫЛА, но для этого требуется другой сервис (Cloudflare или балансировщик нагрузки), к которому я пока не готов.
PS Я понимаю, что нужно принять другие меры; это должно убрать эти раздражающие GET-сканирования. Также я сомневаюсь, что у законных посетителей они будут появляться во время просмотра. Моя логика была такой: любой барьер, усложняющий взлом, помогает
решение1
Основное nginx.conf
, под http {}
:
# set the variable
map "$request_uri" $susp {
default 0;
"~*(?<suspm>(\\x|%)(3c|3e|5c|22|27)+)" 1;
}
# match logging
log_format suspl '$remote_addr /$suspm/ - $remote_user $host [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_cookie"';
Индивидуальная конфигурация виртуального хоста:
location / {
if (\$susp = 1) {
access_log /var/log/suspl.log suspl;
return 403;
}
# etc…
}
Также,
Я сомневаюсь, что у законных посетителей они появятся во время просмотра.
Внимание: оказывается, что-то подобное есть %7B%22
в файлах cookie, устанавливаемых некоторым (не всем) программным обеспечением для отслеживания/аналитики.