Paywall

Приложение Chrome для управления ими всеми (Paywalls): часть 1

Вы всегда можете заплатить

Они говорили нам, что Интернет сделает нас свободными, что у нас будут знания, доступные нашему браузеру, безграничные возможности и все такое ... пока вы не достигнете (платной) стены:

Когда вы найдете это сообщение, у вас будет 2 варианта: вы платите членский взнос или можете использовать все свои знания, чтобы обойти это сообщение ¹… Пойдем по этому пути.

Существуют различные методы контроля платного доступа:

  • По cookie (сегодня мы остановимся на этом)
  • Путем перенаправления на другой сайт
  • Скрывая контент с помощью JavaScript

Paywall через cookie

Medium использует файлы cookie для отслеживания нас, поэтому первым вариантом будет удаление файла cookie, который запускает этот платный доступ (кстати, поле sid в среднем файле cookie). Проблема в том, что тогда мне придется снова войти в систему, потому что, возможно, после прочтения я хочу добавить его в закладки, чтобы подписаться на автора (моя проблема связана с платным доступом, а не с контентом).

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

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

Если вам нужно краткое руководство о том, как сделать расширение по умолчанию, см. Это руководство Google, я сосредоточусь на обходе платного доступа, загрузите приложение-шаблон и давайте начнем с этого.

Расширение

Наше приложение состоит в основном из:

  • manifest.json содержит разрешения и объявляет другие файлы
  • background.js для сообщения о расширении.
  • hidden.js обнаруживает предупреждение о платном доступе и запускает частное окно.
  • display.js мы будем использовать после этого в этой серии

Давайте погрузимся в манифест:

{
  "name": "Gandalf",
  "version": "1.0",
  "description": "You shall not redirect",
  "manifest_version": 2,
  "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'",
  "background": {
   "scripts": ["app/background.js"] <---- 1
  },
  "permissions": [ <---- 2
    "webRequest",
    "webRequestBlocking",
    "tabs",
    "<all_urls>"
  ],
  "browser_action": { <---- 3 
      "default_title": "You shall not pass",   
      "default_popup": "popup.html"
  },
  "icons": {
    "16": "logo-small.png",
    "48": "logo-small.png",
    "128": "logo-small.png"
  },
  "content_scripts": [
    {
      "matches": ["*://*.uy/*"],
      "js": ["app/display.js"] 
    },
    {
      "matches": ["<all_urls>"],
      "js": ["app/hidden.js"] <---- 4
    }
  ]
}
  1. Ссылка на скрипт, содержащий логику расширения, добавление слушателей и определение некоторых констант.
  2. Расширению требуются некоторые разрешения, webRequest и webRequestBlocking для блокировки запроса (для следующей главы), вкладки для создания нового окна или вкладки. ‹All_urls› позволяет нам работать на всех веб-сайтах, вы можете изменить это, если вам нужны только определенные сайты.
  3. Просто название для нашего расширения, а popup.html - это то, что мы отображаем, когда кто-то щелкает значок расширения.
  4. Скрипты контента могут изменять контент сайта, этот применяется ко всем URL-адресам и вызывает hidden.js.

Итак, мы определили, что для всех URL-адресов будет выполняться hidden.js. Этот сценарий может получить доступ к основной части сайта, проверить наличие платного доступа и отправить сообщение (внутренний обмен сообщениями - это способ взаимодействия наших сценариев содержимого с расширением).

Для среднего мы можем использовать идентификатор paywall-background-color, чтобы проверить, нужно ли нам открывать в режиме инкогнито; теперь пора проверить фоновый скрипт:

Теперь, когда у нас есть готовое расширение, мы можем загрузить его в браузер и начать читать без остановки.

Следующими в серии мы попробуем обыграть платный доступ с редиректом.

Ресурсы

[1] Все, что делает расширение, - это устраняет некоторые затруднения с пользователем (который всегда может скопировать ссылку, войти в приватный режим и вставить ее), ни в коем случае мы не взламываем или изменяем поведение среды.