ЗахидХост обнаружили “атаку” на сайт очень простым методом.
Кто-то крепко вешал сайт загружая по 500 товаров на страницу вручную добавив параметр к УРЛ более 13000 запросов за 12 часов.
Все было с разных IP, поэтому сервер не отсек это.
LoadAveraпe на 6тиядерном зашкаливал до 50+
Необходимо
1 Запретить загрузку количества товаров превышающих стандартные (те что высчитываются в функции fn_get_product_pagination_steps) . В идеале, чтобы при попытке ввода любого отличного значения выводился урл без параметра и загружалось количество товаров указанных в настройках магазина.
Так же хочу обратить внимание - не фильтруются спецсимволы в поле email, до сих пор. Любой клиент скопировавший email с почтовика немного невнимательно может сломать обмен с 1С. Вот, проверил, на демке. Заказ оформился без проблем с квадратной скобкой в поле email.
У нас пару месяцев назад была такая же фигня. Серверный админ сказал что атака идет с github, у нас висело по 100.000 и сайт просто вырубало, писало nginx, серверный админ забанил бота или атаку, и все было хорошо.
Что напрягло, он сказал что это наш местный ip был, полагали на конкурентов.
В общем мы банили просто тех откуда шли огромные запросы. Сейчас вроде все хорошо, благодаря @alex_vp он дал много рекомендаций, и они нам очень помогли.
Нашел у себя.
В файле, хз почему именно там
/www/app/addons/my_changes/controllers/frontend/product_features.pre.php
И вот последняя кода часть как раз эта защита, если кто то руками ввведет больше 80, то его отправит на 20 товаров на страницу (у меня по умолчанию столько)
<?php
if ($mode == 'view_all') {
if (empty($_REQUEST['filter_id'])) $_REQUEST['filter_id'] = 10; // 10 - это id фильтра по бренду
}
if (!defined('BOOTSTRAP')) { die('Access denied'); }
if ($mode == 'view') {
if (!empty($_REQUEST['items_per_page']) && $_REQUEST['items_per_page'] > 80){
$_REQUEST['items_per_page'] = 20;
}
}