Как защитить сайт от хулиганских скриптов
Как защитить сайт от хакерских скриптов
Как защитить сайт от хулиганских скриптов

У нас есть несколь­ко про­ек­тов, в кото­рых мы хули­га­ним на чужих сайтах: 

Добав­ля­ем зву­ки меча

Добав­ля­ем снежинки

Под­све­чи­ва­ем мани­пу­ля­ции и пропаганду

Все они осно­ва­ны на одной идее: некий рабо­чий код встра­и­ва­ет­ся в сайт через кон­соль и что-то дела­ет в бра­у­зе­ре клиента. 

Наши про­ек­ты дела­ют без­обид­ные вещи. Но таким же обра­зом мож­но созда­вать и доволь­но злые мошен­ни­че­ские про­грам­мы, кото­рые могут, напри­мер, воро­вать лич­ные дан­ные поль­зо­ва­те­ля. Одно вре­мя это было попу­ляр­но в соци­аль­ных сетях: тебе пред­ла­га­ли какой-то код, кото­рый (как гово­ри­ли) пока­жет, кто был на тво­ей стра­нич­ке. А сам этот код воро­вал твой логин и пароль или отправ­лял спам по друзьям. 

В этой ста­тье пока­жем, как защи­тить свой сайт от это­го баловства. 

Основа — технология CSP

Недав­но мы уже писа­ли об этой тех­но­ло­гии. Крат­ко суть: 

  • Ваше­му бра­у­зе­ру мож­но ска­зать, что­бы на каком-то сай­те он не испол­нял скрип­ты или не загру­жал кар­тин­ки с посто­рон­них ресурсов.
  • Это назы­ва­ет­ся CSP — Content Security Policy.
  • Вклю­чен­ная CSP может сло­мать неко­то­рые части сай­та — напри­мер, внеш­ние пла­ги­ны ком­мен­та­ри­ев или систе­мы аналитики.
  • Но так­же она может и защи­тить ваш сайт от мошенников.
  • Что­бы вклю­чить защи­ту, нуж­но про­пи­сать в шап­ке каж­до­го доку­мен­та на сай­те спе­ци­аль­ный запрет. 

Включаем CSP на сайте

Вклю­чить CSP мож­но на отдель­ном доку­мен­те или на всём сай­те сра­зу. Что­бы не ходить по каж­дой стра­ни­це сай­та и не впи­сы­вать вруч­ную инструк­ции, мож­но задей­ство­вать меха­низ­мы .htaccess.

👉 .htaccess — это систем­ный файл, с помо­щью кото­ро­го мож­но управ­лять пове­де­ни­ем веб-сервера (то есть про­грам­мой, кото­рая отгру­жа­ет поль­зо­ва­те­лю стра­ни­цы ваше­го сай­та). Если про­пи­сать что-то в этот систем­ный файл, эти изме­не­ния отра­зят­ся на пове­де­нии все­го сер­ве­ра — напри­мер, мож­но запре­тить доступ к какой-то пап­ке, задать еди­ную коди­ров­ку для всех стра­ниц сай­та или, как в нашем слу­чае, про­пи­сать CSP.

Что­бы защи­тить сайт от таких вста­вок, нуж­но доба­вить в файл .htaccess на сер­ве­ре такие строки:

<ifModule mod_headers.c> 

    Header set Content-Security-Policy "script-src 'self'" 

</ifModule>

Здесь мы гово­рим серверу:

  1. Возь­ми стан­дарт­ный модуль, кото­рый отве­ча­ет за заго­лов­ки стра­ниц на сервере.
  2. С его помо­щью добавь каж­дой стра­ни­це помет­ку, что у нас есть поли­ти­ка безопасности.
  3. В этой поли­ти­ке ска­за­но, что скрип­ты мож­но загру­жать толь­ко с наше­го сер­ве­ра, а с осталь­ных нельзя.

Если хоти­те защи­ту посиль­нее, заме­ни­те script-src на default-src, но тогда все скрип­ты, сти­ли, кар­тин­ки и фрей­мы тоже долж­ны лежать на этом же сервере.

Сам файл .htaccess лежит в корне пуб­лич­ной части сер­ве­ра. Если его у вас нет — создай­те его вруч­ную, рабо­тать будет точ­но так же. В нашем слу­чае он есть, пото­му что мы уже с ним рабо­та­ли в про­шлых проектах:

Как защитить сайт от хулиганских скриптов

👉 Файл дол­жен назы­вать­ся имен­но так: .htaccess, с точ­кой в нача­ле и без рас­ши­ре­ния (или, по-другому, без име­ни и с рас­ши­ре­ни­ем htaccess). В неко­то­рых систе­мах такой файл создать про­бле­ма­тич­но, поэто­му мож­но сде­лать так:

  1. На ком­пью­те­ре создать файл csp.htaccess
  2. Про­пи­сать в него всё, что нужно
  3. Загру­зить на хостинг
  4. Пере­име­но­вать в .htaccess уже на хостинге

Проверка

Изна­чаль­но мы не настра­и­ва­ли ника­кие поли­ти­ки без­опас­но­сти на сер­ве­ре, поэто­му из кон­со­ли мы можем доба­вить на сайт любой код. Для при­ме­ра возь­мём ста­рый про­ект со снежинками:

  1. Копи­ру­ем код инжек­та из статьи.
  2. Откры­ва­ем сайт mihailmaximov.ru.
  3. Откры­ва­ем кон­соль, встав­ля­ем и запус­ка­ем код.
  4. Видим, что защи­ты нет и у нас появи­лись снежинки.

Код для инжекта:

var js = document.createElement('script'); js.src = "https://thecode.media/wp-content/uploads/2019/12/snowfall2020.js"; document.body.appendChild(js);
Как защитить сайт от хулиганских скриптов Пошли сне­жин­ки, зна­чит, сер­вер поз­во­ля­ет загру­жать чужой код себе на страницу 

Откры­ва­ем .htaccess, встав­ля­ем код с поли­ти­кой без­опас­но­сти и пере­за­гру­жа­ем стра­ни­цу. Сне­жи­нок нет, бра­у­зер руга­ет­ся на чужой скрипт — теперь он выпол­нять его не будет:

Как защитить сайт от хулиганских скриптов

❗️Нали­чие CSP не озна­ча­ет, что у нас появи­лась иде­аль­ная защи­та сай­та — есть и дру­гие спо­со­бы внед­рить вре­до­нос­ный код в тело стра­ни­цы. Но даже то, что мы сде­ла­ли, уже силь­но услож­нит зада­чу злоумышленников.

Текст и скриншоты:

Миха­ил Полянин

Редак­тор:

Мак­сим Ильяхов

Худож­ник:

Даня Бер­ков­ский

Кор­рек­тор:

Ири­на Михеева

Вёрст­ка:

Мария Дро­но­ва

Соц­се­ти:

Олег Веш­кур­цев