Os cabeçalhos de segurança são um subconjunto de cabeçalhos de resposta HTTP que podem ser definidos por um servidor da web em que cada um aplica um controle de segurança nos navegadores. Os cabeçalhos HTTP são uma forma de metadados enviados com solicitações e respostas da web. O cabeçalho de segurança “X-Content-Type-Options” impede que os navegadores façam a detecção de MIME.
Observação: os cabeçalhos HTTP não são exclusivos do HTTP e também são usados em HTTPS.
O que é MIME sniffing?
Quando qualquer dado é enviado pela web, uma das partes dos metadados incluídos é um tipo MIME. Multipurpose Internet Mail Extensions, ou MIME types, são um padrão usado para definir o tipo de dados que um arquivo contém, o que indica como o arquivo deve ser tratado. Normalmente, o tipo MIME consiste em um tipo e subtipo com um parâmetro e valor opcionais. Por exemplo, um arquivo de texto UTF-8 teria o tipo MIME “text / plain; charset = UTF-8”. Nesse exemplo, o tipo é “text”, o subtipo é “plain”, o parâmetro é “charset” e o valor é “UTF-8”.
Para evitar a rotulagem incorreta e o manuseio incorreto de arquivos, os servidores da Web normalmente executam a detecção de MIME. Este é um processo em que o tipo MIME declarado explicitamente é ignorado e, em vez disso, o início do arquivo é analisado. A maioria dos tipos de arquivos inclui sequências de cabeçalho que indicam o tipo de arquivo. Na maioria das vezes, os tipos MIME estão corretos e farejar o arquivo não faz diferença. Porém, se houver uma diferença, os servidores da web usarão o tipo de arquivo detectado para determinar como lidar com o arquivo em vez do tipo MIME declarado.
O problema ocorre se um invasor consegue fazer upload de um arquivo como uma imagem PNG, mas o arquivo é realmente algo diferente, como o código JavaScript. Para tipos de arquivos semelhantes, como dois tipos de texto, isso pode não causar muitos problemas. Torna-se um problema sério, no entanto, se um arquivo perfeitamente inócuo puder ser executado em seu lugar.
O que X-Content-Type-Options faz?
O cabeçalho X-Content-Type-Options tem apenas um valor possível “X-Content-Type-Options: nosniff”. Ativá-lo informa ao navegador do usuário que ele não deve executar a detecção do tipo MIME e, em vez disso, confiar no valor declarado explicitamente. Sem essa configuração, se um arquivo JavaScript malicioso fosse disfarçado como uma imagem, como PNG, o arquivo JavaScript seria executado. Com X-Content-Type-Options habilitado, o arquivo será tratado como uma imagem que falha ao carregar, pois o arquivo não é um formato de imagem válido.
X-Content-Type-Options não é particularmente necessário em um site que usa recursos inteiramente próprios, pois não há chance de um arquivo malicioso ser servido acidentalmente. Se um site usa conteúdo de terceiros, como recursos externos ou enviados pelo usuário, o X-Content-Type-Options fornece proteção contra esse tipo de ataque.