- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Недавно обнаружил, что контент моего сайта(изображения и видео) во всю используют сторонние сайты и начал борьбу с этим явлением средствами nginx.
Для начала прописал белый список referrer для медиа-файлов:
Контент на некоторых сайтах отвалился после этой процедуры, но некоторые сайты скрывают referer. Я хотел заблокировать запросы с пустым referer, но потом подумал, что поисковые боты не смогут просканировать такой контент. У них тоже нет referer.
Есть интересное решение для защиты видео ngx_http_secure_link_module, но оно имеет свои недостатки. Во-первых, потребуется изменить формат ссылки на видео, что означает вмешательство в код плагина CMS, во-вторых, совершенно непонятно как с такой защитой предлагать свою видео в сервис яндекс.видео. Ведь ссылки в микроразметке будут временными и привязанными к определенным ip-адресам.
Заголовок X-Frame-Options SAMEORIGIN тоже не помог, потому что видео открывается не во фрейме, а в обычном теге video без всяких оберток.
Я также пробовал использовать заголовки, которые должны были решить все проблемы
Но браузер преспокойно грузит мои видео на стороннем сайте не обращая внимания на эти заголовки. Почему?
Я хотел заблокировать запросы с пустым referer, но потом подумал, что поисковые боты не смогут просканировать такой контент. У них тоже нет referer.
Так разрешите для поисковых ботов (с соотв. user agent и соотв. ip-подсетей).
CORS не действует для видео и картинок.
Используйте геоайпи + map
вот немного примеров, там несложно все подогнать под ваши нужды
default 0;
# ip server
тут-айпи-вашего-сервера;
# боты google
64.68.80.0/21 1;
64.233.0.0/16 1;
66.102.0.0/20 1;
72.14.192.0/18 1;
209.85.128.0/17 1;
216.239.32.0/19 1;
66.249.0.0/16 1;
104.154.0.0/16 1;
# боты yandex
77.88.0.0/18 1;
87.250.224.0/19 1;
84.201.158.0/24 1;
93.158.0.0/16 1;
95.108.128.0/17 1;
213.180.192.0/19 1;
141.8.0.0/16 1;
130.193.0.0/16 1;
5.255.0.0/16 1;
178.154.0.0/16 1;
37.9.0.0/16 1;
37.140.0.0/16 1;
5.45.207.0/24 1;
# mail.ru
217.69.0.0/16 1;
94.100.0.0/16 1;
# bingbot-msn
40.77.0.0/16 1;
207.46.0.0/16 1;
65.52.0.0/14 1;
157.55.0.0/16 1;
131.253.0.0/16 1;
# Yahoo
68.180.0.0/16 1;
67.195.0.0/16 1;
69.147.64.0/18 1;
72.30.0.0/16 1;
74.6.0.0/16 1;
63.250.0.0/16 1;
98.139.0.0/16 1;
206.190.34.0/24 1;
# sputnik
5.143.0.0/16 1;
# opera-mini.net
82.145.0.0/16 1;
107.167.96.0/19 1;
185.26.180.0/23 1;
37.228.104.0/22 1;
37.228.111.128/26 1;
141.0.0.0/16 1;
# TelegramBot
149.154.167.0/24 1;
# Applebot
17.142.0.0/24 1;
}
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code:$whitelist:$server_protocol $allowed_country {
default yes;
"DE:0:HTTP/1.1" no;
"NL:0:HTTP/1.1" no;
"FR:0:HTTP/1.1" no;
"CA:0:HTTP/1.1" no;
"US:0:HTTP/1.1" no;
"GB:0:HTTP/1.1" no;
}
map "$whitelist:$server_protocol" $limit1 {
default "";
"1:HTTP/1.0" "";
"1:HTTP/1.1" "";
"1:HTTP/2.0" "";
"0:HTTP/1.1" "$binary_remote_addr";
}
Я всё-таки решил изменить одну строку в плагине и включить secure_link с игнором проверки для referer яндекса. Но никак не могу корректно настроить nginx. Он отдает мне 403-ий статус, то есть проверка соответствия хешей выполняется неудачно.
Можете подсказать, как увидеть глазами сравниваемые строки, чтобы их изучить? Получаю хеш из nginx командой
И вижу, что он идентичен тому, что в ссылке. Почему же отклик 403?
karpo518, Я клиенту делал когда-то подобное, но так как это было давно и с php я уже не дружу, то просто приведу рабочий пример с архива.
PHP
NGINX
P.S: Хеш nginx можно вывести через "return 200 $secure_link;"
neoks, спасибо за ответ. Обратите внимание на свой код. Вы сравниваете $secure_link с пустой строкой и с 0. В этой переменной не может лежать хеш nginx. В ней лежит результат сравнения хешей.
Кроме того, указанным вами способом нельзя вывести строку при запросе media-файла. Заголовки mp4 не позволяют браузеру показать строку. Он выводит пустой видео плеер.
karpo518, Так и нужно, если верить документации http://nginx.org/ru/docs/http/ngx_http_secure_link_module.html
В моем примере файл отдается по другому url, "/video/md5/expires/piknik.mp4" вместо "/video/piknik.mp4" - (у заказчика была цель именно таких ссылок).
В вашем случаи правильные настройки выглядят так
PHP
Ссылки соответственно идут так "/Natalia.mp4?args=s1&md5=YvLrbogLjUmjx1KOBIBGEQ&expires=1528733288"
P.S: Не забудьте указать рандомый текст вместо "secret".
neoks, мой изначальный вопрос
Задаю его неспроста. Как вы думаете, если secure_link_md5 "test" приводит к 403-ему отклику, то ваш secure_link_md5 "$secure_link_expires$uri$remote_addr secret"; как-то улучшит ситуацию?
Я предоставил вам тестовый пример, который объясняет, что в модуле проблема со сравнением строк на самом примитивном уровне. Хеш от "test" не совпадает. Зачем пробовать более сложные варианты, если даже такой простой не работает.
Можете подсказать, как увидеть глазами сравниваемые строки, чтобы их изучить?
1) secure_link_md5 вывести нельзя, вы можете вывести только переменные которые туда задаете, а потом привести в md5, как выводить переменные я уже писал выше.
2) Что-бы посмотреть ответ в браузере, просто используйте "view-source:http://domain.ua/file.mp4"
Как вы думаете, если secure_link_md5 "test" приводит к 403-ему отклику, то ваш secure_link_md5 "$secure_link_expires$uri$remote_addr secret"; как-то улучшит ситуацию?
Да, хотя-бы потому что $secure_link_expires является обязательным полем в secure_link_md5.
Я предоставил вам тестовый пример, который объясняет, что в модуле проблема со сравнением строк на самом примитивном уровне.
Проблема в неправильном secure_link_md5, а точнее в неправильной комбинации secure_link и secure_link_md5.
Зачем пробовать более сложные варианты, если даже такой простой не работает.
В последнем посте я дал вам полностью рабочий конфиг nginx и php (из вашего примера).
Гораздо веселее не запрещать хотлинк, а подсовывать другой контент.
neoks, я только что попробовал ваш вариант как есть и быстро всё откатил. 403-й отклик для всех видео. Для чистоты эксперимента отключил VPN, хотя вообще влиять не должно. Как продебажить проблему?
Изначально я использовал пример отсюда https://gist.github.com/bftanase/cbae1f9fc69bb4f9cb86, поэтому и к вашему скептически отнесся. Не работает, как ни крути