惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
H
Heimdal Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cyberwarzone
Cyberwarzone
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
Help Net Security
Help Net Security
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
S
Securelist
SecWiki News
SecWiki News
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
Know Your Adversary
Know Your Adversary
The Last Watchdog
The Last Watchdog
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
H
Hacker News: Front Page
NISL@THU
NISL@THU
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Attack and Defense Labs
Attack and Defense Labs
Security Archives - TechRepublic
Security Archives - TechRepublic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Google Online Security Blog
Google Online Security Blog
The Hacker News
The Hacker News
Cloudbric
Cloudbric
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
A
Arctic Wolf
Latest news
Latest news
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
Project Zero
Project Zero
P
Privacy International News Feed
B
Blog
云风的 BLOG
云风的 BLOG

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Ограничения Manifest V3 в расширении EasyProxy для управления прокси
martini-drinker · 2026-06-23 · via Все публикации подряд на Хабре

Простой

4 мин

192

С выходом Manifest V3 в Google Chrome большинство расширений, позволяющих управлять настройками прокси, перестали полноценно работать, а некоторые и вовсе перестали. Основным функционалом для меня (как думаю и для большинства пользователей) было автоматическое туннелирование запросов для сформированного пользователем списка хостов, а также включение прокси для отдельной вкладки (окна), не затрагивая остальные.

Изучив доступные варианты в магазине расширений Chrome, понял что подходящих вариантов практически нет. Чаще всего расширения предлагают использовать пользовательский PAC скрипт или запустить прокси для всего браузера. В первом случае постоянное редактирование скрипта при попытке добавить очередной хост выглядит малопривлекательным, во втором сильно - урезает гибкость работы в интернете. Поэтому было принято решение написания собственного минималистичного расширения с удобным управлением, без сторонних библиотек. Программирование для меня - хобби, поэтому писал код в свободное от работы время.

В силу того, что Manifest V3 ударил и по блокировщикам рекламы в том числе, решил что настало время перейти на Firefox. Особенно после того, как посмотрел документацию и понял, что Proxy API здесь намного гибче. И, как самый крупный бонус, возможность установки расширения на Android версию браузера.

Сказано - сделано. Firefox позволил реализовать все пожелания по управлению прокси. API дает доступ к сетевым запросам, показывая: запрашиваемый адрес, id вкладки, с которой пришел запрос, режим (regular, incognito) и пр. и позволяет точечно пускать трафик через прокси, в зависимости от условий. Полная панель управления получилась такой.

Controls

Controls

Чтобы хост текущей вкладки было удобно добавлять/удалять из пользовательсного списка Host list, сделал большую кнопку сверху. Простой вариант - брать хост из адресной строки не подошел, так как он становится доступным только после ответа от сервера. Если запрос “зависнет”, то пришлось бы ждать, пока он не “отвалится” по таймауту. Поэтому выручил browser.webRequest.onBeforeRequest.

По настройкам прокси все стандартно. Доступные типы: HTTP, HTTPS, SOCKS4, SOCKS5 + авторизация. Я же использую локальный SOCKS5 без авторизации.

Settings

Settings

Сам Host list реализовал как обычную таблицу с полями, но с возможностью переключения на текстовое поле, чтобы можно было разом загрузить/выгрузить большой список. Также добавил поддержку поддоменов, если основной домен не должен быть туннелирован.

Host list

Host list

В процессе написания понял, что было бы удобно получить полный список запрашиваемых хостов для конкретной вкладки и конкретного ресурса, поэтому добавил Host tracker, позволяющий добавлять/удалять адреса в Host list в своей же вкладке.

Host tracker

Host tracker

Реализация довольно простая - с помощью все того же onBeforeRequest. Но в этот раз нам нужно знать чем закончился запрос (т. е. доступен ли хост). Поэтому реализовал такую логику: если отслеживаемый хост хотя бы на один из запросов ответил кодом 200, красим поле зеленым цветом, если все запросы с ошибкой - красным, в процессе выполнения - синим.

Полный объем расширения со всеми иконками составил чуть меньше 40 кБ. Протестировал и опубликова его в Firefox ADD-ONS. Дополнение на момент написания поста собрало более 500 пользователей. Изначально даже не рассчитывал на аудиторию больше 10-15 человек. Что удивительно - большая часть установок пришлась на Android устройства, видимо там альтернатив значительно меньше. Товарищи же попросили портировать расширение для Google Chrome, потому как оказалось большая часть пользуется хромиум-подобными браузерами и осознанно обходят Firefox стороной.

Просмотрев документацию MV3 Chrome Extensions понял, что можно попрощаться с тумблером “прокси для вкладки” и прямого доступа к туннелированию запроса в зависимости от его параметров я не получу. Здесь прокси работает либо для всего браузера сразу, либо через PAC скрипт. Еще есть вариант с bypassList, который не пускает указанные адреса через прокси, но это совсем не то, что нам нужно. Также из ограничений - отсутствие авторизации для SOCKS5 (для кого-то может быть критично). Из хороших новостей Chrome API позволяет запускать разные прокси для обычного режима и режима инкогнито. Панель управления стала полегче, в отличие от версии для Firefox.

Chrome Controls

Chrome Controls

Проблему с работой Host list решил через генерирование PAC скрипта с обновлением параметров прокси для браузера после каждого добавления/изменения хоста.

Из других проблем MV3, это возможность “засыпания” расширения, которое хранит в оперативной памяти данные по хостам для всех вкладок, а также последние примененные параметры прокси. По наблюдениям приложение засыпает только во время простоя браузера, т. е. при отслеживании хостов для активных вкладок проблем не возникает. При пробуждении Host tracker будет пустым, с этим придется смириться, потому как использовать local storage самого расширения для этих целей - не самое удачное решение. С настройками прокси же проблем не возникает, после пробуждения их легко применить по необходимости.

Закончив работу над портированной версией также загрузил ее в интернет-магазин Chrome. Удивил единоразовый взнос в 5$ за возможность публикации там дополнений. Еще больше удивили сроки рассмотрения публикации. Если в Firefox все происходит в течении 15 минут, то здесь же пришлось ждать 3 дня. Внесение любых правок в уже существующий пакет также занимает не мало времени. Из положительных сторон - это возможность любого хромиум-подобного браузера установить расширение из магазина Chrome. Расширение протестировано на: Chrome, Edge и Яндекс Браузер.

В заключение скажу, что MV3 хоть и имеет заметные ограничения, но все же еще позволяет строить велосипеды, пусть и с некоторым количеством компромисов.

Ссылка на проект: github