MVC 5 предотвращает доступ к контенту через iframe
С момента обновления с MVC4 до MVC5 я заметил дополнительный серверный заголовок, добавленный на мои веб-страницы:
X-Frame-Options: SAMEORIGIN
Я понимаю преимущества безопасности добавления этого тега, но одна из страниц предназначена для включения внутри iframe из других проектов (в других доменах), этот дополнительный заголовок предотвращает это.
Я проверил, что сервер хостинга IIS7 не добавляет заголовок, а когда я вернулся к MVC4 - заголовок ушел.
Кто-нибудь знает, как удалить это значение по умолчанию из MVC5?
Ответы
Ответ 1
MVC5 автоматически добавляет HTTP-заголовок X-Frame-Options с помощью SAMEORIGIN
. Это предотвратит загрузку вашего сайта в iframe
.
Но мы можем отключить это в Application_Start
в Global.asax.cs
.
Пример
protected void Application_Start()
{
AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
}
Обновление
Я написал сообщение об этом MVC5 предотвращает загрузку вашего сайта в IFRAME
Ответ 2
Попробуйте что-то подобное в Global.asax
:
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("X-Frame-Options");
}
EDIT:
Посмотрите ответ Колина Бэкона. Это более верно, чем мое.
Короче - не удаляйте этот заголовок, если вы не хотите запускать свой сайт в IFRAME, потому что он откроет уязвимость подлога. Но если вы все еще хотите удалить его - используйте AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
в Application_Start
, это более чистый способ сделать это.
Ответ 3
Ниже приведен метод расширения для класса HtmlHelper
. Сначала он очистит заголовки all X-Frame-Options
, а затем добавит один заголовок X-Frame-Options
, который обычно добавляется встроенным методом AntiForgeryToken
.
Этот метод соответствует настройке SuppressXFrameOptionsHeader
, но имеет недостаток в удалении всех ранее добавленных заголовков X-Frame-Options
, даже те, у которых есть значения, отличные от SAMEORIGIN
.
public static MvcHtmlString AntiForgeryTokenSingleHeader(this HtmlHelper html)
{
string token = AntiForgery.GetHtml().ToString();
HttpResponseBase httpResponse = html.ViewContext.HttpContext.Response;
httpResponse.Headers.Remove("X-Frame-Options");
if (!AntiForgeryConfig.SuppressXFrameOptionsHeader)
{
httpResponse.AddHeader("X-Frame-Options", "SAMEORIGIN");
}
return new MvcHtmlString(token);
}
Ответ 4
Если вам нужна дополнительная гибкость, здесь ActionAttribute добавляет/удаляет заголовки на основе белого списка. Если реферер не включен в белый список, заголовок SAMEORIGIN остается на месте. Я собирался вставить код, но SO жалуется на длину.
https://long2know.com/2016/06/asp-net-anti-forgery-xframe-options/