alpi
human being
- Регистрация
- 29 Июл 2014
- Сообщения
- 260
- Реакции
- 306
- Автор темы
- #111
В общем, надоело, решил это на уровне сервера, ковыряться в пхп что-то недосуг.
Убрал вывод формы обратной связи на странице контактов, чтобы убедиться, что клиенты не будут отправлять (до этого получал пару писем в год - невелика потеря)
Далее отсекаю POST запросы на странице контактов в nginx
location /contact-us { limit_except GET { deny all; } }
после этого добавляю айпишник который пытался вызвать метод POST в список для блокировки.
для этого нужно создать скрипт с таким содержимым:
и добавить его в крон с интервалом минут в 5 - 10
(не забудьте поменять имя файла логов)
добавить путь к файлу в конфиг nginx:
include /etc/nginx/conf.d/deny-post.cfg;
команда чтобы просмотреть айпишники с которых вызывается POST:
cat site.access.log | grep contact-us | grep POST | grep -P -o "\d+\.\d+\.\d+\.\d+" | uniq
вместо того чтобы банить по POST, можно грепать по user-agent
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
в остальном всё то же самое.
плюс такого варианта - можно оставить форму обратной связи.
минус - наш добрый друг в любой момент может изменить user-agent, так что это не панацея.
если подумать, то можно найти ещё способы как выуживать и банить автоматом спамерские айпишники, например - анализируя пост-запросы. Но это уже экзотика ))
список ip адресов могу обновлять и выкладывать где-то, если это кому-то нужно.
Убрал вывод формы обратной связи на странице контактов, чтобы убедиться, что клиенты не будут отправлять (до этого получал пару писем в год - невелика потеря)
Далее отсекаю POST запросы на странице контактов в nginx
location /contact-us { limit_except GET { deny all; } }
после этого добавляю айпишник который пытался вызвать метод POST в список для блокировки.
для этого нужно создать скрипт с таким содержимым:
Код:
sudo tee /root/generate-deny-post.sh <<-'EOF'
cat /var/log/nginx/site.access.log | grep contact-us | grep POST | grep -P -o "\d+\.\d+\.\d+\.\d+" | uniq | sed "s/.*/deny &;/" >> /etc/nginx/conf.d/deny-post.cfg
#cat /etc/nginx/conf.d/deny-post.cfg | awk '! a[$0]++' > /etc/nginx/conf.d/deny-post.tmp
yes | mv /etc/nginx/conf.d/deny-post.tmp /etc/nginx/conf.d/deny-post.cfg
nginx -s reload
EOF
(не забудьте поменять имя файла логов)
Код:
sudo echo "*/5 * * * * root sh /root/generate-deny-post.sh" > /etc/cron.d/deny-post
include /etc/nginx/conf.d/deny-post.cfg;
команда чтобы просмотреть айпишники с которых вызывается POST:
cat site.access.log | grep contact-us | grep POST | grep -P -o "\d+\.\d+\.\d+\.\d+" | uniq
вместо того чтобы банить по POST, можно грепать по user-agent
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
в остальном всё то же самое.
плюс такого варианта - можно оставить форму обратной связи.
минус - наш добрый друг в любой момент может изменить user-agent, так что это не панацея.
если подумать, то можно найти ещё способы как выуживать и банить автоматом спамерские айпишники, например - анализируя пост-запросы. Но это уже экзотика ))
список ip адресов могу обновлять и выкладывать где-то, если это кому-то нужно.
Последнее редактирование: