https://github.com/DeadLarsen/SafeLink
SafeLink — Расширение для безопасного интернета
🛡️ SafeLink — это расширение для Chrome (Opera, Yandex), которое защищает пользователей от нежелательного контента, блокируя доступ к опасным сайтам и фильтруя поисковые запросы с запрещенными фразами.
Установка
Настройка -> Расширения -> Управление расширениями -> Загрузить распакованное расширение. (Папка в которой лежит код)
🎯 Основные возможности
🔒 Блокировка сайтов
- Автоматическая блокировка опасных доменов
- Пользовательские списки заблокированных и разрешенных сайтов
- Умная проверка поддоменов и URL-путей
- Временный обход для однократного доступа
🔍 Фильтрация поисковых запросов
- База фраз Минюста РФ — автоматическое обновление с официального источника
- Система исключений — предустановленные и пользовательские
- Интеллектуальная проверка — точное и частичное совпадение
- Гибкие настройки чувствительности фильтра
⚙️ Управление и настройки
- Удобная панель управления в расширении
- Детальные статистики и отчеты
- Экспорт/импорт настроек
- Автоматическая синхронизация списков
🚀 Установка
Установка из исходного кода
- Скачайте или клонируйте репозиторий:
git clone https://github.com/deadlarsen/SafeLink.git
cd SafeLink
- Откройте Chrome и перейдите в
chrome://extensions/ - Включите «Режим разработчика» в правом верхнем углу
- Нажмите «Загрузить распакованное расширение»
- Выберите папку с проектом SafeLink
📋 Структура проекта
SafeLink/
├── manifest.json # Манифест расширения
├── background.js # Основная логика (Service Worker)
├── content.js # Скрипт для веб-страниц
├── popup.html # Интерфейс всплывающего окна
├── popup.js # Логика всплывающего окна
├── popup.css # Стили всплывающего окна
├── options.html # Страница настроек
├── options.js # Логика настроек
├── options.css # Стили настроек
├── warning-extension.html # Страница предупреждения о сайте
├── warning-extension.js # Логика предупреждения о сайте
├── warning-phrase.html # Страница предупреждения о фразе
├── warning-phrase.js # Логика предупреждения о фразе
├── exportfsm.csv # База запрещенных фраз (Минюст РФ)
├── phrases-exceptions.json # Список исключений
└── icons/ # Иконки расширения
├── icon16.png
├── icon48.png
└── icon128.png
🔧 Основные компоненты
Background Script (background.js)
- SafeLinkCore — основной класс с логикой блокировки
- Проверка URL и фраз на соответствие черным спискам
- Управление списками сайтов и исключений
- API для взаимодействия с другими компонентами
Content Script (content.js)
- Подсветка опасных ссылок на веб-страницах
- Перехват кликов по заблокированным ссылкам
- Динамическое отслеживание изменений DOM
Popup (popup.html/js)
- Быстрое управление защитой
- Статистика блокировок за сессию
- Переключение режимов работы
Options (options.html/js)
- Полная панель управления настройками
- Управление списками сайтов и исключений
- Обновление базы фраз с официального источника
- Экспорт/импорт конфигурации
📊 База данных Минюста РФ
Расширение использует официальную базу запрещенных материалов:
- Источник: https://minjust.gov.ru/uploaded/files/exportfsm.csv
- Обновление: Автоматическое с ограничением по времени (5 сек)
- Кодировка: Windows-1251 с автоматическим преобразованием
- Обработка: Интеллектуальное извлечение фраз из кавычек
⚙️ Настройки
Режимы защиты
- Включена — полная защита активна
- Отключена — защита отключена
Чувствительность фильтра
- Строгий — только точные совпадения
- Нормальный — точные + частичные совпадения
- Свободный — максимальная чувствительность
Списки сайтов
- Заблокированные сайты — домены и URL для блокировки
- Разрешенные сайты — исключения из блокировки
- Популярные сайты — автоматическое добавление социальных сетей
Исключения фраз
- Предустановленные — общие слова (Видео, Текст, Книга, etc.)
- Пользовательские — добавленные пользователем
- Управление — добавление, удаление, поиск, сортировка
🛠️ Разработка
Требования
- Chrome 88+ (Manifest V3)
- Права:
storage,activeTab,tabs,webNavigation,scripting
Отладка
- Откройте
chrome://extensions/ - Найдите SafeLink → Детали
- Проверить представления →
background.html(для логов Service Worker) - Проверить представления →
options.html(для логов настроек)
Структура данных в Chrome Storage
chrome.storage.local = {
// Настройки
'safelink_settings': { blockMode: 'warn', phraseBlockMode: 'warn', markLinks: true },
// Списки сайтов
'custom_blocked_sites': ['example.com', 'bad-site.ru'],
'custom_allowed_sites': ['vk.com', 'youtube.com'],
// Фразы и исключения
'safelink_minjust_phrases': ['phrase1', 'phrase2'],
'safelink_user_exceptions': ['весть', 'история'],
// Метаданные
'safelink_minjust_timestamp': 1706123456789,
'safelink_csv_updated': 'base64encodedCSV',
'safelink_default_sites_initialized': true
}
🔒 Безопасность
Принципы безопасности
- Локальное хранение всех данных (без передачи на внешние серверы)
- Ограничение API запросов (5 секунд между обновлениями)
- Валидация входных данных на всех уровнях
- Разделение прав доступа между компонентами
Обработка данных
- Кодировка: Автоматическое преобразование Windows-1251 → UTF-8
- Санитизация: Очистка HTML и специальных символов
- Нормализация: Приведение к нижнему регистру для сравнения
📝 Логирование
Все компоненты ведут подробные логи с префиксами:
🛡️ SafeLink Core:— основная логика🔍 SafeLink Content:— работа на веб-страницах⚙️ SafeLink Options:— интерфейс настроек🪟 SafeLink Popup:— всплывающее окно
🤝 Вклад в проект
- Fork репозитория
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
📄 Лицензия
Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.
📞 Поддержка
- GitHub Issues: Создать issue
🏗️ Статус разработки
- ✅ MVP — Основная функциональность
- ✅ База Минюста РФ — Интеграция с официальным источником
- ✅ Система исключений — Предустановленные и пользовательские
- ✅ Управление списками — Полный интерфейс управления
- 🔄 В разработке — Улучшение производительности
- 📋 Планируется — Мобильная версия
SafeLink — ваш надежный помощник для безопасного интернета! 🛡️
