Що використовувати вебмайстру

579
  • Що таке хотлинки і як їх заборонити в Apache
  • Використовуємо SSH-клієнт PuTTY і редактор GNU Nano
  • Прописуємо заборона хотлінкінга для nginx
  • Здрастуйте, шановні читачі блогу . Дивіться, якщо ви скопіюєте посилання на будь-яку картинку, що живе на даному ресурсі, і вставте її в атрибут src тега img на своєму сайті, то дане зображення з успіхом буде, подгрузившись з мого сервера, а сам процес буде називатися «хотлинкинг». Добре це чи погано для вас і для мене? Питання неоднозначний і вимагає індивідуального підходу.

    Що використовувати вебмайстру

    Що таке хотлинки і як їх заборонити в Apache через .htaccess

    Відразу обмовлюся, що вибирати другий варіант зовсім не обов’язково, але іноді виникають ситуації, коли без заборони використання хотлинков (прямих посилань на фото або інші медіафайли, які живуть на вашому сервері) не обійтися. Наприклад, коли подібних посилань проставлено багато і ваш хостинг не витримує створюваної навантаження.

    Ну, або коли ваш контент розтягують по частинах і ніякі вмовляння на тему захисту авторських прав та нехтування копірайту не діють. Міра ця не стовідсотково ефективна і не однозначна, бо ваші зображення, вставлені у статтях на чужих сайтах, можуть враховуватися пошуковими системами, як зворотні посилання (знову ж таки не факт, що враховуються).

    Але це добре, коли у вас взяли тільки графіку, а коли поцупили всю публікацію, то тут вже не до сентиментів. Захистити свої унікальні тексти від копіпаста на сто відсотків не реально при будь-якому розкладі. Способів багато, але результат все одно отримує не ахті який великий.

    Можна намагатися шукати хуліганів за допомогою сервісів або програм антиплагіат і впливати на них словесно, але вони бувають дуже впертими, а часто і ледачими. Тому відключення використання hotlink у налаштуваннях Apache або nginx може бути одним із способів боротьби і зниження числа копій вашого ресурсу на просторах інтернету.

    Для я не використовую захист від хотлинков, але ось для іншого мого проекту така необхідність нещодавно назріла. Той ресурс має новинний характер з безліччю ілюстрацій. Тексти там унікальні і основним джерелом монетизації є продаж вічних посилань (в ГГЛ, РотаПосте і ГетГудЛинксе) і розміщення статей (в Миралинксе, а останнім часом і в Вебартексе). Все інше просто не працює.

    Однак копіпастери дуже оперативно тирять тексти, а оптимізатори, посилання яких розміщуються на цьому сайті, дуже часто викочують претензії, що тексти де не унікальні, бо в індекс потрапили вже і копії, і оригінал. Практично всі скопійовані статті подгружают графіком з мого сервера, тому і виникла думка погратися з Hotlink.

    Заборонити підвантаження різних статичних даних з сервера за прямими посиланнями зовсім не складно, якщо він працює під управлінням Apache. В цьому випадку можна використовувати спеціальні файлик віддаленого управління сервером, що всі ви напевно знаєте і який називається .htaccess (із крапкою на початку).

    Файлик воістину чудовий, бо вам достатньо буде підключитися до сайту через FTP клієнт і додати в нього кілька рядків (попередньо скопіювавши його в первісному вигляді до себе на комп’ютер, бо форс мажор приходить в самий не підходящий момент).

    Живе він в самому корені вашого сайту (зазвичай коренем є або папку PUBLIC_HTML, або HTDOCS). Якщо його не видно, то включіть в файлзиле на вкладці «Сервер» примусове відображення прихованих файлів.

    Що використовувати вебмайструЩо використовувати вебмайстру

    Якщо його немає, то створіть звичайний текстовий файлик у себе на комп’ютері, змініть його назву на необхідну, зішкребіть розширення і кидайте його по Фтп в корінь свого сайту.

    Чим ще чудовий .htaccess, так це тим, що його можна прописати в будь-якій папці і він буде поширюватися лише на ті файли і директорії, які в ній лежать. Якщо виникне суперечність між директивами в верхньому .htaccess і внутрішньому, то переможе останній. Але це так, для загального відомості.

    Щоб заборонити хотлинки, досить додати в .htaccess подібну конструкцію цієї (обов’язково зробіть бекап вмісту цього файлу):

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?vash-site.ru [NC]
    RewriteRule \.(jpg|jpeg|png|gif)$ — [NC,F,L]

    Залишиться лише додати замість vash-site.ru ваш домен, а для всіх інших Hotlinking буде під забороною.

    Якщо ви хочете все ж віддавати зі свого сервера окремі графічні файли, наприклад, файл банера для вставки на інших проекту або чого ще (в розташованому нижче прикладі це banner.gif), а так само хочете, щоб всі хулігани викрав ваш контенту про це жорстоко пошкодували (побачивши замість різних картинок одну і ту ж заглушку chtobtytakzhil.gif з докладним викладом усього того, що ви про них думаєте), то підійде такий варіант:

    RewriteCond %{HTTP_REFERER} !^http://www\.vash-site\.ru/ [NC]
    RewriteCond %{REQUEST_URI} !banner\.gif$ [NC]
    RewriteCond %{REQUEST_URI} !chtobtytakzhil\.gif$ [NC]
    RewriteRule \.(.jpe?g|gif|bmp|png)$ http://www\.vash-site\.com/images/chtobtytakzhil\.gif [L]

    Однак, такий код має істотний недолік, який полягає в тому, що зображення реально будуть подгружаться тільки на вашому сайті, а на всіх інших (включаючи фидбернет, розсилки в сабскрайбе і інші подібні сервіси, де завантаження ваших картинок буде вельми бажана) їх не буде.

    Тому сміливо додаємо всі ті домени, де ви хотіли б мати можливість споглядати свою графіку подгруженную за хотлинку. Код заборони hotlink в результаті може виглядати так:

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?vash-site.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yandex.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?subscribe.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?feedburner.com[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mail.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?poisk.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?rambler.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?nigma.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?ask.com [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?qip.ru[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?ukr.net[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?conduit.com[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tut.by [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?bing.com[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?webalta.ru[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yahoo.com[NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?conduit.com [NC]
    RewriteRule \.(jpg|jpeg|png|gif|mp.3)$ — [NC,F,L]

    Існують і альтернативні варіанти, які ви можете нагуглити, але головне, щоб працювало. Перевірити можна, наприклад, відкривши свою RSS-стрічку на Фідбернере і не побачити там картинок.

    Використовуємо SSH-клієнт PuTTY і редактор GNU Nano

    У мене, на жаль, всі описані вище способи боротьби з Хотлинкингом не спрацювали з причини того, що окрім Apache на моєму сервері встановлений ще і nginx, тому все написане .htaccess для роботи з медіа файлами просто ігнорується. Є вихід з цієї ситуації, але для мене він виявився досить-таки нервозатратным, бо довелося підключатися до сервера по SSH з допомогою PuTTY і редагувати вміст файлу конфігурації nginx.

    Дізнатися про те, що у вас встановлено nginx, можна різними способами (від хостера, наприклад), але є і такий спосіб, який дозволить це визначити і для сторонніх сайтів. Я кажу про плагіні для Гугл Хрому під назвою Wappalyzer:

    Що використовувати вебмайструЩо використовувати вебмайстру

    Звучить страхітливо, а на ділі виглядає ще страшніше, але в кінцевому підсумку завдання заборони Hotlink в nginx мені вдалося вирішити. Природно, що рішення вже було — головною проблемою було втілити його в життя, бо на сайтах сисадмінів написано все настільки коротко і стисло, що у мене просто не вистачало духу кинутися в безодню і почати у всьому цьому досконально розбиратися.

    Увага! Все, що Ви робите на своєму сервері, Ви робите тільки на свій власний страх і ризик. Тому ніяких претензій на тему «ось Ви мене навчили, а тепер нічого не працює» прийматися до розгляду не будуть.

    Спасибі хлопцям з техпідтримки мого хостингу, які докладно пояснили що і як потрібно робити, показали як потрібно модифікувати код файлу конфігурації nginx і терпляче відповідали на мої ламерские питання. Загалом-то, цю публікацію я пишу і для себе теж, щоб потім було простіше згадати і повторити блокування хотлинков при необхідності.

    Отже, спочатку потрібно підключитися до сервера по протоколу SSH (дуже безпечний тип віддаленого управління ОС, при якому всі передані дані зашифровані, тим самим зменшуючи ймовірність їх перехоплення).

    За аналогією з ФТП мають місце бути SSH-клієнти. Особисто я використовував PUTTY. Працює ця програма без інсталяції — досить буде просто розпакувати архів і відкрити файл \PuTTY-0.63-RU-12\putty.org.ru\PuTTY\PuTTY.exe.

    У діалоговому вікні вам слід ввести IP-адресу сервера і натиснути кнопку «З’єднатися»:

    Що використовувати вебмайструЩо використовувати вебмайстру

    Дізнатися IP-адресу можна в онлайн сервісах наведених по посиланню, але простіше зайти в панель управління свого хостера, ну або спробувати їх техпідтримку. У мене хостинг називається Іnfobox і панель керування моїм хмарних віртуальним виділеним сервером дозволяє отримати цю інформацію на вкладці «Керування VPS»:

    Що використовувати вебмайструЩо використовувати вебмайстру

    Там же, до речі, вказаний логін та пароль для доступу до цього VPS по протоколу SSH. Куди їх вводити?

    Ну, після того, як ви натиснули на кнопку «З’єднатися» у вікні програми PuTTY, то ваша уява відразу ж потрясе чорний екран аля «командний рядок в Віндовс».

    Що використовувати вебмайструЩо використовувати вебмайстру

    Спочатку потрібно ввести логін. Можна його набити на клавіатурі, а можна скопіювати в буфер обміну, а потім у цьому чорному вікні клацнути правою кнопкою миші і він вставится відразу за зеленим курсором. Тиснете на Ентер.

    Що використовувати вебмайструЩо використовувати вебмайстру

    Потім з’явилася в новому рядку вставляєте описаних трохи вище способом пароль, попередньо скопійований у буфер обміну. Його видно не буде, так що сміливо жмакаете по введенню на клавіатурі. Якщо рядок запрошуюча ввести пароль з’явилася знову, то знову тисніть на праву кнопку мишки (у мене з першого разу не завжди спрацьовувало).

    Після того, як пароль буде прийнятий, ви побачите щось подібне:

    Що використовувати вебмайструЩо використовувати вебмайстру

    Тепер нам потрібно буде відкрити файл конфігурації nginx в GNU nano (консольному текстовому редакторі). Для цього потрібно ввести наступну команду (можна скопіювати її в буфер обміну і вставити кліком по правій кнопці миші):

    nano /etc/nginx/nginx2.conf

    Тиснете на ентер. Відкривайте чорне вікно на весь екран і насолоджуйтеся видом.

    Власне, нам потрібний фрагмент коду, де згадується ваш сайту (його домен). На жаль, управління у редакторі GNU nano зовсім не інтуїтивно зрозуміле для завзятого користувача кватирок. Тому для початку освойтесь у списку гарячих клавіш, які дозволять перегортати екрани, копіювати і вставляти, зберігати і здійснювати вихід з редактора.

    У самому низу вікна буде список найбільш часто використовуваних комбінацій, але ось зрозуміти, що означає утримання клавіші Ctrl, мені вдалося не відразу (воно й зрозуміло — нуб). Звичайний копіпаст тут не працює (точніше копальні працює, а паст — ні) і потрібно звертати увагу на те, де знаходиться зелений курсор, бо він не переміщається автоматично туди, куди ви клікнули мишею, а за замовчуванням знаходиться в самому верху коду.

    Що використовувати вебмайструЩо використовувати вебмайстру

    Рухати його вгору і вниз, а також вправо і вліво по рядках, можна стрілками на клавіатурі. Для видалення також використовуються стандартні кнопки «Справ» і «Бэкспейс». І нехай вас не вводить в оману розташована праворуч смуга прокрутки — вона зовсім не відображає довжину всього тексту (коду).

    Власне, я не знав як скопіювати код цього конфігураційного файлу на випадок, якщо вийде форс мажор, і просто виділив все миша і копирнул в буфер, а потім вставив його у спеціально створений в Нотепаде++ файлик. Але як потім виявилося, частина коду знаходилася на другому екрані, який мишею прокрутити не виходить. Ось засідка-то.

    Прописуємо заборона хотлінкінга для nginx

    Як я вже сказав, наше завдання знайти в цьому файлі згадка вашого домену, щось на зразок цього «server_name vash-site.ru». В моєму випадку цю ділянку коду розташовувався на другому екрані і виглядав приблизно так:

    server {
    server_name vash-site.ru www.vash-site.ru;
    listen 109.120.169.57;
    set $root_path /var/www/vash-site.ru;
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    root $root_path;
    error_page 404 = @fallback;
    }

    Тепер давайте подивимося, власне, на сам код захисту від hotlink, який нам слід хитрим чином сюди додати. Пам’ятаєте, як у старих дитячих журналах були задачки на тему «знайди десять відмінностей»? Ось і я наведу для наочності цей же фрагмент коду, але вже з блокуванням хотлинков:

    server {
    server_name vash-site.ru www.vash-site.ru;
    listen 109.120.169.57;
    set $root_path /var/www/vash-site.ru;
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    root $root_path;
    valid_referers none blocked mirvkartinkah.ru *.mirvkartinkah.ru;
    if ($invalid_referer) {
    return 403;
    }
    error_page 404 = @fallback;
    }

    Знайшли відмінності? Виходить, що між рядками root $root_path; і error_page 404 = @fallback; ми додали фрагмент для блокування Hotlinking:

    valid_referers none blocked mirvkartinkah.ru *.mirvkartinkah.ru;
    if ($invalid_referer) {
    return 403;
    }

    Після цього всім сайтам, які не є вашими замість графіки та інших статичних файлів форматів jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf, буде віддаватися помилка 403 (доступ заборонений), а браузер буде відображати порожню картинку.

    В принципі, можна було б використовувати і більш розширений варіант коду, щоб передати на картинці-заглушці всю гаму ваших емоцій по відношенню до копипастерам:

    location ~* ^.+\.(jpg|jpeg|gif|png)$ {
    root /path/to/root;
    valid_referers none blocked server_names ~\.vash-site\. ~\.vash-site2\.;
    if ($invalid_referer) {
    rewrite ^ /chtobtytakzhil.gif last;
    }
    }
    location /chtobtytakzhil.gif {
    root /path/to/chtobtytakzhil;
    }

    Тут показано, що можна блокувати хотлинкинг тільки, наприклад, для графічних файлів jpg|jpeg|gif|png, а так само те, що сайтів, де блокування хотлинка діяти не буде, можна додати кілька (у рядку valid_referers none blocked server_names). Як я зрозумів, заглушка chtobtytakzhil.gif повинна буде валятися в корені сайту.

    Якщо, наприклад, у вас все ж є зображення, які ви хочете дозволити тягнути з вашого сервера (наприклад, кнопку «Я люблю vash-site.ru» в різних колірних комбінаціях), то просто додайте під наведеним кодом ще таку конструкцію:

    location ~* ^.+\.(jpg|jpeg|gif|png)$ {
    root /path/to/root/knopki;
    }

    У цьому випадку мається на увазі, що вся графіка, для якої не варто забороняти hotlink, повинна лежати в папці knopki, яка в свою чергу повинна жити в корені сайту.

    Особисто я нічого вирішувати не став, та й заглушку вважаю непотрібним выпендрежем, бо її підвантаження все одно може створювати додаткове навантаження на сервер. Досить буде і 403 помилки. Ну, а ось додаткові сайти в «білий список хотлинка» (рядок valid_referers) я б додав, щоб вийшло приблизно так:

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
    root $root_path;
    valid_referers none blocked server_names ~(vash-site|yandex|google|yahoo|bing|facebook|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing);
    if ($invalid_referer) {
    return 403;
    }
    error_page 404 = @fallback;
    }

    Що використовувати вебмайструЩо використовувати вебмайстру

    Реферер — це вказівка в http-запиті джерела, з якого він надійшов. Допустив, сайт копіпаста хоче довантажити до собі картинку з вашого сервера, але при цьому в заголовку запиту буде вказано реферер у вигляді адреси сторінки сайту копіпаста, куди він її хоче вставити (в сенсі картинку).

    Завдяки написаному регулярному виразу, всі сайти, Урлах яких ім’я сервера збігається зі словами зазначеними через вертикальну риску, отримають можливість обійти блокування хотлинков. Що нам і потрібно було реалізувати. Вітаю.

    Залишилося тільки вставити цей код у консольний редактор Nano. Як відкривати на редагування конфігураційний файлик nginx ми вже розглянули трохи вище. Тепер стрілочками підганяєте зелений курсор до початку того фрагмента коду, який потрібно замінити.

    З допомогою Del на клавіатурі перете його, а потім копіюєте в буфер обміну їх Нотепеда вже новий фрагмент з кодом блокування хотлинков і списком реферов, на яких ця блокування поширюватися не буде.

    Переходьте в Nano і натискаєте клавіші Shift+Insert. Даний фрагмент вставится відразу за курсором, але все одно уважно перегляньте код на предмет що закралася помилки (сім разів відміряй).

    Ось коли переконаєтеся, що все в ажурі, то жмакаете перебуваючи в Nano на Crtl+O (це латинська літера O, а не нуль). Погоджуєтеся із збереженням зроблених змін все в той же самий файлик nginx2.conf і тиснете на Enter.

    Що використовувати вебмайструЩо використовувати вебмайстру

    Після цього вийдіть з редактора Nano, натиснувши поєднання клавіш Ctrl+X. відкрилася В командному рядку просите (ввічливо) nginx перевантажитися, ввівши таку команду та натиснувши Enter:

    /etc/init.d/nginx restart

    Що використовувати вебмайструЩо використовувати вебмайстру

    От і все. Йдете на сайт і перевірити коректність завантаження картинок. Потім йдете на сайт копіпаста (якщо знаєте такого) і перевіряєте роботу блокування хотлинков на його ресурсі — графіка з вашого сервера подгружаться не має.

    Ну, а потім відкриваєте свою RSS-стрічку і переконуєтеся, що там (на фідбернере) фотки чудово підвантажуються. Що і потрібно було реалізувати. Дякую за увагу.

    Удачі вам! До зустрічей на сторінках блогу