Почему Safari помечает Flask-сайт как мошеннический и как это исправить

    Владельцы сайтов на Flask нередко сталкиваются с ситуацией, когда браузер Safari отображает красную табличку с предупреждением о возможном мошенничестве. При этом в Chrome, Firefox или Edge такой проблемы нет. Разберём причины и способы решения.

    Причины появления предупреждения в Safari

    Safari использует собственную систему безопасности - Safebrowsing (Google Safe Browsing) и внутренние алгоритмы Apple. Красная табличка появляется, если сайт не соответствует критериям безопасности браузера. Наиболее частые причины для Flask-сайтов:

    • Отсутствие SSL-сертификата - сайт работает по HTTP, а не HTTPS. Safari строго предупреждает о незащищённом соединении.
    • Некорректные HTTP-заголовки - отсутствие заголовков безопасности (например, X-Content-Type-Options, Content-Security-Policy).
    • Подозрительный контент - ссылки на внешние ресурсы без HTTPS, встроенные скрипты с недоверенных доменов.
    • Низкий рейтинг домена - новый домен или IP-адрес, который ранее использовался для спама.
    • Ошибки в конфигурации Flask - например, включённый режим отладки (debug=True) на продакшене.

    Пошаговое решение проблемы

    1. Установите SSL-сертификат

    Переведите сайт на HTTPS. Используйте Let's Encrypt (бесплатно) или платный сертификат. Для Flask настройте перенаправление с HTTP на HTTPS через flask-talisman или на уровне Nginx/Apache.

    2. Добавьте заголовки безопасности

    Установите и настройте библиотеку flask-talisman:

    from flask_talisman import Talisman
    Talisman(app, content_security_policy={
        'default-src': ["'self'"],
        'img-src': ["'self'", 'https:'],
    })

    Это добавит заголовки X-Content-Type-Options: nosniff, X-Frame-Options: DENY и другие.

    3. Проверьте контент на подозрительные элементы

    Убедитесь, что все внешние ссылки и ресурсы (шрифты, скрипты, изображения) загружаются по HTTPS. Избегайте iframe с недоверенных доменов. Используйте инструмент Mobile-Friendly Test от Google для проверки.

    4. Отключите режим отладки

    В продакшене всегда устанавливайте debug=False и используйте переменные окружения для секретных ключей.

    Дополнительные меры

    • Проверьте репутацию домена - используйте сервисы VirusTotal или Google Safe Browsing.
    • Отправьте сайт на проверку в Apple - хотя это может занять время, через форму reportaproblem.apple.com можно ускорить процесс.
    • Установите flask-sitemap для генерации sitemap и улучшения индексации.

    Что делать, если ничего не помогает

    Если после всех шагов Safari продолжает показывать предупреждение, попробуйте временно сменить хостинг или IP-адрес. Иногда проблема связана с блокировкой подсети. Также можно добавить сайт в исключения через Safari → Настройки → Конфиденциальность → Безопасность → Отключить защиту от мошеннических сайтов (только для тестирования).

    Часто задаваемые вопросы