0,0
рейтинг
16 февраля 2011 в 19:05

Разработка → Делаем свой Tracking Protection List для IE9

Как вы наверное уже знаете, в Internet Explorer 9 появилась новая возможность для обеспечания приватности — Tracking Protection Lists. При посещении какого-либо веб-сайта, который содержит данные, предоставляемые сторонним веб-сервисом (например, рекламу, счетчики или скрипты), некоторые сведения могут быть автоматически отправлены поставщику этого содержимого. В некоторых случаях подобное может быть удобно, например, наличие рекламы может предоставить свободный доступ к платному содержимому. Однако это может в конечном счете повлиять на конфиденцальность, т.к. для поставщиков содержимого существует возможность отслеживать перемещения пользователя между некоторыми сайтами. При использовании Tracking Protection некоторое содержимое может быть автоматически заблокировано.

В день выхода IE9 RC на промо-сайте IE появилась страница посвященная TPL [link] с набором списков от партнеров, которые можно добавить в свой браузер. К сожалению, российский сегмент был в них представлен очень скупо — я нашел только один сайт из зоны .ru. Поэтому я решил создать свой список, чтобы устранить данную несправедливость. Благо это оказалось совсем не сложно.

Начать стоит с того, что Tracking Protection является прямым наследником InPrivate Filtering, который был представлен во времена IE8, и с тех пор концепция не сильно поменялась. Как и раньше, основная задача — обеспечить приватность пользователя на столько, на сколько это возможно. Поэтому это не полноценная банерорезалка, коей является AdBlock. И удаление всей «шелухи» не является себецелью, и это накладывает некоторые ограничения на функциональность.
Постараюсь объяснить, что это значит. Каждый раз заходя на сайт www.somenews.com вы ориентируетесь на то, что сайт покажет тот контент, который вы от него ждали и на этом закончит. И уж точно вы не ожидаете, что информация о вашем посещении (пробыли сколько-то времени, были залогинены на такие-то сайты и т.д. ) уйдет куда-то на сторону. Зашли почитать новости, а на вас досье составили — не хорошо. Tracking Protection Lists призваны защитить персональную информацию пользователя от третьих лиц. Поэтому считается что, если вы сознательно зашли на некий сайт, то этот сайт имеет право сам(!) мониторить происходящее на его страницах, а вот скрипты подгруженные с других сайтов — нет.

Список исключений для русскоязычных пользователей

Мне захотелось посмотреть на возможности, которые предоставляет IE для фильтрации содержимого. Информации оказалось не слишком много — вещь новая, потому и описана пока слабо. Многие вещи пришлось изучать по примерам на промо-сайте, а остальное проверять методом научного тыка. В процессе сформировался свой список исключений. Что из этого получилось вы можете можете посмотреть на странице куда я повесил свой TPL [link]. Чтобы он заработал вам потребуется из под IE9 перейти по данной ссылке, нажать на «Add TPL», затем согласится на то что вам предложит браузер и посмотреть, как изменятся веб-страницы после активации — рекламы станет сущетвенно меньше.
Чтобы сформировать список, пришлось походить по регулярно посещаемым сайтам и повырезать оттуда лишнее. Полученная выборка не претендует на объективность, но это и не финальная версия.

Формат файла

Чтобы создать свой TPL нам понадобится текстовый файл с расширением ".tpl". Формально список фильтрации должен иметь такое расширение, но IE9 вполне комфортно будет себя чувствовать и с обычным ".txt".
Первой строкой идет заголовок, по которому IE определяет, что это TPL. Затем идет список необязательных настроек, которые начинаются с двоеточия. Правда на данный момент мне известна всего одна — Expires. Ну и далее идет набор правил фильтрации — одна строчка одно правило.
Далее пример подобного файла:
msFilterList
: Expires=1
# Tracking Protection List by Eugene Gavrin
#
# Please report any unblocked tracking or problems
# via twitter (https://twitter.com/#!/egavrin)
# or via e-mail (eugene.a.gavrin@hotmail.com).

# Russian сounters
-d counter.rambler.ru
-d tns-counter.ru

Полная версия доступна по ссылке: [link].

Настройка периода автообновления

Один из приятных бонусов, которые приобрел TPL, по сравнению с InPrivate Filtering — это автообновление. По умолчанию период автообновления — 7 дней. В том случае, если автора это значение не устраивает, он может изменить этот период на срок от 1 до 30 дней.
Делается это с помощью опции Expires вот таким образом:
# Важно помнить, что между Expires и двоеточием должен быть пробел.
: Expires=5

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

Правила

В TPL существуют правила двух видов: универсальные, которые не привязанны к конкретному домену, и правила работающие только для контента полученного с определенного домена.
Каждое правило начинается с модификатора "+" или "-". Минус в начале правила означает, что элементы, которые под это правило подпадают отображать не нужно. Плюс же означает, что данные элементы можно отображать. Плюс — это исключение из правил, и в том случае, если имеется два одинаковых правила противоречащих друг другу — спорное содержимое будет отображено.
Далее я приведу несколько примеров:
# Будут скрываться все картинки вида Ad20x30.jpg, Ad45x45.jpg, Ad50x10.jpg и тд
- Ad*x*.jpg
# Но картинку Ad250x600.jpg отображать можно, она хорошая
+ Ad250x600.jpg

# Будет скрываться весь контент приходящий с домена ad-provider.ru
-d ad-provider.ru
# кроме скрипта watch.js
+d ad-provider.ru watch.js

# Правила фильтрации по доменам могут обладать такой же нечеткой логикой как и фильтрация картинок
# Согласно этим правилам будет отфильтрован весь контент с доменов:
# ad1.provider.ru
# ad2.provider.ru
# ad3.provider.ru
-d ad*.provider.ru
# а вот с ad7.provider.ru не будет
+ ad7.provider.ru

Комментарии

Любая строка в файле, которая начинается с символа "#", будет являться комментирием. Данная строка будет проигнорирована, так что можно писать там все что угодно.
Как делать многострочные комментарии мне пока не знакомо.

Обработка ошибок в списках

IE9 может вести себя двумя разными способами, при возникновении ошибок. В том случае, если файл каким-либо образом не соответсвует заданному формату, браузер начнет ругаться, так что вы об этом без труда узнаете. В том случае если с обновлением TPL придет файл в неправильном формате — браузер проигнорирует обновление.
В том же случае, если некоторые правила из списка оказываются непонятны IE, то он убирает это правило из рассмотрения и оставляет небольшой коментарий вида: «Я не понял, что тут, поэтому игнорирую». Конечный пользователь, если специально не посмотрит в нужное место, об этом и не узнает.

Отладка

С точки зрения пользователя все отлично — стало меньше рекламы, назойливых высплывающих окон и тд. Но для разработчика фильтров это самый тяжкий этап.
Тут есть две основные сложности обновление списка при отладке, и узнать что было отфильтровано.
Как бороться с обновлениями списков? Можно, конечно, переподписываться каждый раз при изменении одного правила, но это достаточно быстро утомляет.
Благо удалось найти место, куда IE кладет скачанные списки исключений, вот путь:
%HomePath%\AppData\Local\Microsoft\Internet Explorer\Tracking Protection\

Сейчас я отлаживаю именно файл, который лежит в этой папке, а затем обновляю файл на сервере.
Процесс отладки выглядит примерно так: сохранил файл, обновил страницу в браузере, посмотрел, что изменилось. И тут выявляется основная неприятность — когда браузер фильтрует содержимое страницы в адресной строке появляется перечеркнутый синий кружочек, как на картинке снизу. Если на него нажать, выскочит менюшка, которая предложит отключить Tracking Protection на данной странице:

А как посмотреть, что было отфильтровано? Не понятно.

Портирование правил AdBlock

Многим пользователям знаком плагин AdBlock для ФФ и Хрома, простая и эффективная банерорезалка со списками подписок. Большая часть правил, которая используется в AdBlock практически 1 в 1 может быть перенесена в TPL.
В связи с этим, я вяло думаю на тему того, чтобы написать конвертер из AdBlock подписок в TPL — .

Добавление кнопки на сайт

Тут все предельно просто, на свой сайт или страничку необходимо вставить следующих код:
<a href="javascript:window.external.msAddTrackingProtectionList('rules.txt', 'TPL from HabraUser')">Add HabraUser's TPL</a>

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

Положительные стороны

  • Это полноценный AdBlock, хоть и с некоторыми условностями
  • Автоматическое обновление списков
  • Это встроенный в браузер механизм

Недостатки

  • Полное отсутвие документации по формату файлов TPL (или я ее просто не смог найти)
  • Не всю рекламу получается вырезать

Послесловие

Планируется, что данный список будет обновляться и редактироваться, поэтому если будут возникать сложности — будут рад, если вы мне о них расскажете :)
Так же мне будет интересно узнать на каких сайтах фильтры не работают, или работают недостаточно хорошо. Чем больше косяков будет найдено — тем больше из них будет иcправлено.

Update:
Большое спасибо за отзывы, которые вы оставили через форму — буду исправлять.
Евгений Гаврин @EugeneGavrin
карма
15,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (23)

  • +2
    Собственно AdBlock — это единственное чего мне жутко не хватало в IE9. Спасибо вам, добрый человек!
    Мой Хабр теперь без жутких анимированных флеш-баннеров!
    • 0
      Благодарю :)
      Если будут какие-то глюки — пишите.
  • 0
    Тоже было желание писать свой список, по крайней мере для популярных сайтов.
    Также не нашёл нормальной документации.

    Из минусов — нельзя блокировать отдельные элементы например по id и то что на месте рекламы остаётся просто пустое место.

    Вот думаю есть смысл писать на коннект или нет…
    • 0
      На самом деле пустое место — это следствие невозможности блокировать отдельные элементы по id. Делать это действительно не получается, но предполагаю это идеологическое ограничение. Задача не позволить следить третьим лицам, а блокировка по id — это все таки вмешательство в контент сайт. А так все чистенько, и левое не показывает, и страницу не трогаем.
      • +2
        Ну в общем да. И не поспоришь. Тем не менее радует наличие такого инструмента, тем более «из коробки».
  • 0
    Было бы кстати совсем отлично если бы вы на своём сайте сделали форму для отправки сайтов, где нужно убрать рекламу и/или чтобы можно было загрузить свои списки правил, для дополнения вашего.
    • 0
      Хорошая мысль! Добавил форму внизу, страшненькая, но работает :)
  • 0
    Отлично! Я тоже бегло попробовал сделать свой TPL и тоже думал сделать конвертор из AdBlock, но меня остановила проблема, что начал с блокирования на хабре картинок и получил вот такое twitpic.com/3yl9lt, видимо просто не то блокировал :) Буду использовать, это то что нужно!
    • 0
      Да, есть такая проблема с картинками — некоторые картинки помечаются так, некоторые просто убиваются.
  • 0
    Кстати, а обновления будут, можно на сайт не заходить, все будет по тому же url автоматически обновляться?
    • 0
      Если ты уже подписан, то обновления сами приедут :)
      А в плане того, будут ли они в принципе — будут конечно.
  • 0
    После статьи становится интересно, что еще есть в IE9 «из коробки». Спасиба.
  • 0
    Стыдно сказать — вроде и про TPL слышал, а глубже копнуть поленился.
    Спасибище тебе, о Человечище!
  • 0
    спасибо :)
  • 0
    А эта штуковина как-нибудь влияет на скорость прорисовки страниц?
    • 0
      Пока она в подобном замечена не была.
  • 0
    Ну вот — TNS заблочили. Как же теперь «Отцы РуНета» пиписьками меряться будут?
  • 0
    Спасибо, что затронули тему.
    Насчет «несуществующей» документации: http://www.w3.org/Submission/web-tracking-protection/
    • 0
      Статья появилась за неделю до этого сабмишена :) на тот момент ее не было.
      Да и не документация это.
      • 0
        Понятно)
        Насчет «не документация» — не соглашусь, там описание более подробно чем в статье.
  • 0
    О, спасибо, попробуем. Я зарубежные списочки загрузил, но не знал, что можно самому такие делать.
  • 0
    Спасибо за нужную вещь! Не удалось ли по истечении года портировать adblockplus листы?
  • 0
    Жаль, что TPL не такие гибкие как фильры Adblock Plus. Не блокируют текстовую рекламу на Ютьюбе во время проигрывания ролика и многое другое. Если б можно было переделать фильтр от Adblock Plus…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.