INT 21h

Hi, I am Vladimir Smagin, SysAdmin. Telegram Email GPG / Микроблог

Виртуальный браузер Splash для автоматических проверок обфусцированных страниц на специфические запросы

№ 9012 В разделах: Администрирование Программирование от May 24th, 2018,

Появилась задача, которая потребовала проверки сайтов на запрос по определенному урлу. Зачем это надо? Например, для рекламщиков, собирающих информацию о покупателях в интернет магазинах. Они вешают маленький яваскрипт, прячут его всячески и т.д. и код работает, собирая информацию о действиях пользователя на сайте. В случае проблем или недобросовестности партнеров код могут снять без предупреждения. Так вот задача отследить момент снятия кода с партнерского сайта. Код многих партнерских страниц оказался обфусцирован и простые методы не работали. Первая же мысль загрузить страницу в какой-то виртуальный браузер и проанализировать запросы. К тому моменту я еще не был знаком с headless браузерами и поэтому первый же возникший у меня вопрос: “как, черт возьми, я это сделаю?”. Начался процесс гугления и вопросов у коллег и таки нашлись люди, которые уже делали подобное. Оно так и называлось Headless Browsers Изучение доки привело меня к использованию Splash как наиболее приемлемого варианта. Скажу сразу, не долбайтесь с ручной установкой, это адский геморрой, который я так и не завершил, задолбался бороться с ошибками. Ставьте из репов пакет docker.io и забирайте докер образ к себе, в доке Splash написано как.

После запуска контейнера у вас сразу появляется возможность с ним работать прямо из консоли, это чертовски удобно. Однако, я с ним работать буду из python, поэтому пример будет на нём. Поскольку мы ленивые и еще куча работы ждет, то используем requests, указываем где наш сервер, что за запросы мы ищем и на каких урлах. Пока всё легко.

import requests
searchServer = "http://127.0.0.1:8050"

searchForRequests = {
    'leadslabpixels.net':
        ['/tm.js', '/tag_manager.js']
}

searchURLs = [
    'https://online.renins.com/buy/auto/#edit/new/data',
    'http://nevatowers.ru',
    'http://novogradpavlino.ru',
    'http://m.uprimskiy.ru/'
]

Обращаться будем к API вызову render.har. Он подобно отладчику из Firefox вернет все запросы и тайминги, которые были во время работы скрипта.

Начинаем перебор по всем урлам, которые надо проверить, обращаемся по ним к har и получаем ответ. Обязательно перед каждым запросом чистим кеш вызовом _gc.

for pageUrl in searchURLs:
    print("Checking", pageUrl)
    print(requests.post(searchServer+"/_gc").text)
    pageUrlRequest = searchServer+"/render.har?url="+ quote(pageUrl) 
    print(pageUrlRequest)
    r = requests.get(pageUrlRequest)
    answer = r.json()

Начинаем перебор по всем запросам, которые произошли во время загрузки и ищем те, в которых есть наш сервер с нужным скриптом.

    for requestUrl in answer['log']['entries']:
        url = requestUrl['response']['url']
        for uSFR, aSFR in searchForRequests.items():
            if uSFR in url:
                print(url)
                print("Found domain match")
                for scriptName in aSFR:
                    if scriptName in url:
                        print("Found request match")

Получается вот такая интересная вундервафля. Вызываете по крону, приделываете уведомления по почте и на продакшен.

Репозиторий с кодом https://git.blindage.org/21h/splash-browser-url-checker

Нет комментариев »

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Микроблог перейти

# 2018-11-26 09:15:41

Обнаружил в kubedb код google analytics UA-62096468-20, слежка включена по умолчанию.

# 2018-11-24 23:30:12

Несложно смог контейнеризовать nginx unit с предзагрузкой конфигурации перед стартом контейнера blindage.org/?p=9575


© Vladimir Smagin, 2005-2018. Копирование материалов без разрешения запрещено. GPG 0x29AE91B1A37721C3
Яндекс.Метрика

Fortune cookie: Success is the sole earthly judge of right and wrong. -- Adolph Hitler, "Mein Kampf"