Блокировщик нежелательных яваскриптов

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Давно меня беспокоила проблема непонятных скриптов на различных сайтах. Когда профили нагуливаются, боты запросто могут забрести то на срытый майнер, то на эксплойт. Может попасться и безобидный скрипт, но настолько требовательный к вычислительным мощностям, что просто крашит зеннопостер. Вот так и случилось у меня вчера вечером. Ни с того ни с сего, все шаблоны зависли, кубик сохранения профиля сохранялся по 5-8 минут, кнопки перестали нажиматься, даже кубик капмонстра стал постоянно сбоить. Даже в багтрекер написал. Но начал смотреть более внимательно и обнаружил, что все боты застряли на вот этом сайте. При загрузке всего содержимого сайта, начинаются глюки даже в проджектмейкере. Отключив загрузку скриптов, обнаружил что все хорошо, ничего не тормозит, эмуляция мышки стала опять работать. НО скрипты то мне нужны. Как же я буду нагуливать профиль если аналитика яндекса и гугла с фейсбуком не работают. Да еще эти майнеры, которые только и ждут когда им предоставят халявную мощность. И родилось решение сделать черный и белый список наподобие расширения AdBlock.
Итак. Имеем 2 списка.
DB_Black_List_Mainer.txt - здесь черный список доменов заподозренных в предоставлении скриптов для майнинга. этот список можно иметь в одном экземпляре и иногда обновлять его.
DB_White_List_JS.txt - здесь белый список доменов с которых мы хотим загружать яваскрипты. Для нагуливания кук туда пишем всякие метрики, фейсбуки, инстаграмы ну и подобное. Если работа идет с таргертированным сайтом, то его обязательно прописываем. я там накидал несколько строк. дополните своими. этот список можно иметь в нескольких вариантах и подключать нужный. ну или просто для каждого шаблона иметь свой рядом в папочке.
В шаблоне подсоединяем их как списки. Делаем кубик C# и вставляем этот код. выполнять в начале работы шаблона.
C#:
var Black_List_Mainer     =  project.Lists["Black_List_Mainer"];  // список с блокируемыми доменами. майнеры и иже с ними
var White_List_JS        =  project.Lists["White_List_JS"];        // список с разрешенными доменами для яваскриптов.
///// формирование белого листа JS ////////////////
string White_List_JS_regex =  @"(?<=(^|\r\n))((?!(";
string res="";
for (int i=0; i<White_List_JS.Count; i++){
    string data=White_List_JS[i];
    res=res+data.Replace(".",@"\.")+"|";
}
res=res.TrimEnd(new char[] { '|' });
White_List_JS_regex = White_List_JS_regex + res + @")).)*(\.js)";
List<string> White_List_JS_list = new List<string>() { };
White_List_JS_list.Add(White_List_JS_regex);
/////////////////////////////////////////////////////
instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);
как видно на скриншоте, при загрузке неизвестного подозрительного сайта, загружаются и выполняются только разрешенные яваскрипты, а неизвестные не загружаются.
весь остальной контент загружается без проблем. Думаю будет полезна в шаблонах для нагуливания кук и при работе с таргертированным сайтом с которого необходимо переходить в неизвестность.

49012


PS. Пока писал эту статейку , запустил все доработанные шаблоны в работу. Поработали где то минут 30. Ошибок не наблюдал, нагрузка на процессор снизилась с 85-95% до 20-30%
 

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Полезно! Спасибо
 
  • Спасибо
Реакции: masterLomaster

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Изменил код, как оказалось точки это управляющие символы и их надо экранировать. и перезалил DB_White_List_JS.txt , добавил туда больше разрешений для "паразитного трафика" :-)
 

Леший

Client
Регистрация
03.02.2017
Сообщения
22
Благодарностей
2
Баллы
3
Спасибо, что поделился наработкой, как раз то, что искал!
Позволил себе малость изменить регулярку:
было - *(\.js)";
стало - *\.(js|jpg|jpeg|png|svg|woff|woff2)";
Так можно ещё и трафик значительно сократить. Всякие счётчики всё равно не заметят грузишь ли ты картинки и шрифты с сайта.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
Не могу понять. Смотрю описание метода и получается:

instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);
1 параметр "BlockList" - разрешены все запросы кроме указанных
2 параметр Black_List_Mainer - список доменов для 1 параметра
3 параметр White_List_JS_list - список регулярок для 1 параметра

Получается что тут нет разрешенных скриптов для выполнения. Тут 2 варианта запрета либо по доменам, либо по регуляркам.

Или где я не понимаю?


P.S. Проверил.
Все как я и описал. Получается нет 2 разных листов. Белый и черный список. Тут 2 разных варианта блокировки и нет разрешения на выполнения скрипта.
А как происходит блокировка, отвечает первый параметр.
Либо мы блокируем:
- разрешены все запросы кроме
- запрещены все запросы кроме
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Не могу понять. Смотрю описание метода и получается:

instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);
1 параметр "BlockList" - разрешены все запросы кроме указанных
2 параметр Black_List_Mainer - список доменов для 1 параметра
3 параметр White_List_JS_list - список регулярок для 1 параметра

Получается что тут нет разрешенных скриптов для выполнения. Тут 2 варианта запрета либо по доменам, либо по регуляркам.

Или где я не понимаю?
SetContentPolicy работает и по доменам и по регуляркам. одновременно.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
SetContentPolicy работает и по доменам и по регуляркам. одновременно.
Да, только метод блокировки или 1 или другой получается. То есть если я в блеклисте запрещаю майнеры, а в вайтлисте (как выше написано в вашем коде) прописываю метрику и ставлю instance.SetContentPolicy("BlockList"
То получается что я блокирую и метрику.
А у вас получается как написано, вайтлист это для тех которые нельзя блокировать.

Правильно я понимаю?
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
"DB_White_List_JS.txt - здесь белый список доменов с которых мы хотим загружать яваскрипты. Для нагуливания кук туда пишем всякие метрики, фейсбуки, инстаграмы ну и подобное. Если работа идет с таргертированным сайтом, то его обязательно прописываем. я там накидал несколько строк. дополните своими. "

По коду это тоже список блокировки получается:
instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);


3 параметр Collection of regular expressions for "WhiteList" or "BlockList" policy. Default value is null.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
По коду это тоже список блокировки получается:
instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);
так и есть. только для White_List_JS_list используется регулярка с обратной логикой. она выбирает все кроме указанных в White_List_JS_list. поэтому блокирует все js, кроме указанных в белом листе.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
"она выбирает все кроме указанных в White_List_JS_list. поэтому блокирует все js, кроме указанных в белом листе. " вот как раз я и говорю что нет)
за выбор Белого листа или Черного отвечает 1 параметр BlockList, а 3 параметр где мы пишем White_List_JS_list дает на выходе такую логику:
Разрешены все запросы кроме указанных в Списке Доменов, Списке Регулярок
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
Для примера - засуньте в White_List_JS_list

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
По скрину не вижу эту строчку в файле.
https://mc.yandex.ru/metrika/watch.js

У меня запрет. Проверил еще раз.
Спецом проверял. Удалил все из Белого листа и оставил там эту 1 строчку. Вся метрика грузится а вот этот один скрипт нет.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
достаточно только части домена для разрешения. например yandex. разрешит грузить этот скрипт.

52516
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
Всю голову сломал. какой регуляркой, строчкой мне запретить выполнение данного скрипта? Только его.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Всю голову сломал. какой регуляркой, строчкой мне запретить выполнение данного скрипта? Только его.
здесь тема не запрета , а наоборот разрешения конкретных скриптов, от конкретных доменов. все остальное блокируется.
 

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
здесь тема не запрета , а наоборот разрешения конкретных скриптов, от конкретных доменов. все остальное блокируется.
Название темы:
Блокировщик нежелательных яваскриптов

Не суть.
Я там в регулярках не очень. От слова совсем. Объясни на пальцах)
Как я понял:
1) Формируем списки из 2 файлов. Один с доменами, другой с регулярками. Белый и черный лист.
Black_List_Mainer - это домены
White_List_JS - это регулярки

2) Далее идет обработка регулярок. Вот тут мне не совсем понятно, т.к. регулярки я не изучал.

3) Все это запихивается в
instance.SetContentPolicy

и получаем:
instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);

BlockList - выбор как мы будем блокировать. По описанию метода это "Разрешены все запросы кроме приведенных в списках"
Black_List_Mainer - список с доменами. Опять же по мануалу в зависимости от 1 параметра (который у нас стоит BlockList), мы работаем либо с белыми списками=запрещены все кроме приведенных в списке, либо с черным списком=разрешены все кроме приведенных в списке
White_List_JS_list - список регулярок. Опять де по мануалу идеинтичен 2 параметру, только регулярки.


И тут у меня идет непонимание) Если как ты на скринах привел (если не шарпом, а кубиком настраивать), то получается 1 список где есть и домены и регулярки и либо мы разрешаем все кроме приведенных в списке, либо запрещаем все кроме приведенных в списке.

Где я тут не понимаю? И это не издевка (а то тут бывает на форуме)), хочу понять.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
да все просто. instance.SetContentPolicy либо блокирует либо разрешает, для всего что указано во втором и третьем параметре функции. но в 3-м параметре используются значения для регулярок и если правильно составить регулярку , то можно при блокировке получить наоборот разрешение для указанных значений. вот этим я и воспользовался. список White_List_JS преобразуется в одну обратную регулярку, которая сохраняется в White_List_JS_list и затем подставляется в SetContentPolicy . можно и наоборот все разрешить, а в регулярку запихать запреты. тут одним словом поле для творчества огромное :-)
 
  • Спасибо
Реакции: DocSpoc

Spelin

Client
Регистрация
24.09.2019
Сообщения
445
Благодарностей
115
Баллы
43
Если не сложно. Можно объяснить регулярку? Понятно что придется запарится регулярками, но на практике быстрее разбираешься)
 

DocSpoc

Client
Регистрация
04.01.2016
Сообщения
271
Благодарностей
143
Баллы
43
Спасибо!
Я правильно понял, что в вайтлист надо добавить свои домены?

domen1.
domen2.
domen3.
...

Субдомены прописывать не надо?
 

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 649
Благодарностей
913
Баллы
113
Спасибо!
Я правильно понял, что в вайтлист надо добавить свои домены?

domen1.
domen2.
domen3.
...

Субдомены прописывать не надо?
там не сами домены, а часть названия скриптов - метрика, аналитикс и т.д. и если у вас обычные сайты - то там и так уже список готов
 
  • Спасибо
Реакции: Phoenix78 и DocSpoc

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
741
Баллы
113
var Black_List_Mainer = project.Lists["Black_List_Mainer"]; // список с блокируемыми доменами. майнеры и иже с ними var White_List_JS = project.Lists["White_List_JS"]; // список с разрешенными доменами для яваскриптов. ///// формирование белого листа JS //////////////// string White_List_JS_regex = @"(?<=(^|\r\n))((?!("; string res=""; for (int i=0; i<White_List_JS.Count; i++){ string data=White_List_JS; res=res+data.Replace(".",@"\.")+"|"; } res=res.TrimEnd(new char[] { '|' }); White_List_JS_regex = White_List_JS_regex + res + @")).)*(\.js)"; List<string> White_List_JS_list = new List<string>() { }; White_List_JS_list.Add(White_List_JS_regex); ///////////////////////////////////////////////////// instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);
Заинтересовался сниппетом, как точно пользоваться, два списка понятно,
C#:
instance.SetContentPolicy("BlockList", Black_List_Mainer, White_List_JS_list);
Этот пустой должен быть?
 

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
348
Благодарностей
51
Баллы
28
достаточно только части домена для разрешения
подскажите пожалуйста как составить правильно регулярку что бы получить в результате запрет загрузки только к примеру .gif
именно хочу реализовать через политику разрешения, сейчас покажу на скринах и примере

использую вайт лист, именно через него надо запретить, такая прихоть.. не спрашивайте)

76035


пробовал через символ каретки, что то не то...

76036
 
Последнее редактирование:

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
348
Благодарностей
51
Баллы
28
и еще не совсем понимаю что идет в приоритете...

к примеру если в списке регулярок делаю вот так

76038


то по идее должны же все скрипты грузиться, даже если доменов нету в списке "WhiteList_content_policy_domains", но грузятся только те домены которые прописаны
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
523
Благодарностей
255
Баллы
63

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Ты как этот список собирал, вручную что-ли? Он довольно-таки приличный :(
у adblock есть ссылки откуда он их парсит и у других блокировщиков тоже есть. есть специальные ресурсы для сбора таких списков.
 
  • Спасибо
Реакции: p-sergei

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)