Почему CSP не работает в ядре .net и приложении Angular?

У меня есть ядро ​​.net и приложение Angular 2 SaaS. Я пытаюсь реализовать X-Frame-Options: Deny и Content-Security-Policy: фрейм-предки 'none'; чтобы мое приложение не было встроено в другие фреймы.

Я реализовал это по-разному в своем .net Core API и получил их в значениях заголовка ответа. Ожидаемое поведение: содержимое iframe (которое является моим веб-приложением) заблокировано, но приложение все равно загружается.

Реализация ядра .Net:

Первый подход:

    app.Use(async (ctx, next) =>
    {
        ctx.Response.Headers.Add("X-Frame-Options",
                 "deny");
        ctx.Response.Headers.Add("Content-Security-Policy",
                                 "frame-ancestors 'none'; report-uri /cspreport");
        await next();
    });

Второй подход с использованием Nwebsec

   app.UseXfo(o => o.Deny());
   app.UseCsp(options => options.FrameAncestors(s => s.None()));

Я также добавил метатег ниже в раздел заголовка файла index.html:

<meta http-equiv="Content-Security-Policy" charset="utf-8">

Ниже моя сетевая вкладка, показывающая значения заголовка в заголовке ответа:

введите здесь описание изображения

Я прочитал множество руководств и документов, но все равно вижу, что мое приложение загружается в iframe.

Любая помощь/совет будет высоко оценена.

Обновление И .net core API, и приложение Angular развернуты в двух разных службах приложений Azure.


person Mustafa Mohammadi    schedule 08.03.2021    source источник


Ответы (1)


Фрейм-предки CSP и X-Frame-Options используются для предотвращения кадрирования документов (обычно с типом содержимого text/html). Ваш ответ возвращает application/json, но вы, скорее всего, не встраиваете ответ как таковой. Профилактика фрейминга в этом случае не поможет.

Данные (такие как application/json) обычно ограничиваются заголовками CORS, и вам, вероятно, следует быть более строгим с заголовком Access-Control-Allow-Origin.

person Halvor Sakshaug    schedule 08.03.2021