Политика безопасности контента (CSP):

CSP играет очень важную роль в защите отображаемого контента. Он просто решает, откуда должен извлекаться контент в нашем приложении. Он добавляет дополнительный уровень защиты, который помогает в выявлении и смягчении уязвимости внедрения контента.

Если неавторизованный человек хочет внедрить свой контент, чтобы воспользоваться преимуществами приложения, например, может использовать приложение с XSS, которое отправляет файл cookie в другой домен или уязвимость, связанная с кликджекингом, то оно покажет ошибку и не позволит приложению сделать ошибку. запрос к тому произвольному домену.

CSP по умолчанию блокирует функцию оценки строки, такую ​​как eval (). Поэтому, если разработчик хочет использовать функцию eval (), он должен изменить ее, как Json.parse ().

Когда мы используем CSP:

я. Если браузер поддерживает, CSP устанавливает некоторые ограничения и сообщает браузеру, как вести себя по отношению к приложению и оставлять нежелательный контент в соответствии с реализованным CSP.

II. Если браузер не поддерживает CSP, браузер игнорирует его и работает нормально, ничего не блокируя. Иногда дает предупреждения.

Синтаксис:

Content-Security-Policy: ‹directive› ‹value›; ‹Directive› ‹value›

я. Директива: правила для различных ресурсов, которые определены в ней.

II. Значение: здесь можно добавить / внести в белый список один или несколько доменов.

Это означает, что заголовок пользовательского агента может загружать, какие ресурсы и какие действия мы хотим выполнить с этими ресурсами.

Примечание.

я. Если он не установлен плотно, то его можно использовать не по назначению.

II. Все браузеры не поддерживают CSP, особенно IE и более старые версии других браузеров. В этом случае мы должны запретить использование браузера со старой версией.

iii. Убедитесь, что браузер поддерживает версию CSP, которую вы собираетесь внедрить.

Что нужно?

В настоящее время приложение предоставляет множество функций, например, приложение извлекает некоторые изображения или сценарии с другого конца, поэтому это содержимое необходимо защитить с помощью CSP.

Как получить CSP?

Я создал небольшой репозиторий на GITHUB, т.е.

https://github.com/guptabless/csp-scanner/blob/master/csp.py

Команда : python csp.py –u ‹URL-адрес приложения›

я. Если в приложении реализован CSP, он получит все веб-сайты, указанные в CSP:

Как реализовать CSP:

CSP не зависит от языковой структуры. Мы можем настроить его на сервере Apache или Nginx.

После реализации CSP на сервере мы можем увидеть результат выше в заголовке ответа.

я. Default-src: это обязательно, потому что, если приложение не может найти свой конкретный ресурс, оно будет использовать сценарий по умолчанию.

II. Script-src: запрещает выполнение встроенного скрипта.

iii. Style-src: запретить применение встроенного стиля.

iv. Report-to: это не остановит работу веб-сайта, если будет загружено какое-либо содержимое, не упомянутое в CSP, но будет создавать журналы возникших проблем.

Если вы хотите удалить эту директиву, вы можете реализовать политику CSP в принудительном режиме. В принудительном режиме вы все равно можете включить директиву report-to, но организация решает, хотят ли они ее включать или нет, потому что все нарушения CSP по-прежнему регистрируются.

v. Предки фреймов: мы можем ограничить отображение страницы во фреймах другими страницами.

Если мы установим для этой директивы значение «none», то это будет то же самое, что и «X-Frame-Options: deny».

Если мы установим для этой директивы значение «self», это означает, что только с того же веб-сайта (того же происхождения) и аналогично использованию X-frame-Options: SameOrigin.

vi. Изображение: чтобы ограничить источник изображения.

Значения внутри этих директив мы можем включать URL-адреса и некоторые указанные ключевые слова, такие как «none», «self», «unsafe-inline» и unsafe-eval. Это означает, что встроенный javascript разрешен по умолчанию. Эти ключевые слова всегда вводятся в одинарных кавычках, и каждая директива должна быть указана только один раз в одном заголовке.

Примечание. Внедрение CSP - не сложная задача, но поддерживать CSP - задача, но каждый раз, когда мы вносим изменения в приложение, мы должны убедиться, что политика CSP была изменена в соответствии с ними.

Основные шаги при внедрении CSP:

Вот несколько шагов, как безопасно реализовать CSP.

я. Перечислите все ресурсы, которые использует ваше приложение:

Проверьте всю функциональность приложения и внесите в белый список все ресурсы, которые приложение использует. Однако вопрос в том, как узнать ресурс?

а. Изучив исходный код приложения

б. Используя сканер отрыжки и проверьте URL-адрес и ресурсы.

c. Прокрутите все конечные точки приложения, чтобы ничего не осталось.

Примечание. Мы можем использовать несколько инструментов для проверки ресурсов, так как всегда лучше получить больше.

II. Создание политики по основному ресурсу:

На основе ресурсов найдите уникальные домены, чтобы мы могли легко реализовать эти домены в директивах в соответствии с их категорией, например, ресурс, связанный с изображением, чтобы он попадал в тег «image».

iii. Ознакомьтесь с политикой производства

После этого организации необходимо внедрить CSP в режиме «только отчеты». Таким образом, если есть ошибка в реализации CSP и есть какое-либо нарушение, то отчет отправляется на «report-uri». В организации «report-uri» уже указан URL, по которому будет отправлен отчет о нарушении. Чтобы они могли исправить ошибку в CSP

iv. Улучшите свою политику CSP и повторите процесс еще раз с iii по iv

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

v. Регулярный мониторинг

Продолжайте регулярно отслеживать политику CSP, чтобы мы узнали о лазейках и, если есть какие-либо обновления в приложении или включение любых новых ресурсов, обновите политику CSP соответственно.

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

Использование CSP:

Мы не можем использовать это никакими способами. Давайте обсудим здесь:

я. Script-src: ‘unsafe-inline’

Он находится под слабой безопасностью CSP. Этот параметр удаляет песочницу XSS. Это позволяет вставлять JavaScript в HTML-страницу, чтобы злоумышленник мог фактически выполнить XSS, используя вредоносные теги JS.

II. Если пользователь пытается загрузить изображение:

Приложение имеет функцию загрузки файлов, и злоумышленник загружает изображения этого типа.

‹img src =» https://test.com onerror = ‹script› alert (1) ‹/script› »/›

iii. Если у нас есть белый список img-src и frame-src с unsafe-inline и unsafe-eval, тогда это может вызвать проблему, поскольку встроенный javascript может быть выполнен, даже если мы можем использовать img-src для запуска XSS.

iv. Мы добавили некоторые домены в белый список, но если в этих доменах есть что-то вредоносное, например JSONP, это также делает наше приложение уязвимым.

‹скрипт src = https://test.com / jsonp? callback = alert (1) /›

Исправление

· Конфигурация в CSP должна быть ограничительной.

· Правильный белый список домена в значении директивы.

· Отключите встроенный JavaScript и CSS, чтобы защитить приложение от XSS или кроссфреймовых сценариев.

· Любой надстройкой пользователь может завершить CSP, поэтому постарайтесь обучить пользователей этому.

· Установка небезопасной встроенной директивы означает, что весь этот белый список, который вы сделали для скриптов, бессмыслен. Так что не используйте небезопасную встроенную директиву.