Сейчас популярен взлом сайтов на WordPress, Joomla, Opencart и т.д. (по сути, на всех популярных CMS) методом подбора паролей (брутфорса) к админ-панели. Многие хостеры уже давно внедрили автоматическую защиту от такого рода атак (к примеру, тот же ukraine.com.ua), но вот VPS/VDS и прочие standalone-сервера которые администрируются владельцем зачастую остаются беззащитными перед такого рода атаками. Для каждой CMS есть какие-то плагины, модули и скрипты позволяющие защитить сайт, но все они потребляют много ресурсов, т.к. запускаются вместе с сайтом. Значит нужно бремя проверки как-то переложить на веб-сервер. А ещё лучше на легковесный и быстрый nginx. Самый простой способ защититься от брутфорса админки средствами nginx — это добавить в конфиг nginx (nginx.conf) вот такой локейшен:
location ~* /(wp-login\.php|administrator|admin\.php) { set $humantest 0; if ($http_cookie !~* "humans=checktest") { set $humantest 1; } if ($args ~* (callback|logout|lostpassword)) { set $humantest 0; } if ($humantest = 1) { add_header Content-Type text/html; return 200 ""; } error_page 404 = @fallback; }
проверить правильность добавления:
nginx -t
и если все в порядке — перезапустить nginx
Вкратце, этот конфиг в случае обращения к wp-login.php (скрипт отвечающий за форму входа в вордпрессе), /administrator (страница входа в джумле) или admin.php (в основном — отвечающий за вход в админку Опенкарта) отправляет браузеру посетителя несложный js-скрипт который устанавливает cookie в браузере посетителя и обновляет страницу. После этого проверяет — есть ли эта cookie. Если есть, то пропускает посетителя уже к самой странице. Если нет — показывает ошибку 404 («не найдено»).
Я ещё не встречал ботов которые в полной мере умели бы работать с яваскритом и cookies одновременно. Поэтому защита достаточно надежна.
А есть возможность сделать на странице проверки, например код проверки, как это сделано на ukraine.com.ua. Поставить на страницу, например, ReCaptha и пока кользователь не введет правильную капту, то не пускать его на закрытую страницу, а после того, как пользователь ввел правильно капту, запонить этот выбор и постоянно пускать пользователя на закрытую страницу, пока сущестует, например та же кука в браузере?
А есть возможность сделать на странице проверки, например код проверки, как это сделано на ukraine.com.ua.
Именно так как у них — думаю, это очень затратно будет.
Там этим делом занимается самописный сервис (подробностей, увы, не знаю).
Но в общем случае да, можно. Как вариант — написать perl-скрипт для генерации капчи, т.к. nginx умеет работать с перлом напрямую при помощи http://nginx.org/ru/docs/http/ngx_http_perl_module.html
Беглый гуглинг выдает ещё вот такой результат https://github.com/yaoweibin/nginx_http_recaptcha_module (правда неясно, работает ли этот модуль с актуальной версией нжинкса). Если будет время — постараюсь проверить его на практике.