«Система защиты от парсинга API 2ГИС» — Дмитрий...
description
Transcript of «Система защиты от парсинга API 2ГИС» — Дмитрий...
Защита от парсинга поднагрузкой
Дмитрий Бархатов
2gis.ru @rnd2gis
2ГИС
Данные
• 5 стран
• 10 тыс. населенных пунктов
• 5 млн. гео-объектов
• 2 млн. организаций
• 15 тыс. маршрутов
3
Нас парсят
5
Проблемы
Мусорная нагрузка +
Плохая карма
Что делать?
1. IP
NAT
• Студенческая сеть
• Сотовая вышка
9
2. API-ключhttp://api.2gis.ru/search?what=Пиво&where=Москва&key=1234
Ограничение по referer
11
› curl --referer 2gis.ru
Кийя!
3. Аналитикана лету
Анализируем нагрузку• RPS
• Нагрузка в динамике
15
Нагрузка за длительный периодНормальная ситуация
16
Нагрузка за длительный периодПарсер
17
Анализ активности на проекте• Хостинг
• Прачечные
• Школы каскадёров
• Матрасы
• Алмазное бурение
18
Итого по аналитике• Текущая нагрузка
• Кратковременная нагрузка
• Долговременная нагрузка
• Поведение
19
Как делать?
Каменный век — локация в NginX
geo $ban {
213.180.193.49 1;
}
01.
02.
03.
21
Средневековье — PHP + Redis22
ngx_lua
location / {
content_by_lua '
ngx.say("hello, highload++")
';
}
01.
02.
03.
04.
05.
24
Lua: считаем RPS
http {
lua_shared_dict RPS 10m;
...
01.
02.
03.
25
Lua: считаем RPS
ip = ngx.var.remote_addr
rps = ngx.shared.RPS:incr(ip, 1)
if rps > X then
ngx.shared.BANNED:set(ip, 1)
ngx.exit(444)
end
01.
02.
03.
04.
05.
06.
26
Lua: смотрим динамику
for i = -60, 0 do
-- смотрим данные в хранилище
-- принимаем решение
end
01.
02.
03.
04.
27
Нагрузка в течение сутокLua как поставщик данных
location /get_bad_guys {
content_by_lua '
-- отдаем данные из хранилища
';
}
01.
02.
03.
04.
05.
28
Отстреливаем негодяевif ngx.shared.BANNED:get(ip) then
ngx.exit(444)
end
01.
02.
03.
29
Скорость?
Бенчи голосуют за Lua
http://openresty.org/#Benchmark
http://benchmarksgame.alioth.debian.org/u64/benchmark.php
http://attractivechaos.github.io/plb/
31
1 мс
Да ладно!
1 мс
16000 RPS
Lua (1 мс) vs PHP (15 мс)
Попался, голубчик!
Бан или не бан• Уверены → Бан
• Не уверены → Помогите, люди добрые
38
Когда снимать бан?
Минусы всего подхода• Нет однозначной идентификации
• Бот может замаскироваться
41
Результат
В связи с временными техническими проблемами онлайн-версии
2GIS, мы решили предложить Вам выгодные условия по
приобретению нашей программы: успейте купить парсер организаций
2GIS по цене 2000 рублей вместо 4000 рублей
42
Просто и быстроИспользуйте простые скриптовые языки в связке с NginX с
алгоритмами анализа статистики в реальном времени.
43