Как да настроите политика за сигурност на съдържанието (CSP)

сигурност

Преди три години Фондация Mozilla разработи нов стандарт за политика за сигурност, който предотвратява XSS атаки и други свързани атаки, като забранява зареждането и изпълнението на скриптове от забранени ресурси. Нарича сеContent Security Policy (CSP), което означава „Content Security Policy“.

Към момента на писане стандартът CSP е в състояние на препоръка за кандидат, което означава, че този стандарт може да бъде приет в бъдеще от консорциума на W3C. В момента всички популярни браузъри поддържат този стандарт.

Поддръжка на политика за сигурност на съдържанието в различни браузъриБележки за версията на браузъра
Chrome25+Пълна подкрепа
Firefox23+
Опера15+
Яндекс браузър
Firefox4-22Поддържа нестандартния хедър X-Content-Security-Policy и частично поддържа стандарта
IE10+
Chrome14-24+Поддържа нестандартния хедър X-Webkit-CSP и частично поддържа стандарта
сафари5-7

Как липсата на CSP може да навреди на уебсайт?

Политика за сигурност на съдържанието на съдържанието

По същество политиката за сигурност на съдържанието е заглавка, която сървърът изпраща на браузъра. Нека да разгледаме по-подробно от какво се състои.

Сега още малко теория и след това веднага ще преминем към практиката, имайте търпение 😉

Ключови думи за посочване на хостове (посочени в кавички!)Ключова дума Цел
"себе си"Указва текущия хост.
'нито един'Забранява всичко. "Няма да преминеш!" 🙂
„unsafe-inline“Използва се само в директиви script-src и style-src. Позволява ви да изпълнявате вградени скриптове на страницата. Не препоръчвам използването на тази ключова дума, т.к това освобождава ръцете на нападателя и дава правото да изпълнява всякакви вградени скриптове на страницата. С прости думи това е дупка в сигурността.
'unsafe-eval'Използва се само в script-src и позволява генериране на код, например: eval, new Function, setTimeout('var foo = "bar" ', 7)

Инсталирайте Политика за сигурност на съдържанието на сайта

Както писах по-горе, CSP е обикновен http хедър, който може да се види в конзолата на Google Chrome, заедно с останалите хедъри:

сигурност

За да разберете по-добрекак работи политиката за сигурност на съдържанието, нека експериментираме малко. Създайте файл index.php и напишете следния код в него:

Моля, имайте предвид, че в http заглавката посочихContent-Security-Policy-Report-Only тя е подобна на Content-Security-Policy, с единствената разлика, че не блокира ресурси, а само уведомява за нарушение. Изключително полезно нещо при тестване на система преди внедряване!

Да видим какво сме написали. Първо, уточнихме директивата default-src 'self' в http заглавката, което означава, че можете да зареждате ресурси само от вашия собствен хост. Всякакви вградени скриптове и css са забранени. Добре, нека да видим:

Тези. Нека се опитаме да изпълним вграден скрипт и да заредим изображение от хост на трета страна. И да видим как ще реагира смелият ни защитник:

политика
CSP реагира адекватно. Тези. зареди картината и изпълни вградения javascript, но в същото време ни каза в конзолата „ата-та!“, а именно: съобщи, че са възникнали две нарушения.

Сега нека променим заглавката от Content-Security-Policy-Report-Only to Content-Security-Policy и вижте какво ще се случи:

настроите
PendalfCSP не пусна никого.
сигурност
Вграденият скрипт не беше изпълнен и изображението не се зареди. Готино, нали?

Сега можете да експериментирате сами. Двете таблици по-горе в статията, в които разгледахме директиви и ключови думи за определяне на хостове, ще бъдат полезни. Опитайте да замените 'self' с http://zabolotskikh.com/ и вижте какво ще се случи - изображението ще може да се зареди, защото сървърът му е в белия списък.

Искам да обърна внимание на факта, че е желателно да посочите хоста с протокола, тъй като в противен случай протоколът ще бъде взет от текущия хост. Например, ако посочите хоста като zabolotskikh.com и сървърът ви работи на https протокола, тогава https://zabolotskikh.com/ ще бъде в белия списък.

Обработка на отчет

Красотата на тази политика е, че в допълнение към блокирането можем също да събираме доклади за злоупотреби! Спомняте ли си в примера в заглавката http, че посочихме url report-uri http://localhost/csp/collector.php за изхвърляне на отчетите? Както можете да предположите, всички доклади за нарушения ще бъдат изпращани на този url. Ето как изглежда докладът за нарушение (във формат JSON):

С този отчет можете да направите всичко, например да го запишете в базата данни, да го изпратите по пощата. Предлагам да записвате всички нарушения в csv файл. Нека го направим!

Създайте файл collector.php и напишете в него следните редове:

Сега опреснете страницата отново и погледнете в директорията http://localhost/csp/. Вече трябва да имате файл report.csv с два реда код:

политика
Ура! Хванахме сигнала за нарушение и го подадохме. Можете да покажете този файл на вашите приятели 😉 И най-доброто от всичко, започнете да прилагате CSPвашия сайт, първо в тестов режим, а след това в "боен" вид. По време на фазата на тестване докладът ще ви помогне да анализирате кои директиви реагират на нарушения и да ги коригирате съответно.

Полезни ресурси за политика за сигурност на съдържанието

Можете ли да разкажете по-подробно какво да пиша в wordpress?