Доказательство кликджекинга под Asp.net5 MVC6?

Раньше я всегда добавлял add name="X-Frame-Options" value="DENY" или "SAMEORIGIN" в разделе CustomHeaders в Web.config, но этого больше нет. Любая идея, как это сделать asp5 mvc6?


person Sknecht    schedule 02.02.2016    source источник


Ответы (4)


Web.config не ушел. Он был перемещен из корня проекта в папку /wwwroot. IIS по-прежнему зависит от этих настроек, включая упомянутую вами настройку X-Frame-Options, которая работает со всеми запросами, а не только с теми, которые передаются в MVC. Однако, если вы не планируете размещать свое приложение в IIS, вам может потребоваться найти другой подход для включения этих параметров.

Я только что протестировал и проверил, что добавление этого раздела в файл /wwwroot/web.config добавляет заголовок в IIS Express.

<httpProtocol>
  <customHeaders>
    <add name="X-Frame-Options" value="DENY" />
  </customHeaders>
</httpProtocol>
person NightOwl888    schedule 02.02.2016
comment
Ну а что делать, если тогда IIS не используется? Можно запустить Kestrel напрямую или, например. на Mac или Linux. - person Ilya Chernomordik; 02.02.2016
comment
Я бы рекомендовал найти документацию на Kestrel (или другом веб-сервере, который вы планируете использовать) о том, как добавлять заголовки, поскольку это часть конфигурации веб-сервера и не имеет ничего общего с MVC или ASP.NET. - person NightOwl888; 02.02.2016
comment
Я не думаю, что вы можете сделать это в Kestrel каким-либо другим способом, кроме промежуточного программного обеспечения, если только вы сами не увеличите ответ в каждом действии :) - person Ilya Chernomordik; 02.02.2016

Я думаю, что параметры зависят от вашей среды, если вы используете IIS, то вы можете использовать ответ NightOwl и просто исправить его в web.config, это также работает в Azure, поскольку там Kestrel работает за IIS. В противном случае, я думаю, вам нужно добавить свое собственное промежуточное ПО, которое добавит этот заголовок в ответ (или, возможно, какое-то существующее промежуточное ПО может это сделать, но я не знаю...)

person Ilya Chernomordik    schedule 02.02.2016

Если вы хотите быть совместимым как с IIS, так и с Kestrel (и, следовательно, с Linux), вы, очевидно, не можете использовать config. Вам придется использовать промежуточное программное обеспечение. В вашем промежуточном программном обеспечении вы должны подключить делегата context.Response.OnStarting() к вашему Invoke() method.

Например, ПО промежуточного слоя для исключений делает это, поэтому вы можете скопировать этот шаблон примерно так (закодировано в комментариях, а не в VS)

public class SetHeadersMiddleware
{
    private readonly RequestDelegate _next;
    private readonly SetHandlersMiddlewareOptions _options;
    private readonly ILogger _logger;
    private readonly Func<object, Task> _setHeadersDelegate;
    private readonly DiagnosticSource _diagnosticSource;

    public SetHeadersHandlerMiddleware(
        RequestDelegate next, 
        ILoggerFactory loggerFactory, 
        IOptions<SetHandlersMiddlewareOptions> options,
        DiagnosticSource diagnosticSource)
    {
        _next = next;
        _options = options.Value;
        _logger = loggerFactory.CreateLogger<SetHeadersMiddleware>();
        _setHeadersDelegate= MessWithHeaders;
        _diagnosticSource = diagnosticSource;
    }

    public async Task Invoke(HttpContext context) 
    { 
        context.Response.OnStarting(_setHeadersDelegate, context.Response);
        await _next(context);
    }

    private Task MessWithHeaders(object state) 
    { 
        var response = (HttpResponse)state; 

        // Manipulate response.Headers here

        return Task.FromResult(0); 
    } 
}
person blowdart    schedule 02.02.2016

Таким образом, принятый ответ правильный, если вы используете IIS. Если вы используете Kestrel напрямую (или даже NGINX), то это не сработает. И часть красоты ядра .net — кроссплатформенность!

Взято отсюда: http://dotnetcoretutorials.com/2017/01/08/set-x-frame-options-asp-net-core/

Чтобы установить X-FRAME-OPTIONS или любой другой заголовок, вам просто нужно иметь что-то похожее на приведенное ниже в вашем методе Configure файла startup.cs.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseMvc();

    app.Use(async (context, next) =>
    {
        context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
        await next();
    });
}

Если вам нужно сделать это на определенном веб-сервере (например, Apache, NGinx и т. д.), просто найдите, как добавить пользовательские заголовки для этого конкретного сервера.

person MindingData    schedule 09.01.2017