2016-04-04 10 views
0

У меня есть веб-сайт, который подвержен уязвимости, связанной с щелчками. Проводя некоторые исследования, похоже, что один из простых подходов - просто добавить X-Frame-Options: SAMEORIGIN в заголовок ответа. Это очень старое веб-приложение (последнее обновление - 2004) и работает с IIS 6 с ASP.NET 2.0.Добавить пользовательский заголовок ответа в web.config

В новых версиях, я мог бы просто добавить следующую секцию web.config

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="X-Frame-Options" value="SAMEORIGIN" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

И это будет конец. Тем не менее, я не могу проверить, что это возможно с помощью IIS 6.

Возможно ли это, если IIS 6 и ASP.NET 2.0 выполняются только в файле web.config? Если да, то как? Если нет, то какие изменения кода я должен был бы сделать для достижения того же результата? Просто добавит

Context.Response.AddHeader("X-Frame-Options", "SAMEORIGIN"); 

до Global.asax#Application_EndRequest достаточно?

ответ

0

Я не верю, что вы сможете это сделать только путем обновления web.config, так как вы нацеливаетесь на II6 (поскольку поддержка раздела <customHeaders> была добавлена ​​в IIS7 +).

Что вы, вероятно, должны были бы сделать бы создать пользовательский HttpModule, подобный подход упоминается в this blog post, который будет поддерживать на самом деле добавления заголовка, который может выглядеть примерно так:

public class SameOriginHeaderModule : IHttpModule 
{ 
    private HttpApplication _application; 

    public void Init(HttpApplication context) 
    { 
     _application = context; 
     context.PreSendRequestHeaders += OnPreSendRequestHeaders; 
    } 

    void context_EndRequest(object sender, EventArgs e) 
    { 
     // If your request exists, add the header 
     if (_application.Context != null) 
     { 
       var response = _application.Response; 
       response.Headers.Add("X-Frame-Options", "SAMEORIGIN"); 
     } 
    } 

    public void Dispose() 
    { 

    } 
} 

Вы бы тогда нужно зарегистрировать этот модуль в файле web.config, как показано ниже:

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="SameOriginHeaderModule" type="SameOriginHeaderModule" /> 
     </httpModules> 
    </system.web> 
</configuration> 
+0

есть ли какая-либо причина использовать пользовательский модуль, а мой второй подход, добавив его в файл Global.asax? Мне нравится идея пользовательского модуля, просто любопытно, есть ли причина использовать один над другим. – Zymus

+0

Собственно, я не заметил этого фрагмента кода. Да, этого также должно быть достаточно, хотя вы можете настроить таргетинг на ['Application_PreSendRequestHeaders'] (https://msdn.microsoft.com/en-us/library/system.web.httpapplication.presendrequestheaders (v = vs. 110) .aspx), если это возможно, поскольку лучше было бы добавить заголовки. –