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);?>
Другие вопросы по тегам