Código de status HTTP para sinalizar cabeçalho do host inválido ou ausente

6

Existe um código de status HTTP apropriado para clientes que enviam um nome de host incorreto (ou nenhum) por meio do cabeçalho SNI ou do host HTTP?

Uma pergunta anterior aborda como e por que tais solicitações acontecem e como você pode lidar tecnicamente com eles no Apache. No entanto, não aborda a escolha do código de status para a resposta.

No passado eu implementei um proxy HTTP que enviaria o código de status 502 e uma página html explicando porque a mensagem de erro foi produzida. Meu raciocínio para usar o 502 era uma expectativa de que eu o veria principalmente devido a configurações incorretas, o que significa que o proxy não conseguiu encontrar um back-end adequado. Na realidade, acabou por ser muito mais frequente simplesmente ver nomes de host completamente falsos.

Existe outro código de status que é mais apropriado e sinaliza claramente ao cliente que o servidor neste endereço IP não reconhece o valor enviado através do SNI e / ou do cabeçalho Host?

    
por kasperd 27.01.2018 / 20:29

1 resposta

12

O RFC 6066 não especifica nem recomenda nenhum erro HTTP específico no caso de o nome do host enviado via SNI não corresponder ao cabeçalho do Host HTTP. Ele faz recomendar que o servidor aborte o handshake TLS se o nome do host SNI não for aquele para o qual ele fornece serviço. Da seção 3 :

If the server understood the ClientHello extension but does not recognize the server name, the server SHOULD take one of two actions: either abort the handshake by sending a fatal-level unrecognized_name(112) alert or continue the handshake.

Como uma solicitação malformada pode passar pelo handshake de TLS e precisar ser rejeitada em HTTP, é necessário um código de resposta HTTP. De todos os que existem, apenas um realmente se encaixa na situação:

6.5.1. 400 Bad Request

The 400 (Bad Request) status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Esta é, de fato, a resposta que a RFC 7230 especifica. Da seção 5.4 descrevendo o cabeçalho do host:

A server MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message that lacks a Host header field and to any request message that contains more than one Host header field or a Host header field with an invalid field-value.

Vou recomendar strongmente contra usando 502 para isso. Sua semântica indica que algo está errado no lado do servidor e que a solicitação seria bem-sucedida se fosse tentada mais tarde.

    
por 27.01.2018 / 22:38