Правила переоформления студенческих работ
Требования к оформлению студенческих работ

Вопросы и ответы

Проверка установки Adblock в браузере пользователя

Информатика
semestr от 26 декабря 2013 года, 10:32
В статье рассказывается о программных методах защиты от Adblock.

Предназначение Adblock заключается в фильтрации рекламных кодов, установленных на сайтах. При этом зачастую рекламный код представляет собой код javascript. Поэтому алгоритм Adblock производит поиск всех кодов на html-странице сайта, и помечает рекламные коды особой меткой (эта метка служит для настройки фильтра).

Первые версии Adblock фильтровали (вырезали) код js. Таким образом, для обнаружения наличия Adblock было достаточно проверить факт выполнения любого скрипта js. Если скрипт выполняется, то у браузера пользователя Adblock не установлен.

На данном этапе код Adblock сохраняет все исходные скрипты сайта, но не выполняет код скрипта.

В этом случае можно использовать "визуальный" метод обнаружения наличия Adblock. Его алгоритм состоит из следующих шагов:
1. Сохранить часть экрана, где должен выводится результат выполнения кода, в формат картинки.
2. Проверить код картинки на размер или на наличие отличительных признаков.
3. Если совпадения отсутствуют, то делается вывод о наличии Adblock.

Отличительными признаками могут служить:
а) размер картинки (если размер небольшой, то это свидетельствует о "пустой" области экрана);
б) наличие определенной комбинации кода (например, код какого-то текста).

Для реализации методы используем библиотеку html2canvas.

В этом месте выводится код.


< div id="downimg" >
< div >
код, который необходимо защитить
< /div >
< /div >
Сохраняем часть экрана (только область для id="downimg").
    < script language="javascript" >

function downimg(){
html2canvas($('#downimg'), {
onrendered: function (canvas) {
var img = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream");
window.location.href = img;
}
});
}
< /script >

Однако наиболее простой способ обнаружения фильтра от Adblock состоит в анализе исполнения требуемого кода скрипта. При загрузке кода, изменяется (увеличивается) размер DOM-узла. Таким образом, если количество узлов анализируемого DOM-объекта увеличилось - фильтр AdBlock не включен, если не изменилось - включен фильтр AdBlock.

Алгоритм обнаружения фильтра от AdBlock в этом случае может представлять собой следующие шаги:
1. Выяснить минимальное количество узлов Nmin анализируемого dom-объекта.
2. После выполнения кода страницы подсчитать количество узлов N требуемого dom-объекта.
3. Если количество N > Nmin, код выполнился, т.е. фильтр AdBlock не установлен. Если скрипты не загрузились, т.е. N = Nmin, то включен AdBlock.

Последняя версия Adblock работает с теневым DOM. Но здесь приходит на помощь сам Google. При обнаружении фильтрации, он в определенные теги пишет сообщение и не грузит определенный скрипт.
Информатика