Защита интернет-магазина от парсинга и ботов: полный разбор
Содержание
Поделиться
Защита магазина от ботов начинается с имён событий, а не с одного переключателя «антибот». Парсинг забирает содержимое, чтобы использовать его в другом месте. Скальпинг забирает дефицитный товар способом, который человек вручную не повторит. Удержание запаса заполняет корзину без оплаты. Чужие пары логин-пароль проверяют на входе. Рутинный недействительный трафик по стандарту MRC опознают списками. Скликивание в этот набор не входит: клик по объявлению не копирует карточку товара.
Ниже — разбор по точкам магазина и порядок, который не смешивает эти события. Цифр «сколько процентов заказов — боты» в этих источниках нет, и подставлять их не будем.
Четыре события, которые путают в одном отчёте
OAT-011 Scraping — сбор содержимого приложения и других данных для использования в другом месте. Речь о копировании доступных данных и обработанного вывода. В примерах целей — эксплуатация собственных данных приложения и влияние на цены. Сбор может идти постоянно или периодами, с поддельной или захваченной учётной записью либо без входа. Если между человеком и приложением стоит другое приложение, каталог отсылает к другому событию. Если цель — получить деньги или товар, тоже к другому. Падение позиций исходного сайта эта запись не измеряет. Порядок обхода путей в описание не входит.
Для магазина это карточка, цена, остаток, которые оказываются на чужой витрине. Вход покупателя для этого не обязателен.
OAT-005 Scalping — получение товаров или услуг ограниченной доступности так, как обычный пользователь вручную не смог бы. Наблюдение за появлением и быстрое действие могут входить в событие. Каталог отделяет его от «последней секунды» и от ускорения рутины за пользователя. Дополнительный признак — ограниченность. Пример каталога — билеты, которые перепродают дороже. Следствие: товар быстро недоступен другим. Среди имён есть бронирование столов и номеров и бот на слоты.
OAT-021 — выбор и удержание позиций, которые так и не покупают, не оплачивают и не подтверждают, из-за чего другие не могут купить их сами. Товар атакующему не достаётся. Обычный пример — много позиций в корзине без оплаты. Тот же приём — брони без оплаты, слоты, очереди и квоты. Если кончаются ресурсы сервера, это уже отказ в обслуживании, не скальпинг и не парсинг.
На входе отдельно. Подбор — много паролей к одной записи. Credential stuffing — проверка пар, утекших с другого сайта. Распыление — один слабый пароль по многим записям. Лучшей защитой от большинства таких атак OWASP называет второй фактор. Долю компрометаций без года и выборки в расчёт не берём.
| Точка магазина | Событие | Что теряете | Чего событие не делает |
|---|---|---|---|
| Каталог и цена | Сбор содержимого | Данные уходят наружу, возможно влияние на цены | Не измеряет падение позиций и не равно покупке |
| Дефицитный товар | Скальпинг | Штука достаётся способу, который вручную не повторить | Не равно корзине без оплаты |
| Корзина и бронь | Удержание запаса | Другие не могут купить, атакующему товар не достаётся | Не равно отказу сервера, если кончилась память |
| Вход в кабинет | Чужие пары, подбор, распыление | Учётная запись | Не копирует витрину |
Рутинный трафик, который списком ещё узнаётся
Дополнение MRC (финальная редакция, июнь 2020) делит недействительный трафик. Класс, который опознают рутинно, — списками или стандартными проверками параметров. В примерах: известный трафик дата-центров со стабильно недействительной активностью, но не артефакты маршрута живых пользователей; боты, пауки и другие краулеры; проверки по параметрам транзакции; небраузерный User-Agent; предзагрузка, после которой объявление живой человек не открыл; размеры 0×0 и 1×1; сессии, которые не могут отрисовать изображение, в том числе headless-браузер.
Список дан для аудита аккредитации MRC. Его не смешивают с другой таксономией и не приравнивают к доле такого трафика в Директе. Для магазина вывод узкий: краулер и дата-центр в этом перечне — рутинное опознание, а скальпинг и чужие пароли в перечень не входят. Закрыть сбор цен одним списком дата-центров нельзя: каталог парсинга прямо допускает сбор без входа и с захваченной записи, не только из известного дата-центра.
Порядок по магазину
Назовите жалобу. «Цену скопировали» — сбор содержимого. «Лимитку разобрали за секунды способом не вручную» — скальпинг. «Корзины висят без оплаты» — удержание запаса. «Входят чужими паролями» — stuffing, не парсинг.
На сбор не обещайте, что список дата-центров его закроет. Сбор идёт и без входа, и с чужой записью, постоянно или периодами.
На дефиците не называйте неоплаченную корзину покупкой. Меры разные, потому что в одном случае товар атакующему достаётся, в другом нет.
Если легла память сервера, это не скальпинг: каталог отсылает к отказу в обслуживании.
На входе разведите подбор, проверку утекших пар и распыление. Второй фактор — защита от большинства этих атак, без чужой процентной цифры.
Рекламный клик проверьте отдельно: кто скликивает, кликфрод и скликивание, недействительные клики, возврат Яндекса. Карточка товара этих решений не принимает.
Чек-лист запуска:
У каталога есть ответ на копирование цены, отдельный от входа в кабинет.
У лимитки есть ответ на получение товара, отдельный от корзины без оплаты.
Неоплаченная бронь возвращает слот другим, и это не названо «нас скупили».
Вход не защищён только списком IP дата-центров из рекламного стандарта.
Второй фактор стоит на большинстве атак входа, а не на форме «оставить отзыв».
Рекламный отчёт не подшит как доказательство парсинга.
Ручной предел: глазами вы отличите одну чужую витрину и одну корзину на весь остаток. Поток копирования карточек и поток пар с утечки руками не читается. Binetro смотрит визит на сайте рекламодателя и может пропустить, проверить или не пустить. Он не обещает закрыть парсинг цен целиком и не списывает клик: клик списывает рекламная система.
Соберите магазин по четырём жалобам за одну неделю и не склеивайте их в «боты». Жалоба на чужую витрину с вашими ценами — сбор содержимого: копируют доступные данные и обработанный вывод, постоянно или периодами, без входа или с захваченной записью, среди целей — влияние на цены. Падение позиций каталог не измеряет. Жалоба «лимитку разобрали способом не вручную» — скальпинг, пример каталога — билеты, которые перепродают дороже, и товар быстро недоступен другим. Жалоба «корзины на весь остаток без оплаты» — удержание запаса: штука атакующему не достаётся, то же с бронями, слотами, очередями и квотами. Жалоба «входят паролями с другого сайта» — stuffing, рядом подбор многих паролей к одной записи и распыление одного слабого пароля. Второй фактор OWASP называет лучшей защитой от большинства этих атак на вход. На карточку товара он не переносится: карточку копируют и без входа.
Список MRC не закрывает эту неделю одним файлом адресов. Он для аудита рекламы: известные дата-центры со стабильно недействительной активностью, краулеры, небраузерный User-Agent, предзагрузка без открытия объявления, пиксели 0×0 и 1×1, сессии без отрисовки, в том числе headless. Скальпинг и чужие пароли в этот перечень не входят. Долю в Директе перечень не задаёт. Краулер из списка и покупатель с утекшей парой — разные строки отчёта.
Если за день кончилась память сервера, не пишите в разбор «нас скупили». Каталог удержания в этом случае отсылает к отказу в обслуживании. Если товар людям всё же достался способом, который вручную не повторить, это скальпинг, даже когда рядом лежит неоплаченная корзина: это два события в одном выпуске.
Держите на стене четыре подписи и не добавляйте пятую «просто бот». Подпись каталога отвечает на копирование. Подпись лимитки отвечает на получение товара. Подпись корзины отвечает на удержание без оплаты и на возврат запаса другим людям. Подпись входа отвечает на подбор, утекшие пары и распыление и ставит второй фактор против большинства этих атак, без процента из чужого анализа. Рекламный список MRC висит рядом как напоминание, что краулер и дата-центр опознаются рутинно для аудита рекламы и не заменяют ни одну из четырёх подписей. Если подпись пустая, жалоба недели останется без меры, даже когда переключатель «антибот» горит.
Один выпуск товара может задеть две подписи сразу. Билеты ушли тем, кто действовал способом, который вручную не повторить, — скальпинг. Рядом висят неоплаченные брони — удержание. Память сервера села — отказ в обслуживании. Три строки в журнале честнее одной фразы «нас атаковали боты». Влияние на цены относится к сбору содержимого и не доказывает, что позиции сайта упали: каталог это не измеряет.
Рекламный клик держите пятой строкой, которая не лечит четыре первые. Кто кликает объявление, чем кликфрод отличается от скликивания, когда клик признают недействительным и вернут ли деньги, решают площадки. Сбор карточки, скальпинг билета, висящая корзина и чужой пароль на эти решения не влияют. Рутинный перечень MRC полезен, когда в логе виден известный дата-центр, краулер, небраузерный агент, предзагрузка, пиксель 1×1 или сессия без картинки. Он бесполезен как ответ на вопрос «почему корзина не оплачена».
Если за неделю пуста только одна подпись, начните с неё, а не с общего бан-листа. Пустой вход — второй фактор против большинства атак на пароль. Пустая лимитка — отличие «товар достался» от «товар только подержали». Пустой каталог — сбор данных, который бывает и без входа. Пустая корзина — возврат запаса после неоплаты. Так разбор магазина остаётся полным, даже когда цифры доли ботов в заказах вам никто из этих источников не дал.