![Отслеживать обратные косые черты, одинарные и двойные кавычки в запросах GET](https://rvso.com/image/726827/%D0%9E%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D1%81%D1%8B%D0%B5%20%D1%87%D0%B5%D1%80%D1%82%D1%8B%2C%20%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B5%20%D0%B8%20%D0%B4%D0%B2%D0%BE%D0%B9%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%B0%D0%B2%D1%8B%D1%87%D0%BA%D0%B8%20%D0%B2%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%D1%85%20GET.png)
Согласно этомуОсновы 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, устанавливаемых некоторым (не всем) программным обеспечением для отслеживания/аналитики.