X-Frame-Options
===============

O cabeçalho de resposta HTTP **`X-Frame-Options`** pode ser usado para indicar se o navegador deve ou não renderizar a página em um `<frame>` (en-US), `<iframe>`, `<embed>` ou `<object>` (en-US). Sites podem usar isso para evitar ataques *click-jacking (en-US)*, assegurando que seus conteúdos não sejam embebedados em outros sites.

A segurança adicionada é provida somente se o usuário acessando o documento está usando o navegador que suporte `X-Frame-Options`.

**Nota:** O cabeçalho HTTP `Content-Security-Policy`possui uma diretiva `frame-ancestors` que torna este cabeçalho obsoleto para navegadores que o suportam.


|  |  |
| --- | --- |
| Tipo de cabeçalho | Response header (en-US) |
| Forbidden header name | não |

Sintaxe
-------

Existem duas diretivas possíveis para `X-Frame-Options`:
```

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
```

### Diretivas

Se você especifica `DENY`, não somente tentativas em carregar a página em um enquadramento irão falhar quando carregadas de outros sites, mas irão falhar também se forem carregadas do mesmo site. Por outro lado, se você especifica `SAMEORIGIN`, você ainda pode usar a página em um enquadramento enquanto o site que o está incluindo no enquadramento seja o mesmo servindo a página.

`DENY`

A página não pode ser mostrada em um enquadramento, independente do site que esteja tentando fazer isso.

`SAMEORIGIN`

A página só pode ser exibida em um enquadramento se for da mesma origem da página em si. A especificação deixa a cargo do navegador para decidir se esta opção se aplica ao nível mais alto, ao parente, ou à cadeia inteira, entretanto é discutido se a opção não é muito útil a não ser que todos os ancestrias estejam na mesma origem (veja Erro do Firefox 725490). Veja também Browser compatibility para mais detalhes de suporte.

`ALLOW-FROM uri`

Esta é uma diretiva obsoleta que não funciona mais em navegadores modernos. Não a utilize. Em navegadores legado que a suportam, a página pode ser mostrada em um enquadramento somente na URI de origem especificada. Note que implementação legada do Firefox isso ainda sofria do mesmo problema que a `SAMEORIGIN` sofreu — ela não checa se os enquadramentos ancestrais para ver se eles são da mesma origem. O cabeçalho HTTP `Content-Security-Policy` tem a diretiva `frame-ancestors` que você pode usar ao invés disso.

Exemplos
--------

**Nota:** Colocar X-Frame-Options dentro de um elemento `<meta>` é inútil! Por enquanto, `<meta http-equiv="X-Frame-Options" content="deny">` não tem nenhum efeito. Não o utilize! `X-Frame-Options` funciona somente colocando a configuração através do cabeçalho HTTP, como nos exemplos abaixo.

### Configurando o Apache

Para configurar o Apache para que ele envie o cabeçalho `X-Frame-Options` para todas as páginas, adicione isto nas configurações do seu site:
```

Header always set X-Frame-Options "SAMEORIGIN"
```


Para configurar o Apache para colocar o `X-Frame-Options` como DENY, adicione isto nas configurações do seu site:
```

Header set X-Frame-Options "DENY"
```

### Configurando o nginx

Para configurar o nginx para enviar o cabeçalho `X-Frame-Options`, adicione isto na configuração do seu http, servidor ou localização:
```

add_header X-Frame-Options SAMEORIGIN always;
```

### Configurando o IIS

Para configurar o IIS para enviar o cabeçalho `X-Frame-Options`, adicione isto no arquivo `Web.config` do seu site:


```xml
<system.webServer>
  ...

  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

  ...
</system.webServer>
```


Ou veja este artigo de suporte de configuração da Microsoft utilizando a interface de usuário IIS Manager.

### Configurando o HAProxy

Para configurar o HAProxy para enviar o cabeçalho `X-Frame-Options`, adicione isto na sua configuração do seu *front-end*, *listen*, ou *backend*:
```

rspadd X-Frame-Options:\ SAMEORIGIN
```


Alternativamente, em versões mais novas:
```

http-response set-header X-Frame-Options SAMEORIGIN
```

### Configurando o Express

Para configurar o Express para enviar o cabeçalho `X-Frame-Options`, você pode usar o helmet que utiliza o frameguard para colocar o cabeçalho. Adicione isto na configuração do seu servidor:


```js
const helmet = require("helmet");
const app = express();
app.use(helmet.frameguard({ action: "SAMEORIGIN" }));
```


Alternativamente, você pode usar o *frameguard* diretamente:


```js
const frameguard = require("frameguard");
app.use(frameguard({ action: "SAMEORIGIN" }));
```

Especificações
--------------

| Especificação | Título |
| --- | --- |
| RFC 7034 | HTTP Header Field X-Frame-Options |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* `frame-ancestors` (CSP)
* Cabeçalho HTTP X-Frame-Options (HTTP Header Field X-Frame-Options) - RFC 7034
* Defesas contra ClickJacking (ClickJacking Defenses) - IEBlog
* Combatendo ClickJacking com X-Frame-Options (Combating ClickJacking with X-Frame-Options) - IEInternals