Если боты штурмуют /admin и тянут каталог скриптами, нужно срочно повысить безопасность. Рассказываем, как защитить ресурс от нескончаемых атак и снизить нагрузку на сервер.
Введение
Каждый владелец интернет-магазина на OpenCart рано или поздно задумывается о безопасности. В сети полно ботов и злоумышленников, которые нагружают сайт массовым парсингом и пытаются подобрать пароль к админке тысячами попыток. Подобные атаки не только крадут данные, но и замедляют работу магазина.
В статье объяснили, как защитить OpenCart от массового парсинга и брутфорс-атак, ограничив доступ к странице /admin/.
Массовый парсинг и брутфорс: что это такое и чем грозят
Массовый парсинг — это автоматическое считывание большого объёма данных с сайта с помощью специальных программ. Например, конкурент или злоумышленник может запустить бота, который обходит все страницы каталога, выгружает цены, описания товаров или даже пытается получить доступ к служебным разделам. Массовый парсинг опасен тем, что создаёт большую нагрузку на сервер и может привести к тормозам или даже падению сайта.
Брутфорс-атака направлена на подбор пароля путём перебора множества вариантов. В контексте OpenCart под ударом прежде всего административная панель. Бот пытается многократно войти в /admin/, перебирая пароли. Если пароль слабый или логин известен, есть риск взлома. Даже если бот не угадает пароль, сотни и тысячи попыток за короткое время перегружают сервер, а иногда могут заблокировать и учётную запись из-за срабатывания ограничений на попытки входа.
Оба этих вида атак чаще всего осуществляются автоматически, без прямого участия человека. Значит, и методы защиты против них должны усложнить работу именно автоматическим скриптам, не создавая больших неудобств для живого администратора.
Ограничение доступа к административной панели
По умолчанию форма входа доступна по предсказуемому адресу: вашсайт.ru/admin. Все знают этот URL, и боты в первую очередь проверяют именно его. Поэтому имеет смысл изменить стандартный путь, чтобы злоумышленник не смог даже найти страницу авторизации.
Подключитесь к файлам сайта через FTP или файловый менеджер хостинга и переименуйте директорию admin на что-то нестандартное. Можете использовать любое слово на латинице, лучше бессмысленный набор букв. После переименования не забудьте исправить настройки. Откройте файл config.php внутри переименованной папки и замените в путях старое название /admin/ на новое. Аналогичную правку нужно сделать и в корневом config.php. Сохраните изменения. Важно не потерять и не забыть новый адрес.
Дополнительный уровень маскировки — секретный ключ при входе. Смысл в том, чтобы страница авторизации открывалась только если к адресу добавлен специальный ключ. Создать его можно с помощью модификации или простого кода. Чтобы создать его вручную, откройте файл admin/index.php или контроллер controller/common/login.php и добавьте в самом начале проверку на ключ. Например:
<?php
$secretKey = 'secretvalue';
if (!isset($_GET['secretkey']) || $_GET['secretkey'] !== $secretKey) {
header("HTTP/1.0 404 Not Found");
exit;
}
?>
Можно усложнить и хранить ключ в $_COOKIE, а не только в $_GET. В этом случае при первом заходе по правильной ссылке ключ пишется в cookie, и админка будет открываться дальше без хвоста ?secretkey=....
Это костыль-уровень защиты. Для серьёзного магазина всё равно лучше ставить готовый модуль безопасности или ограничивать доступ к /admin через .htaccess или IP-фильтры.
Страница логина не должна попадать в поисковые выдачи. Если у вас новая нестандартная ссылка, не добавляйте её в robots.txt с директивой Disallow, ведь robots.txt открыт всем, и там не должно светиться секретное имя админ-папки. Лучше добавить мета-тег в саму страницу, запрещающий индексирование. В OpenCart 3 правьте файл admin/view/template/common/header.twig, в старых версиях — header.tpl. Сразу после тега <head> вставьте строку:
<meta name="robots" content="noindex,nofollow">
Тогда поисковые роботы не будут индексировать страницу авторизации.
Пароль на папку /admin/ через .htaccess
Спрятав панель, неплохо бы закрыть к ней доступ посторонним напрочь, допустим, установить дополнительную базовую авторизацию на папку админки. Речь идёт об отдельном пароле на саму директорию, реализуемом средствами веб-сервера. Этот механизм работает вне движка CMS, поэтому боты его обойти не могут.
Если ваш сайт работает на сервере Apache, найдите в панели хостинга опцию «Защита паролем» или «Закрыть каталог паролем». Многие хостинг-провайдеры позволяют настроить пароль через графический интерфейс. Достаточно выбрать папку, задать произвольные логин/пароль и сохранить. Хостинг сам пропишет нужные директивы .htaccess и создаст файл .htpasswd с хешем пароля. Если подобной функции нет, можно сделать вручную. Создайте текстовый файл .htaccess внутри папки админки со следующим содержимым:
AuthType Basic
AuthName "Admin Area"
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Замените /full/path/to/.htpasswd на фактический путь к .htpasswd-файлу. Этот способ особенно хорош, если вы не можете ограничить доступ по IP. А если и основной пароль к админке, и пароль в .htaccess разные и сложные, вероятность подбора стремится к нулю.
Ограничение доступа по IP-адресу
Если у вас не динамический IP, вы можете разрешить доступ к админке только с определённых IP-адресов. Тогда можно буквально отсекать все запросы, кроме своих.
Проще всего сделать это тоже через .htaccess в папке административной панели. Откройте или создайте файл .htaccess внутри директории админки и добавьте правила в зависимости от версии Apache.
- Для Apache 2.2 и старых (PHP 5.x – 7.3):
Order Deny,Allow
Deny from all
Allow from 123.45.67.89
- Для Apache 2.4+ (PHP 7.4 и новее):
Require all denied
Require ip 123.45.67.89
Здесь вместо 123.45.67.89 укажите свой внешний IP-адрес. Если нужно разрешить несколько адресов, добавьте несколько строк Allow from ... или Require ip ... для каждого. После сохранения правил админка станет недоступна для всех, кроме перечисленных IP. Любой другой посетитель получит отказ в виде ошибки 403 Forbidden или перенаправления, в зависимости от настроек сервера.
Если у вас динамический адрес, можно разрешить подсеть с помощью CIDR-записи. Например, если ваши адреса имеют вид 123.45.67.X, используйте:
Require all denied
Require ip 123.45.67.0/24
Так сервер пропустит только диапазон от 123.45.67.0 до 123.45.67.255. Это менее строго, чем фиксированный IP, но безопаснее, чем усечённая запись.
Имейте в виду, что если у вас на сайте используются какие-то интеграции, обращающиеся к админке, то при включении фильтра по IP надо добавить и адреса этих сервисов в список разрешённых. Также впишите адрес сервера самого сайта, если он обращается к себе.
Капча и ограничение попыток
Сокрытие и ограничение доступа здорово снижают риски, но стоит добавить защиту непосредственно на форму входа, чтобы отбивать именно брутфорс-атаки. Здесь помогут две вещи: капча и ограничения на количество попыток.
Капча — это проверка на человека, чаще всего в виде картинки с символами или галочки «Я не робот». Она тормозит автоматический перебор паролей, потому что бот не сможет пройти проверку без участия человека. В OpenCart 3.x уже есть встроенная поддержка Google reCAPTCHA для форм. Нужно в админке зайти в раздел «Расширения», далее открыть «Защиту от ботов». Там вы найдёте модуль Google reCAPTCHA. Установите его, введите пары ключей, полученные на сайте Google. Затем откройте настройки магазина по пути «Система», «Настройки», «Сервер» и выберите этот модуль капчи для «Административной панели». После сохранения на странице логина появится проверка reCAPTCHA.
Если у вас версия OpenCart без встроенной капчи для админки, можно поставить расширение. Существуют модули, добавляющие простую математическую задачу или другую капчу перед вводом пароля. Главное убедиться, что модуль совместим с вашей версией OpenCart. Установка сводится к загрузке OCMOD/VQMOD файла и активации расширения через админку.
Многие современные CMS блокируют пользователя после нескольких неудачных попыток ввода пароля. Уточните, есть ли такая настройка в вашей версии OpenCart. В сборках ocStore эта функция точно реализована. Например, после 5 неправильных авторизаций подряд аккаунт временно замораживается на час или другой период. Если в вашей сборке такого нет, стоит задуматься о специальном модуле Login Lockdown или Brute Force Stop. Слишком короткий интервал блокировки может помешать вам самим, если случайно ошибётесь несколько раз. Оптимально закрывать на 15–30 минут после 3–5 неверных вводов.
Смена стандартных учётных данных
Удивительно, но до сих пор многие магазины остаются с логином admin и простым паролем, открывая дверь для взлома. Никогда не оставляйте дефолтные данные!
При установке OpenCart система просила задать имя пользователя. Если вы там поставили admin, срочно поменяйте. Войдите в панель управления, откройте меню «Система», «Пользователи». В списке будет ваша учётная запись с логином admin. Кликните на иконку карандаша и измените имя пользователя на другое. Выберите что-то нетривиальное. Запомните или запишите новое имя. После сохранения именно этот логин потребуется при входе.
Пароль администратора — ваш последний рубеж. Он обязательно должен быть уникальным и трудным для подбора. Минимум 10–12 символов, а лучше больше. Обязательно смесь разных типов символов, таких как прописные и строчные буквы, цифры, специальные знаки. Избегайте любых очевидных сочетаний и не используйте пароль, который уже где-то применяли. Для каждой важной учётной записи должен быть свой уникальный секрет. Если сложно придумать, воспользуйтесь генератором паролей.
Опытные злоумышленники иногда бьют не напрямую в сайт, а пытаются получить доступ к почте администратора, ведь через якобы забытый пароль можно сбросить вход в OpenCart. Поэтому имеет смысл использовать неизвестный никому почтовый ящик для учётной записи администратора. Этот ящик нигде не светите и не используйте для переписки.
Без хорошей основы все меры защиты могут пойти прахом, поэтому важно выбрать правильную площадку для вашего магазина. Одним из лучших решений для хостинга OpenCart является сервис AdminVPS. Специализированный хостинг от AdminVPS оптимизирован под требования OpenCart. В недорогие тарифы включена базовая DDoS-защита, которая отфильтрует часть нежелательного трафика ещё до того, как он дойдёт до вашего сайта. В случае сбоя команда провайдера за 15 минут ответит вам в любое время суток.
Заключение
Конечно, стопроцентной гарантии не даст ни одна инструкция, и всегда найдутся более изощрённые атаки и опытные хакеры. Однако подавляющее большинство автоматизированных посягательств — это примитивный массовый парсинг или грубый перебор, нацеленные на самых уязвимых.
Читайте в блоге:
- Как ускорить OpenCart на недорогом хостинге
- Как настроить OpenCart: от старта до профессионального магазина за 7 шагов
- Как интегрировать OpenCart с «1С» через VPS: пошаговая инструкция