Правила по route
| Значение route | Что это | Правило |
|---|---|---|
| product/search | Поиск по названиям и описаниям — тяжёлый запрос к базе | Лимит на сессию, проверка для подозрительных источников |
| product/category с filter, sort, limit | Категории с фильтрами и сортировкой | Белый список параметров, отбрасывание неизвестных при кэшировании |
| checkout/cart и добавление в корзину | Корзина и AJAX-запросы добавления | Лимиты, без кэша |
| checkout/checkout | Оформление заказа | Проверка браузера для подозрительных источников, без кэша |
| account/login, account/register, account/forgotten | Вход, регистрация, восстановление пароля | Лимиты на попытки и на отправку писем |
| information/contact | Форма обратной связи | Лимит на отправку, защита от спама |
В последних версиях OpenCart 4 метод контроллера отделяется точкой (checkout/cart.add), в 3.x — косой чертой (checkout/cart/add). Сопоставляйте правило с началом значения route, чтобы оно срабатывало в обеих версиях.
# контекст http
map $arg_route $oc_search_key {
default "";
~^product/search $binary_remote_addr;
}
limit_req_zone $oc_search_key zone=oc_search:10m rate=20r/m;
# контекст server
location = /index.php {
limit_req zone=oc_search burst=10 nodelay;
# далее fastcgi_pass и остальные директивы PHP
}Административная панель
Папку администратора лучше переименовать — вместе с путями в admin/config.php — и закрыть доступом по адресам. Стандартный /admin/ сканеры проверяют первым делом. Если доступ по адресам невозможен, включите проверку браузера и лимит попыток для входа route=common/login.
Реальный IP посетителя
OpenCart записывает в заказ и историю входов адрес из REMOTE_ADDR, а заголовки X-Forwarded-For и Client-IP сохраняет отдельно, как «forwarded IP». Поэтому настраивать нужно веб-сервер: real_ip в nginx или mod_remoteip в Apache с доверием только к адресам фильтра. Тогда антифрод-модули и проверка заказов будут работать с настоящими адресами, а не с адресом узла фильтрации. См. инструкцию для nginx.
Что исключить из проверки браузера
- Callback-и платёжных модулей (route вида extension/payment/…/callback, точный путь зависит от модуля) — их вызывает сервер платёжной системы.
- Модули обмена с 1С и МойСклад — исключение по адресам серверов обмена.
- Фиды для Яндекс Маркета, Google Merchant и маркетплейсов.
- Задачи по расписанию, если модули запускают их HTTP-запросом.
Типичные ошибки
- Правило поставлено на /index.php целиком — под лимит попадает весь магазин, а не только поиск.
- Кэшируются ответы с cookie сессии OCSESSID — у покупателей путаются корзины.
- После установки не удалена папка install/ — её ищут по стандартному пути.
Вопросы и ответы
Как защитить фильтр ocFilter или аналогичный модуль?
Фильтры добавляют свои параметры к route=product/category. Внесите их в белый список, а остальные параметры отбрасывайте при формировании ключа кэша — тогда случайные значения не будут проходить до сервера. Подробнее — в статье об обходе кэша.
Нужно ли защищать ЧПУ-адреса отдельно?
Да. С модулем SEO URL поиск и категории доступны по «красивым» адресам, которые OpenCart внутри превращает в тот же route. Правило должно учитывать обе формы адреса.
Не помешает ли проверка браузера оплате?
Нет, если callback-адреса платёжных модулей внесены в исключения. Перед подключением составьте их список по установленным модулям оплаты.
Читайте также
- РешенияЗащита интернет-магазина от DDoS и ботовКорзина, поиск и оплата под защитой, цены — от парсинга
- АтакиАтака обходом кэша (cache busting)Случайные параметры, чтобы каждый запрос проходил до сервера
- АтакиHTTP-флуд: что это и как защититьсяМассовые запросы к страницам, которые перегружают сервер
- ВозможностиКэширование и ускорение сайтаОтдача статики и страниц с узлов фильтрации