Раньше я всегда добавлял add name="X-Frame-Options" value="DENY" или "SAMEORIGIN" в разделе CustomHeaders в Web.config, но этого больше нет. Любая идея, как это сделать asp5 mvc6?
Доказательство кликджекинга под Asp.net5 MVC6?
Ответы (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>
Я думаю, что параметры зависят от вашей среды, если вы используете IIS, то вы можете использовать ответ NightOwl и просто исправить его в web.config, это также работает в Azure, поскольку там Kestrel работает за IIS. В противном случае, я думаю, вам нужно добавить свое собственное промежуточное ПО, которое добавит этот заголовок в ответ (или, возможно, какое-то существующее промежуточное ПО может это сделать, но я не знаю...)
Если вы хотите быть совместимым как с 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);
}
}
Таким образом, принятый ответ правильный, если вы используете 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 и т. д.), просто найдите, как добавить пользовательские заголовки для этого конкретного сервера.