Активировать его можно буквально за минуту — заходим на www.google.com/recaptcha, получаем private- и public-ключи для своего домена и вписываем их в config.inc.php в ячейки «$cfg['CaptchaLoginPrivateKey']» и «$cfg['CaptchaLoginPublicKey']» соответственно. Всё, после этого на странице авторизации появляется дополнительная проверка пользователя.
Почти отличная защита от автоматизированного перебора паролей. «Почти» — потому что разработчики PMA ради удобства пользователей оставили в скрипте не большую брешь. Если в текущей сессии человек проходит проверку reCaptcha, то больше она ему не показывается. То есть для реализации стандартного перебора атакующему необходимо пройти проверку вручную, передать брутеру ID своей сессии и всё, брутер может спокойно работать.
Исправляется этот баг просто. В файле /libraries/plugins/auth/AuthenticationCookie.class.php нужно найти строки
// We already have one correct captcha.
$skip = false;
if ( isset($_SESSION['last_valid_captcha'])
&& $_SESSION['last_valid_captcha']
) {
$skip = true;
}
и закомментировать строку «$skip = true;». Теперь reCaptcha будет выводиться всегда.
И небольшой наглядный пример обхода на Python+Selenium (PasteBin).
Работает он просто. Если открыв страницу PMA в её коде скрипт «видит» reCaptcha, то браузер создаёт на странице чекбокс «Ready to go» и ждёт его отметки человеком. Перед проставлением этой галочки человек должен пройти проверку reCaptcha. Далее перебор идёт обычным ходом.
P.S. Разработчикам PMA конечно же сообщено.
Комментарии (14)
arvitaly
06.09.2015 06:30+2А зачем вообще оставлять открытый доступ к PhpMyAdmin?
AntonKuzmin
06.09.2015 09:09Ситуации разные бывают, порой это необходимая мера. Я сам сторонник жёстко лимитированного доступа к инструментам администрирования, но всё равно имеется пара серверов на которых доступ к таким инструментам необходим в любое время и с любого устройства.
OnYourLips
06.09.2015 13:14+2Удобнее и безопаснее использовать обычный MySQL клиент через ssh-туннель?
AntonKuzmin
06.09.2015 14:56Смотря какой клиент. В чём-то может безопаснее, но не со всяким удобнее. Опять же, ситуации разные бывают. Иногда может понадобится с телефона срочно зайти с плохой связью и выполнить пару запросов вбиваемых руками. Тут PMA как раз хорошо выручит.
vedenin1980
06.09.2015 15:58+1Можно закрывать url PhpMyAdmin с помощью пароля на http_access, тогда чтобы потребуется подобрать аж два пароля, а учитывая что пароль на http_access может быть сохранен в браузере это будет куда удобнее чем постоянно вводить капчу (особенно на мобильных устройствах).
akshakirov
06.09.2015 22:21+1Не столько можно, сколько — нужно! Учитывая что PhpMyAdmin забывают обновлять, а потом находятся дыры в скриптах.
Во всяком случае я постоянно вижу в логах перебор разных скриптов в папках /pma/* /phpMyAdmin/* и подобных.
maximw
06.09.2015 09:44+3Было бы круче если бы вместо «грязного» хака, вы бы оформили выбор поведения капчи как настройку конфигурации и сделали пулл реквест в проект.
Suvitruf
AntonKuzmin
Описание то есть, но сколько лет использую pma ни разу даже не слышал о том, что такой функционал существует. Поспрашивал у знакомых веб-мастеров — те тоже не знали. Всю жизнь просто распаковывали и пользовались. Максимум конфиг редактировали по комментариям из него же. В итоге решил проверить, а оказалось что баг нашёл :)
gibson_dev
Вообще не думаю что это баг, просто такой алгоритм работы. А вообще документация рулит, а то вы словно Америку открыли. Ну и так — добить, «не большую» — пишется слитно.
vedenin1980
Согласен, это не баг, а фича, точнее компромисс между удобством и паранойей. Во-первых, китайцы достаточно дешево вручную разгадывают капчи, во-вторых, от переборов существуют специальные системы, блокирующие слишком частые запросы на определенные url, и хитросгенерируемые пароли, вида aК5#f%s@f7RL*9.
AntonKuzmin
О том что какой-то сервис разгадывания работает с reCaptcha я никогда не слышал. Если это так, то всё куда хуже чем я думал) Хорошие пароли всегда являлись отличной защитой от подбора, но не всегда мы сами можем контролировать какой пароль на свою БД ставит рядовой пользователь совместного хостинга например.
vedenin1980
Вручную можно разгадать любую капчу, другое дело что такие сервисы относительно недешевые около 50 центов за 1 тыс., но при наличии денег и желания это не проблема.
AntonKuzmin
На сколько мне известно, передача именно reCaptcha на сторону такого сервиса является пока нерешённой проблемой. Там ведь механизм прост — получил картинку на сайте, перешли в виде файла на сервис распознавания по API и жди ответа сервера с фразой распознанной человеком. А reCaptcha мало того что динамична, так ещё и видоизменяться может (кликнул на галочку, потом может показаться фрейм с выбором изображений).