X-Frame-Options не работает в метатеге?
Я хочу ограничить использование содержимого моего сайта в других доменах с помощью элемента управления iframe. Рекомендованный метатег т.е. <meta http-equiv="X-Frame-Options" content="deny">
не работает. Что я могу сделать?
6 ответов
Избегайте делать это в метатеге. сделать это в IIS или в приложении:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("x-frame-options", "DENY");
}
или же
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
Если вы хотите разрешить определенные домены, используйте опцию allow-from, а не deny.
Этот заголовок может не работать со старыми браузерами, например, Mozilla 3.0, поэтому вам необходимо реализовать проверку клиента, называемую перебором JS. проверьте это здесь: https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet
Вы не можете установить X-Frame-Options в метатеге, только используя заголовок HTTP.
читайте больше здесь:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
Например, если вы используете Apache, вы должны добавить такую строку в файл.htaccess
Header set X-Frame-Options DENY
Просто используйте это в заголовке, 100% рабочий
<?php header( 'X-Frame-Options: DENY' ); ?>
Если вам нужно добавить заголовок к ответу, рассмотрите возможность регистрации обратного вызова, чтобы сделать это, когда заголовки собираются отправить.
В промежутке между BeginRequest и отправкой ответа код может полностью заменить или очистить коллекцию заголовков (хотя, вероятно, нет, если вы написали весь код самостоятельно).
В этом примере у меня есть нижестоящий код, который иногда добавляет x-frame-options
заголовок, но пропускает некоторые HTML-страницы. Таким образом, код обеспечивает установку заголовка в обратном вызове:
protected void Application_BeginRequest()
{
HttpContext.Current.Response.AddOnSendingHeaders(httpContext =>
{
if (isHtmlResponse() && hasNoFrameOptionsHeader())
{
httpContext.Response.AddHeader("x-frame-options", "SAMEORIGIN");
}
bool isHtmlResponse () {
var contentTypeValue = httpContext.Response.Headers["content-type"];
return contentTypeValue is null ? false : contentTypeValue.ToLower().Contains("text/html");
}
bool hasNoFrameOptionsHeader () => httpContext.Response.Headers["x-frame-options"] is null;
});
}
Она не будет работать. Ошибка браузера: X-Frame-Options могут быть установлены только через HTTP-заголовок, отправляемый вместе с документом. Это не может быть установлено внутри.
Примечание: установка метатега бесполезна! Например, не имеет никакого эффекта. Не используйте его! Только установив заголовок HTTP, как в примерах ниже, X-Frame-Options будут работать.
Ссылка на источник
Настройка Apache:
Header set X-Frame-Options "deny"
Header always set X-Frame-Options "sameorigin"
Конфигурирование nginx:
add_header X-Frame-Options sameorigin always;
Настройка IIS:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="sameorigin" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
X-Frame-Options - это метод смягчения последствий атак с использованием щелчка. Это заголовок ответа HTTP, отправляемый сервером, чтобы указать, при каких обстоятельствах содержимое страницы должно отображаться в контексте кадра. Браузер, который понимает заголовок, не будет отображать содержимое страницы, если директива заголовка нарушена (например, если evil-example.com помещает good-site.com в iframe, но good-site.com отправляет заголовок, который говорит X-Frame-Options: DENY. Таким образом, не может произойти перехват кликов, потому что жертве не могут быть отображены никакие элементы пользовательского интерфейса. Она не обеспечивает защиту от CSRF. Подробнее: clickjacking and.., Безопасность через ответ HTTP
Вы также можете попробовать PHP-код
<?php header('X-Frame-Options:SAMEORIGIN',true);?>