как заблокировать скрипт на сайте
Как защитить сайт от хакерских скриптов
Включите политику безопасности.
Недавно мы делали проект лапшеснимателя — он подсвечивал потенциальные манипуляции в тексте. Чтобы это был хотя бы минимально полезный продукт, мы должны были запускать скрипт лапшеснимателя на чужих страницах. И на одних сайтах всё запускалось без проблем, а на некоторых других скрипт не заводился.
Для нас как авторов скрипта это плохо. А для нас как веб-мастеров это интересно: можно ли защитить наши собственные сайты от взломов через скрипты?
👉 В этой статье мы разберём только один способ защиты. В жизни всё работает несколько сложнее и векторов атаки гораздо больше. Мы намеренно несколько упрощаем подачу.
Зачем нужна защита от вставки скриптов
Допустим, у нас есть сайт, который обрабатывает персональные данные пользователей: Ф. И. О. и номера телефонов. Часть этих данных получается и обрабатывается в JS-скрипте. Если немного изменить этот скрипт, можно обработать не только свои данные, но и получить данные всех пользователей сайта.
Чтобы изменить скрипт на странице или добавить в него новые команды, используют разные способы, например:
Каждый из этих способов может добавить на страницу свой код и выполнить её как бы от имени страницы сайта. Опасность тут в том, что обычно сайт доверяет тому, что делают его собственные страницы. Если от неё придёт запрос «Отдай мне список всех фамилий и телефонов» и сервер сможет это сделать — он это сделает, и список уйдёт в чужие руки.
Решение: политика безопасности контента
Чтобы защитить сайт и страницы от таких атак, придумали CSP — политику безопасности контента. Работает это так:
CSP может запрещать загрузку чужих:
Также политика безопасности может запретить обмениваться данными с любыми другими сайтами, которых нет в разрешённом списке.
Проще говоря, CSP — это фейсконтроль для любых данных, которые кто-то хочет добавить на страницу. Например, мы указали в политике, что картинки и скрипты можно загружать с нашего сайта. Когда злоумышленник попробует встроить на страницу другую картинку и свой скрипт, у него ничего не получится.
Покажите примеры
Получается, что для блокировки всех чужих скриптов на странице нам достаточно написать в политике безопасности:
Content-Security-Policy: script-src ‘self’
Если мы ещё доверяем серверам Яндекса и хотим встраивать их скрипты у себя на страницах (например, плагины Яндекс Музыки), то можем написать так:
Content-Security-Policy: script-src ‘self’ yandex.ru
Content-Security-Policy: default-src ‘self’
А как это использовать?
Чтобы вся эта магия работала, нам нужно сообщить браузеру о нашей политике безопасности. Это можно сделать несколькими способами.
Если у вас на хостинге стоит отдельный веб-сервер Apache, то в его конфигурационный файл httpd.conf можно написать так:
Header set Content-Security-Policy «default-src ‘self’;»
Настроить политику на уровне движка сайта. Например, у вас есть сайт на Вордпрессе или другой CMS, которая работает на PHP. Тогда мы можем добавить в модуль, который отвечает за сборку страницы, такую строку:
header(«Content-Security-Policy: default-src ‘self'»);
В этом случае у нас каждая страница, которую собирает движок, будет отправляться с нужными заголовками. Браузер их увидит и сделает всё, что там написано.
Вручную писать нужные параметры в метатегах внутри страницы. Это самый сложный путь — нам придётся написать теги внутри каждой страницы. Ещё один минус такого решения — теги не действуют на ресурсы, которые расположены на странице перед ним. Например, в разделе мы подключим скрипты и стили, расположенные на других сайтах, а потом напишем так:
В этом случае мы хоть и запрещаем загрузку любых ресурсов с чужих серверов, но на скрипты, написанные или подключённые до этой команды, это не влияет. Если злоумышленник сможет их подменить — защита не сработает.
И что, этого достаточно?
Нет, но это ещё один уровень защиты сайта от злоумышленников и хакеров. Вот несколько других инструментов:
И есть вещи, с которыми очень сложно бороться с помощью программирования, — например, фишинг и социальная инженерия. Но всё это темы для отдельных разговоров.
Что дальше
Дальше настроим политику безопасности на нашем учебно-боевом сервере и проверим, как она работает. Заодно посмотрим, какие ещё у неё есть важные параметры и как ими управлять.
Расширение для блокировки скриптов в Google Chrome — ScriptBlock
Доброго времени суток, дорогие друзья, знакомые, читатели, почитатели и прочие личности.
Многие из Вас, надеюсь, помнят, что одной из ключевых дыр в безопасности Вашего компьютера являются разрешенные скрипты в браузере.
Я уже писал по этой теме не одну статью. Например в Firefox залатать подобную уязвимость позволяет расширение NoScript, а в Google Chrome некогда актуальным было такое решение как NotScripts. Но после того, как последний перестал поддерживаться, пришлось подыскать ему аналог, коим, собственно, я и хочу поделится с Вами.
Блокируем и разрешаем скрипты в Google Chrome при помощи ScriptBlock
Собственно, ничего сложного тут нет. Переходим на страничку с расширением в Google-маркете и жмём в кнопку » Установить «, а затем в кнопочку » Добавить «.
После установки у Вас появится вверху соответствующая иконка, нажав на которую (после перехода на какой-либо из сайтов), у Вас появится список разрешенных и заблокированных скриптов, а так же возможность управления ими.
Напоминаю как с этим взлетать:
На сим, собственно, всё. Каких-то особенных дополнительных настроек, в общем-то не требуется.
Послесловие
Благодаря сему чуду человеческой мысли проблем с вирусами, червями, всплывающими окнами, инсталляциями левых панелей для браузера, редиректами на другие сайты, попытками украсть Вашу информацию и прочей зловредной шушерой станет в разы меньше. Помимо всего прочего исчезнет куча всплывающих окон, редиректов, часть рекламы, увеличится скорость загрузки сайтов и перемещения по ним.
При грамотном использовании (это не так сложно) Вам больше почти не нужен будет антивирус. Это действительно нужный плагин для тех, кто заботиться о своей безопасности, безопасности своего компьютера и ценной информации.
Как и всегда, если есть какие-то вопросы, мысли, дополнения и всё такое прочее, то добро пожаловать в комментарии к этой записи.
Как заблокировать майнерские скрипты на веб-сайтах
Майнеры криптовалют на веб-сайтах стали реальной проблемой. Недавно даже The Pirate Bay начал тестировать такую опцию монетизации. Появились первые сервисы вроде Coinhive, которые агитируют владельцев сайтов устанавливать майнеры и зарабатывать деньги без баннеров и рекламы. По их расчётам, обычный посетитель сайта на среднем ноутбуке генерирует 30 хешей в секунду. Для The Pirate Bay со средним временем сессии 5 минут и месячной аудиторией 315 млн человек это даёт 30×300×315000000 = 2 835 000 мегахешей в месяц.
К сожалению, всё больше сайтов выбирают такой вариант монетизации. Иногда майнерские скрипты проникают на сайты без ведома самих владельцев. Одну такую историю недавно рассказал один из пользователей Хабра. Он случайно обнаружил майнер на маленьком российском сайте по продаже товаров для животных.
Хуже того, злоумышленники начали внедрять скрытые майнеры прямо в расширения для браузеров, так что они могут работать непрерывно, воруя вычислительные ресурсы компьютеры. Например, несколько дней через официальный Chrome Web Store распространялось расширение SafeBrowse с майнером, прежде чем его удалили. Для Firefox вышло два расширения с майнерами.
Естественно, нас подобная перспектива не радует. С точки зрения обычного человека главная проблема — как защититься от этих майнеров, чтобы они не нагружали процессор, не тормозили компьютер и не пожирали электроэнергию.
Пользователи блокировщика рекламы uBlock Origin уже несколько недель обсуждают проблему на GitHub и ведут список вредоносных доменов для блокировки. К сожалению, в последнее время майнерские скрипты начали случайным образом менять домены, так что так просто заблокировать скрипты не получится, если только вы вообще не запретите выполнение JavaScript в браузере.
Майнерский скрипт, который использует случайные домены, трудно заблокировать стандартными блокировщиками
Впрочем, скрипты с рандомными доменами пока редко встречаются. От большинства майнерских скриптов можно защититься, если заблокировать в hosts хотя бы самые популярные домены — и поддерживать список в актуальном состоянии, добавляя туда новые домены по мере их обнаружения. Недавно появилась бесплатная программка Anti-WebMiner, которая занимается именно этим: её авторы пополняют список майнерских доменов на GitHub, а сама программа добавляет эти домены в файл hosts.
Это можно делать и вручную. На данный момент список включает в себя 16 доменов, в том числе домен вышеупомянутого Coinhive, хотя он и позиционирует себя как легальный сервис для владельцев веб-сайтов:
# Anti-WebMiner Start 1.0 43011
0.0.0.0 azvjudwr.info
0.0.0.0 cnhv.co
0.0.0.0 coin-hive.com
0.0.0.0 gus.host
0.0.0.0 jroqvbvw.info
0.0.0.0 jsecoin.com
0.0.0.0 jyhfuqoh.info
0.0.0.0 kdowqlpt.info
0.0.0.0 listat.biz
0.0.0.0 lmodr.biz
0.0.0.0 mataharirama.xyz
0.0.0.0 minecrunch.co
0.0.0.0 minemytraffic.com
0.0.0.0 miner.pr0gramm.com
0.0.0.0 reasedoper.pw
0.0.0.0 xbasfbno.info
# Anti-WebMiner End
Хотя никто не мешает отредактировать hosts вручную, но с этой утилитой обновлять список доменов и вносить изменения в hosts быстрее и удобнее.
Список «запрещённых» доменов можно также вручную внести в программу-блокировщик рекламы, которой вы пользуетесь.
Есть и другие варианты блокировки майнерских скриптов. Например, расширение No Coin для Chrome (исходный код на GitHub).
Расширение No Coin обнаружило на сайте майнерский скрипт
Другое расширение minerBlock для Chrome работает по тому же принципу, что и No Coin. Оно тоже распространяется с открытыми исходниками, так что не придётся беспокоиться, что блокировщик майнеров сам втихую майнит криптовалюту.
Но всё-таки самый надёжный способ заблокировать майнерские скрипты — это установить расширение, которое вообще блокирует выполнение любых скриптов, как NoScript для Firefox.
AdBlock: особенности работы и продвинутые методы блокировки
Привет, Хабр! Часто по работе сталкиваюсь с вопросами вроде: как же работают блокировщики рекламы?
Хочу поделиться с вами некоторыми интересными, но порой сомнительными решениями, которые можно встретить в работе расширений, и обсудить в комментариях работу блокировщиков.
В своей статье расскажу о самых интересных и необычных решениях по блокировке рекламы с помощью JavaScript’a и не только. Также посмотрим на новые направления разработки блокировщиков и куда все движется.
Статья будет полезна прежде всего веб-разработчикам, так как пользователи с блокировщиками могут столкнуться с проблемами на их проектах. А также тем, кто в данный момент ими пользуется, для более глубокого понимания работы.
Рынок блокировщиков
На данный момент самыми популярными решениями являются различные браузерные расширения, однако ими все не заканчивается. На картинке указаны основные, хотя, например, в Chrome Web Store можно найти еще сотню других.
В некоторых мобильных браузерах есть специальные опции для включения блокировки (например, Opera), некоторые изначально работают как браузеры – со встроенным блокировщиком рекламы и отслеживания (AdBlock Browser, Brave).
В некоторых мобильных браузерах есть специальные опции для включения блокировки (например, Opera), некоторые изначально работают как браузеры – со встроенным блокировщиком рекламы и отслеживания (AdBlock Browser, Brave).
Отдельным списком можно выделить следующие инструменты:
VPN серверы с функцией блокировки рекламы;
DNS серверы с блокировкой рекламы
мобильные операторы с услугами блокировки рекламы.
Браузерные расширения
Многие представляют, как работают браузерные расширения, у блокировщиков тот же принцип. Подробнее почитать про устройство расширений под Chrome.
Перейдем к общей схеме работы расширения на примере AdBlock Plus.
Почти все блокировщики основаны на списках фильтрации, это такие файлы https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt, которые содержат список правил для фильтрации контента на определенных сайтах. Также в них есть общая часть, которая относится к фильтрации на всех ресурсах, так что вы ненароком тоже можете случайно попасть под фильтрацию одного из общих фильтров (которые работают на всех сайтах).
Например, вы создали на своем сайте какой-то
На основе этих файлов и происходит вся фильтрация контента сайта. Изменениями в этих списках занимаются конкретные форумы и модераторы (например: RuAdList https://forums.lanik.us/viewforum.php?f=102), некоторые можно найти и на github’e https://github.com/abp-filters/abp-filters-anti-cv.
Как читать/писать фильтры
Для общего понимания стоит разобрать, как выглядят типичные фильтры. Слева указывается блокируемый адрес, а справа, после разделителя, идут особые параметры: какие запросы блокировать и на каком домене это нужно делать. Подробнее можно почитать здесь.
С помощью подобных фильтров можно заблокировать почти любой, загружаемый на странице ресурс. Среди которых могут быть:
Блокировка с помощью JavaScript
Давайте рассмотрим на примере:
Фильтр на примере: localhost#$#hide-if-shadow-contains /MyAds/
На живом примере мы видим, что блокировщик успешно справился с задачей блокировки закрытого Shadow DOM на основании его внутреннего контента.
Фильтр: localhost#$#abort-on-property-read Object.prototype.testMethod
В данном примере рассмотрено создание типичного класса, который прогнали, например, через Babel.
X-Path
Возможно, некоторые уже сталкивались с языком запросов X-Path, но немногие знают, что его можно применять в вебе (зачастую он используется парсерами страниц). Тут отличный справочник, если кого-то заинтересовало.
В браузере также существует особое API для исполнения следующих выражений, что позволяет блокировщикам избирательнее выбирать элементы для блокировки.
Perceptual Image Hash
Еще одно интересное направление работы – это работа с изображениями, так как во многих рекламных объявлениях можно встретить одинаковые картинки с логотипом рекламной сети, по этим картинкам зачастую можно найти расположение всего объявления и целиком заблокировать.
Алгоритм примерно следующий:
Нормализуем размер картинки под общий пресет;
Разделяем картинку на I1, I2 … In не перекрывающихся блоков, где N – кол-во блоков, равных длине финальной hash bit строки;
Зашифровываем I1, … In блоки с помощью секретного ключа K в новую последовательность блоков;
Для каждого этого блока вычисляем его среднее M1….Mn, а затем вычисляем общее среднее Md = median(Mi), где I = 1…N;
Создаем 64-битный хэш на основании того, находится значение выше или ниже среднего (подробнее).
Давайте рассмотрим на примере этих двух изображений:
Img#1
Img#2
Если мы сравним 2 хэша, получившиеся из двух изображений, то увидим, что дистанция Хэмминга между этими хэшами равна 3, что означает схожесть изображений.
Часть кода фильтра hide-if-contains-image-hash из AdBlock Plus.
На этом примере мы можем видеть, что блокировщик проходится по всем картинкам и ищет среди них похожие на рекламу, что позволит найти похожую даже если по url об этом догадаться нельзя.
DNS фильтрация
Для начала напомню, что DNS позволяет нам, кроме всего прочего, по имени хоста получить IP адрес.
DNS фильтрация работает в том случае, если вы укажете в качестве DNS адресов для вашего устройства, например адреса AdGuard’a. Далее AdGuard по своему усмотрению предоставляет для обычных доменных имен их реальные IP адреса, а для рекламных – IP адреса, которые возвращают заглушки.
Минус в том, что они пропускают все или ничего, зато DNS серверы можно установить прямо на свой роутер и убрать часть рекламы со всех устройств (или получить проблемы со всеми сайтами/приложениями, которые начнут некорректно работать). Ну и конечно никто не может гарантировать, что данные ваших посещений никто не сольет.
HTTPS фильтрация
Итак, есть еще один тип блокирования, когда вы устанавливаете к себе на устройство специальное приложение (например AdGuard). И взамен получаете рутовый сертификат AdGuard к себе на устройство, который позволяет перехватывать ваш HTTPS трафик еще до того, как он попал в браузер и вырезать оттуда рекламу. (А может и не только рекламу).
Как по мне, способ очень экстремальный и экстравагантный, доверять кому-то весь свой трафик я не готов.
Нейронные сети для блокирования рекламы GCNN
Ну и конечно куда уж в 2021 году без Machine Learning в вебе. Сразу оговорюсь, что разбираюсь в теме на уровне новичка и эксперты в комментариях, надеюсь, меня если что поправят.
Итак, в качестве входных данных для нейронной сети выступает часть DOM модели исходного веб-сайта.
Например возьмем следующую простую DOM структуру.
Начнем с верхнего HTML элемента и вычислим все его соседние элементы. В последствии необходимо будет пройтись по всем элементам.
Затем нам необходимо составить вектор фич для каждого элемента. В качестве примера можно использовать любые свойства элементов. Например, мы обозначили, что элемент с типом div обозначается числом 29 и т.д. Тоже самое повторяет с названиями атрибутов у элементов, возможно, их размерами и т.д.
Затем с помощью любого подходящего алгоритма, например, вычисление среднего или поиск максимума, получаем среднее по выборке соседних векторов фич элементов.
После этого полученные значения попадают в обученную нейронную сеть, которая на входе имеет количество нейронов, соответствующее размерности вектора после получения среднего. Может иметь любое количество скрытых слоев, и на выходе иметь несколько коэффициентов, которые нам пока ни о чем не говорят.
Но конечно же, вся мощь открывается после того, как мы создадим несколько подобных слоев. Это необходимо, чтобы наша нейронная сеть ориентировалась не только на первых соседей заданного элемента, но и смотрела глубже, в зависимости от того, как мы хотим ее обучить.
На втором слое в нашем примере, будет происходить все то же самое, за исключением того, что входом для сети будут коэффициенты, полученные на первом слое.
В конце концов, мы должны получить какой-то конечный коэффициент, позволяющий нам говорить о наличие или отсутствии в данном элементе рекламы.
AdGraph
AdGraph – это такой необычный набор патчей для Chromium в движок Blink и JavaScript движок V8, которые позволяют на основе загружаемых ресурсов выстраивать граф зависимостей на основе трех слоев HTML, HTTP и JavaScript.
Общая схема работа
Затем AdGraph, с помощью натренированной нейронной сети Random Forest, классифицирует граф. В качестве исходной информации для обучения были использованы фильтры блокировки, о которых мы говорили ранее.
Подробнее можно посмотреть тут:
Вместо итогов
Пользоваться блокировщиками или нет – личное дело каждого пользователя. Про себя скажу, что не пользовался и не пользуюсь, а сталкиваюсь с этим в основном по работе в департаменте рекламных технологий.
Для всех тех, кто пользуется, считаю полезным знать и понимать как ваши инструменты работают. Для остальной части аудитории если вы занимаетесь веб-разработкой, то вы скорее всего не раз и не два столкнетесь с проблемами пользователей на ваших проектах при включенном блокировщике рекламы.
Отключаем скрипты на веб-страницах: NoScript
Помнится, в одном из многочисленных сетевых холиваров на тему «С какого языка программирования лучше всего начинать новичку?» была высказана на первый взгляд неожиданная, но, если подумать, вполне здравая мысль о том, что это может быть «несерьезный» javascript.
Если же говорить о веб-ресурсах, то javascript – одна из базовых технологий современных проектов. Он же – одно из проклятий, поскольку позволяет создавать не только многочисленные ненужные безобидные рюшечки, но и откровенно вредные и мошеннические сценарии. Справедливости ради стоит сказать, что культурные веб-мастера на серьезных сайтах стараются не злоупотреблять. Однако даже солидные, казалось бы, ресурсы нет-нет да и моргнут окном «Полайкайтенаспоскоре-е-е!», какой-нибудь дурацкой навигационной панелью или сонмом сторонних виджетов, только отвлекающих от контента. Особенно обидно, когда любимый сайт грузит кроме своих скриптов еще кучу кода со сторонних ресурсов, к которым иногда не хочешь иметь никакого отношения. Нужны средства контроля.
Отключение скриптов в Firefox
Начну с того, что инструменты отключения скриптов есть во всех популярных браузерах, отличается только степень их доступности. Разработчики Firefox решили, что такая настройка устарела и способна только испортить настроение массе пользователей, напрочь поломав многие сайты. Поэтому флажок со стандартной панели настроек убрали. Отключить скрипты теперь можно только на служебной странице about:config, где остался пункт javascript. enabled, для которого можно выставить значение false. Недостаток такого способа – радикальность: скрипты вы-
рубаются напрочь, так что многие действительно нужные и полезные сайты попросту перестают работать.
Internet Explorer позволяет включать и отключать поддержку отдельных скриптовых технологий на панели Параметры браузера > Безопасность > Другой. Конкретно javascript обозначен там как Сценарии > Активные сценарии. Следует отметить, что отключение скриптов может нарушить работу многих сайтов, к примеру если вы захотите подать объявление (http://kuplyu-v-kaliningrade.ru/catalog/) на профильном ресурсе о продаже товара, то всплывающее окошко может просто не появится.
Интересно сделана аналогичная настройка в браузере Chrome. Во-первых, соответствующая опция осталась в интерфейсе, пусть и убрали ее поглубже, в раздел Личные данные > Настройки контента > javascript. Во-вторых, там доступна не просто возможность включить/выключить динамический контент, но и собственный простенький фильтр, где можно указать список конкретных сайтов, которым вы разрешаете или запрещаете выполнять скрипты. Отличный и достаточно гибкий вариант, если вы хотите вырубить javascript только на парочке мозолящих глаза ресурсов, оставив все остальное в нормальном состоянии.