Как да настроите политика за сигурност на съдържанието (CSP)
Преди три години Фондация Mozilla разработи нов стандарт за политика за сигурност, който предотвратява XSS атаки и други свързани атаки, като забранява зареждането и изпълнението на скриптове от забранени ресурси. Нарича сеContent Security Policy (CSP), което означава „Content Security Policy“.
Към момента на писане стандартът CSP е в състояние на препоръка за кандидат, което означава, че този стандарт може да бъде приет в бъдеще от консорциума на W3C. В момента всички популярни браузъри поддържат този стандарт.
Chrome | 25+ | Пълна подкрепа |
Firefox | 23+ | |
Опера | 15+ | |
Яндекс браузър | ||
Firefox | 4-22 | Поддържа нестандартния хедър X-Content-Security-Policy и частично поддържа стандарта |
IE | 10+ | |
Chrome | 14-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?