. NET Добавить заголовок к ответу по индексу. html запрос? - PullRequest
1 голос
/ 26 марта 2020

У меня есть проект WebAPI под названием Mensajes.Cliente, который содержит приложение Angular:

Project structure

В целях безопасности мне нужно добавить 2 заголовки для каждого ответа сервера. Решено, что добавление следующего в Global.asax:

protected void Application_BeginRequest()
{
    Response.AddHeader("X-Frame-Options", "DENY");
    Response.AddHeader("X-XSS-Protection", "1");
}

Когда я вызываю любой из методов контроллеров, ответ содержит оба заголовка, так что работает нормально.

Но когда я пытаюсь получить индекс. html как foo.com/Mensajes.Cliente или foo.com/Mensajes.Cliente/index.html, заголовок не устанавливается (это происходит со всем содержимым stati c как. js или. css файлов).

Request response

Как добавить эти заголовки к ответу на каждый запрос сервера?

Должны ли эти заголовки быть установлены в конфигурации web.config или Global.asax или в конфигурации сервера?

1 Ответ

3 голосов
/ 01 апреля 2020
  1. Самый простой способ установить заголовки для всего содержимого сайта - web.config. Раздел customHeaders в httpProtocol в system.webServer обеспечит включение этого заголовка для всех файлов и ответов.

Пример:

<system.webServer>
   <!--.......-->
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <add name="X-XSS-Protection" value="1" />
      </customHeaders>
    </httpProtocol>    
    <!--.......-->
</system.webServer>
Другой вариант - создать пользовательский HttpModule. Таким образом, вы получите больше контроля над файлами и содержимым, к которому необходимо добавить заголовки.

Пример:

public class CustomOrgHeaderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        //To add header only for Html files
       //You can add any condition as you need
        if (HttpContext.Current.Request.Url.ToString().Contains(".html"))//css, js as you need
        {
            HttpContext.Current.Response.Headers.Add("X-Frame-Options", "DENY");
            HttpContext.Current.Response.Headers.Add("X-XSS-Protection", "1");
        }
    }
}

И зарегистрируйте CustomOrgHeaderModule в web.config -

   <system.webServer>
       <!--.......-->
        <modules>
         <add name="CustomHeaderModule" type="SOFTEST.NET.API.Modules.CustomOrgHeaderModule" /><!--.SOFTEST.NET.API.Modules.CustomOrgHeaderModule is then FullNmae of the class MEANS Namesapce.CassName -->
       </modules>  
        <!--.......-->
    </system.webServer>

И вам больше не нужно устанавливать Response.AddHeader в Global.asax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...