Троянська свиня та хедер Content Security Policy

Троянська свиня та хедер Content Security Policy.

хедер

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

Погано тільки, що про ті хедери мало хто знає. Ну що робити, просвічуватимемося.

Незрозуміло тільки, навіщо про все про це думати осудним вебмайстрам. Вони ж нічого такого у себе на сайті не тримають, правда?

Ви не контролюєте вміст свого сайту.

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

У цьому місці всі подумали: «Стоп, як же так? Якщо на сайті всього цього добра гарантовано немає, бо вебмайстр зуб дає, звідки ж такі посилання візьмуться? Сайт поламали? Чи не фільтруються продажні посилання? Метрика бреше безбожно?»

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

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

І Ви нічого з цим не можете вдіяти.

Маленька ілюстрація роботи фейкового плагіна.

Нехай він буде таким – все клікабельно:

хедер

Якщо тепер дати брузеру «архікорисний» плагін, який нібито щось робить, та сама сторінкаперетворюється на гарбуз:

троянська

Ми бачимо, як у правому верхньому кутку з'явився куточок-замануха з флашем усередині, вискакували якісь банери, а потім кинулися відкриватися попапи – цього картинка вже показати не може.

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

троянська

Чому це погано?

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

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

Їхні браузери намалюють на документах Вашого ресурсу всю непотребність, яка тільки існує в природі. З відповідними переходами та користувальницькою поведінкою.

Чи зашкодить це сайту? Без усіляких сумнівів. Яндекс це прямо обіцяє.

І що з цим можна вдіяти?

Тут тільки два шляхи - або сподіватися, що магазин додатків для Google Хрома якось фільтруватиме шкідливі розширення, або самому не допускати можливості вбудовування ким не потрапивши і чого не потрапивши в HTML код Ваших сторінок на стороні клієнта.

Другий шлях явно перспективніший і пряміший.

Добре, що такий механізм навіть передбачений. Вигаданий він якразсаме на цей випадок, і зветься Content Security Policy. Мануали яким легко гуглиться, в тому числі вже й українською мовою.

Сутність політики Безпеки Контенту.

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

Такій інструкції в обов'язковому порядку підпорядковуються плагіни та розширення для браузера, тому навіть «заражений» браузер не має фізичної можливості намалювати на сторінці будь-чого. Якщо, звичайно, той браузер спочатку не від варозна контори - будьте уважні до родоводу свого софту.

Тож питання, чи варто забивати собі голову премудростями Content Security Policy, навіть не стоїть. CSP на сайт вбудовувати доведеться по-любому. Потрібно лише збагнути, як це зробити з найменшими зусиллями.

Метод підключення Політики Безпеки Контенту.

Зазвичай це робиться через інструкцію в файлі .htaccess, з задіянням модуля mod_headers. Воно начебто просто, але.

Щось підказує, що при локальному розміщенні сайту (локальний web-сервер типу «Денвер» або йому подібний) Вам захочеться, щоб Політика Безпеки Контенту працювала так само, як і в Інтернеті. Що здорово і правильно - налагоджувати безпекову політику зручно під локалкою, щоб не напортачити публічно.

Але навряд чи кому захочеться проходити квест по впізнаванню версії Апача в «Денвері», вишукування на офсайті Апача точно такої ж версії під Вінду, виколупування з msi установника модуля "mod_headers.so" з наступним вкорячення його в «Денвера» і конфіг.

Більш того,немає жодної гарантії, що модуль mod_headers обов'язково буде присутній на вашому сервері. Просто може бути відсутнім, бо слати хедери силами Апача - явно не мейнстрім.

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

Тож на загальноприйнятий спосіб використання Content Security Policy у .htaccess файлі ми свідомо заб'ємо. І підключимо політику так, щоб жодні додаткові модулі на сервері взагалі не знадобились.

Самурайський підхід до Content Security Policy.

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

Якщо брати для конкретики щось знайоме, наприклад, той самий горезвісний Ласто Блог, то це буде індексний файл докорінно. Там всього-то детектується версія PHP на хості, і підвантажується відповідний файл двигуна під цю версію PHP (так, весь двигун живе в одному файлі - така концепція портаблі софту).

php /* Вище цього рядка у файлі нічого не повинно бути */

# Протоколування рапортів Content Security Policy:

if (isset( $_GET [ 'content-security-policy' ])) header ( 'HTTP/1.0 204 No Response' );

$report = file_get_contents ( 'php://input'); $report = json_decode ($report, true); if (empty($report)) die;

$line = "\n"; foreach ( array( ' blocked: ' => 'blocked-uri' , ' directive: ' => 'violated-directive' , ' document: ' = > 'document-uri' , ) як $k =>$v ) $line .= "\n" . $k .(isset( $report [ 'csp-report' ][ $v ]) ) $report [ 'csp-звіт' ][ $v ]: '' );

date_default_timezone_set ('Etc/GMT-6'); file_put_contents ( './data/csp/' . date ( 'd-m-Y' ). '.txt' , $line , FILE_APPEND LOCK_EX ); померти; >

# Отправка заголовка Політика безпеки вмісту:

заголовок ( # "Content-Security-Policy-Report-Only: " // Отладка "Content-Security-Policy: " // Работа . " report-uri ./index.php?content -security-policy=ok;" . " default-src 'self';" . " img-src data: counter.yadro.ru *.gstatic.com 'self';" . " script-src 'unsafe-inline' 'self';" //'unsafe-censored' . " frame-src *.google.ru *.google.com kset.kz *.youtube.com 'self' ;" . " object-src st.kset.kz www.youtube.com 'self';" . " connect-src https://translate.googleapis.com 'self';" . " style-src 'unsafe-inline' 'self';" . " media-src *;" . " font-src 'self';" . " form-action 'self' ;" );

$n =масив(); preg_match_all ( '

switch(isset( $n [ 1 ][ 0 ]) ? $n [ 1 ][ 0 ]: 'na' ) випадок 2 : випадок 3 : випадок 4 : include( './ data/php_5_' . $n [ 1 ][ 0 ]. '.php' ); перерва; за умовчанням: die( 'Перевірте версію PHP! ' . phpversion (). ' не підтримується.' ); >

/* У цьому рядку у файлі нічого не повинно бути. */ ?>

Ми бачимо, що тепер кожна сторінка Ласто Блога відправляє браузеру досить складний і дивний хедер (заголовок), сформований у другому блоці. По суті справи, це звичайна текстова строка в досить неудобному синтаксисі - видимо, у розробників не хватило ума відразу оперувати серіалізованим індексованим масивом. І, відповідно, тепер багато поколінь веб-майстрів обречено вивчити птичий мову.

Заголовок хедера Content-Security-Policy-Report-Only задокументовано чебурашкою слів, і є альтернативною заголовком Content-Security-Policy (можна зачебурашити цей рядок, розчебурашив попередній). У поточному написанні браузер заблокує всі ресурси, що суперечать Політиці Безпеки Контенту, а в альтернативному варіанті - тільки емулює роботу, дозволяючи виявити всіх порушників, і записати їх у балку.

Це як би робочий режим, і режим налагодження відповідно.

Найцікавіше в коді - директива report-uri, що посилає рапорт про порушення політики безпеки тому самому файлу, але в перший блок його коду. Якщо такий рапорт не потрібен, ставимо перед рядком чебурашку.

Тепер про рапорти порушень безпекової політики. Вони пишуться за кожну окрему добу в папку ./data/csp/ (її треба створити в Ласто Блозі з правами на запис), або в іншу папку, яку Ви напишіть у коді першого блоку.

Найцікавіше буде якраз у цих рапортах.

Хто і що вставляє HTML сторінок наших файлів?

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

Також багато впроваджень dl.metabar.ru" та mc.yandex.ru - це самі браузери так збирають статистику.

Найепічніше, це коли якась приблуда на комп'ютері серфера знімає трафік, перехоплює хедер Content Security Policy, модифікує його, а потім підвантажує у сторінці, що відкривається браузером свій аякс. Який, звісно, ​​виконується, бо Політика Безпеки проти нього не заперечує.

Дивно, але виробники браузерів це не вважають шахрайством, і ніяк йому не перешкоджають.

Помічений у такій поведінці, наприклад, Касперський - він впендюрує свій домен.labs.com у директиву script-src. І, відповідно, підвантажує на сторінки свої власні метрики, в яких Бог знає що сидить і за чим спостерігає. Шляхів впровадження своїх скриптів Касперського в сторінки, що переглядаються браузером, багато, коли про це навіть пишуть: Kaspersky стежить за вами, за ваші гроші.

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

Не потрібне жодного шпигунства з боку операційної системи, коли є Касперський. У будь-якій системі з будь-яким браузером він вкоречить у будь-яку сторінку свій аякс і запише всі ходи. Навіть політика безпеки контенту йому не указ - він її підробляє як слід.

Прикиньте потенціал, особливо з огляду на популярність Касперського. І те, що у конторах заборонено підключати комп'ютер до мережі, якщо на ньому не стоїть антивірус. До того ж у держконторах 146%, що це буде саме Касперський.

Ну а те, що КаДжиБі з Касперсим домовитися набагато простіше, ніж із будь-яким іншим Великим Братом, це й дурню зрозуміло.

Чи використовувати Content Security Policy?

Прийде. Бо всі браузери сьогодні пишуться на тій самій платформі, що й Хром. А тому розширень буде мільйон, різних. У тому числі і фейкових, що завдають Вашому сайту реальної та відчутної шкоди.

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

А іншого розкладу немає.

Додаток 22.09.15: Що про заражені браузеридумає Яндекс?

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

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

Якщо питати грамотно, відповідь від платонів Ви отримаєте завжди. І саме тут він буде обнадійливий - платони чудово розуміють ситуацію, у них навіть є величезний список з сайтами на зразок teaser.bz, і інший список з плагінами. І так, платони знають, для чого все це і як воно працює. А тому самому сайту санкцій не належить.

Ну і раз король з королевою у нас їхньої величності Поведінкові Фактори, і все навколо тільки їх і обертається, то зовсім не зрозуміло, як може не впливати на ранжування сайтів те, що ті Поведінкові Фактори прямо і визначає.

Тобто взяли чистий сайт, на якому користувачі поводяться так. Запам'ятали та записали. Потім вилили на той самий сайт два відра помиїв, впендюрили десяток попапів, рясно розсипали тизери з голими тітками - і про диво, поведінкові чинники у нас зовсім не змінилися, і сайт ну ніяк від цього не постраждав. Користувачі не бачать голих тіток, силою невідомої магії рятуються від спрацювання попапів, і стійко не піддаються ні на які провокації.