OcStore (Opencart) — защищаем админку от взлома
Видел сотню различных методов как это сделать, вплоть до «переименуйте файл admin.php в любой другой и закройте его от индексации в robots.txt» — прям как спрятать ключ от дома под ковриком и оставить в двери записку «Мама, ключ под ковриком».
Решил все-таки поделиться своим методом защиты от брута (а.к.а перебор) да и вообще спрятать подальше админку — зачем лишний раз провоцировать 🙂
Итак, приступим:
Открываем файл /admin/view/template/common/login.tpl
В самый верх файла (над строчкой <?php echo $header; ?>) вставляем такой код, предварительно заменив слова secretkey и secretkeyvalue на свои уникальные, например access и denied (пробелы, если есть, заменяем на подчеркивания или дефисы):
1 2 3 4 5 6 7 8 9 10 |
<?php if (isset($_GET['secretkey'])) {$seckey = $_GET['secretkey']; setcookie ("secretkey", $_GET['secretkey']);} else if (isset($_COOKIE['secretkey'])) {$seckey = $_COOKIE['secretkey']; } else {$seckey = '';} if ($seckey != 'secretkeyvalue') {header("HTTP/1.0 404 Not Found"); exit; } else { ?> |
В самый конец файла, примерно после строки <?php echo $footer; ?> добавляем:
1 |
<?php } ?> |
Сохраняем…
Все, теперь не зная связки из этих двух слов злоумышленники не смогут обнаружить админку и соответственно приступить к перебору паролей. Кстати, если вы сами забудете эту связку то тоже не сможете войти на сайт, так что запомните ее.
Теперь, чтобы попасть на страницу авторизации в админ-часть, необходимо в поле адреса указать www.вашсайт.com/admin?secretkey=secretkeyvalue (где вместо secretkey и secretkeyvalue ваши значения, которые вы указали в файле login.tpl)
Можно пойти дальше и запретить индексацию админки поисковиками…
Для этого открываем файл header.tpl, который лежит в той же папке, что и login.tpl (/admin/view/template/common/) и в любом месте между тегами <head></head> вставляем строчку:
1 |
<meta name="robots" content="noindex" /> |
Сохраняем. Теперь проверьте файл в корне сайта robots.txt на наличие там записей вида:
Disallow: /admin и удаляем ее. Или если есть время, можете навести злоумышленников на ложный след — заменяем (Disallow: /admin на Disallow: /administrator.php) В корень сайта кладем php-документ administrator.php, в котором будет муляжная форма ввода логина и пароля, которая при любых значениях возвращает ошибку «Неправильная пара логин/пароль»
Сделала как вы написали, при вводе www. мойсайт.com/admin?secretkey=secretkeyvalue выдает Parse error: syntax error, unexpected $end in http:/мойсайт.com/admin/view/template/common/login.tpl on line 63
Версия ocStore-1.5.5.1.1 Где ошибка?
Среди спама не увидел ваш комментарий =) Возможно где-то что-то пропустили, чтобы разобраться нужно видеть весь код. PHP ругается на переменную $end на 63 строке, возможно перед ней пропустили скобки, точку с запятой или наоборот поставили лишние. Надеюсь, на момент ответа вы разобрались с проблемой =)
Но, в тоже самое время, проделав эти все манипуляции и потом один раз найдя админку по новому пути. Это информация сохраняется на компьютере и я потом могу находить админку по обычному пути http://www.вашсайт.com/admin/. Я правильно понял. У меня по крайней мере так все стало работать.
Все верно. Пока не затрутся куки у браузера вы можете заходить по обычному пути. Можно ограничить время хранения куков, если хотите. Если заходите на сайт с посторонних устройств, рекомендую удалять историю и чистить куки.
Спасибо!
при включении .htaccess не работает
Возможно, файл .htaccess у вас неправильно настроен т.к. предложенный выше код не затрагивает другие файлы. Единственное — на некоторых хостингах может не работать 404 редирект
Всё сделал, как вы сказали. Метод- супер! Теперь не надо мучаться с переименовыванием папки админки, и испытывать из-за этого большие неудобства при установке модулей. Это пожалуй, лучший метод, что я видел- спасибо огромное за то, что поделились им!
Привет, syntax error пишет на последнем Opencart. В чём может быть проблема?
Привет. Можете подробнее описать на какую строчку ругается и на какой версии вы пытались ставить, будем разбираться =)
А что за муляжная форма админки? Файл administrator.php создан, а в нём что писать? Или пустым так и оставить?
Скопировать HTML-код стандартной админки, изменив обработку формы так, чтобы при любом вводе логина/пароля выдавало ошибку. Будет время — выложу пример
Здравствуйте. Спасибо за подсказки. Изменил обработку формы, в браузере пишет ошибку 500. Подскажите что не так?
На ocStore 1.5.5.1 работает вроде бы нормально.
Только надо еще не забыть поставить на файл /admin/view/template/common/login.tpl права доступа 640.
Иначе его любой скачает без проблем.
А чем плох
Order Deny,Allow
Deny from all
Allow from …
etc
в .htaccess?
То есть вы предлагаете ограничить доступ по IP? А если появится необходимость войти в админку с чужого компьютера? Да и IP обычно динамический.
Выложите пожалуйста код левой админки 🙂
Спасибо. Годненько.
У меня, правда, что-то сглючивает,просто показывает пустую страницу, попозже допилю.
Как Вам вариант сообщать не 404 — а мовед перманент и посылать на вообще другой сайт (есть достаточно интересные странички по запросу в поисковик «иди на __й»)
Это связано с обновлением PHP. Header 404 not found больше не срабатывает как раньше. Задача стояла спрятать админку, чтобы злоумышленник не знал ее точного расположения. Переименовали ее или просто спрятали. При этом выводить стандартную страницу «Not found» будто такого адреса не существует. Можно пересылать/посылать куда угодно — это уже на Ваше усмотрение =)
Подскажите, пожалуйста, а как вместо HTTP/1.0 404 Not Found вывести стандартную страницу «Not found»? Что прописать?
И ещё. Посмотрел код страниц админки и нигде не выводится почему-то. Всё прописал как описано у вас…
Не дописал. Не выводится meta name=»robots» content=»noindex»
При попытке отправить из браузера http://www.вашсайт.com/admin?secretkey=secretkeyvalue, строчка автоматически преобразуется к виду http://www.вашсайт.com/admin/?secretkey=secretkeyvalue — добавляется слэш после admin. На этом всё… Войти не могу. Где ошибка затаилась? Установлен vQmod, но он не должен влиять вроде бы…
Спасибо, все работает отлично. Только вместо — header (HTTP/1.0 404 Not Found) решил прописать — echo div style=»width: 90%; margin: 0 auto; color: #f00; font-size: 80px; text-align: center; Access Denied! /div
Спасибо большое за за статью…
Много перебрал информации на тему как можно спрятать админку для обычного php сайта.
Так и не чего не смог найти. В основном приводят примеры только для популярных CMS а для обычных сайтов нет не чего… В общем ваш метод помог, спасибо большое.
Владислав, большое спасибо за интересное решение. На локальном сервере трудится прекрасно, но после переноса на хостинг возникает такая же ситуация, как и у Сергея:
> При попытке отправить из браузера http://www.вашсайт.com/admin?secretkey=secretkeyvalue, строчка автоматически преобразуется к виду http://www.вашсайт.com/admin/?secretkey=secretkeyvalue – добавляется слэш после admin. На этом всё… >
В чем может быть проблема ?