Considerações sobre o cabeçalho HTTP Content-MD5

12

Estamos discutindo se deve usar o cabeçalho Content-MD5.

Prós:

  • O CMS permite incluí-lo facilmente com sobrecarga mínima (respostas em cache em mais de 80% dos casos).
  • Isso adicionaria outra camada de proteção contra problemas.

Contras:

  • O cabeçalho Content-Length está sempre presente (mesmo em páginas criadas dinamicamente), portanto o cliente não precisa de outra forma de validação.
  • Até agora, não temos conhecimento de quaisquer problemas causados ​​por corrupção.
  • As verificações MD5 adicionam latência aos tempos de carregamento da página da web.

Pontos:

  • Alguns tipos de mídia incluem sua própria forma de resumo que torna isso desnecessário?
  • Se o TCP já oferece isso, por que foi incluído no padrão HTTP?
  • Quais são os usos existentes na vida real?
  • O cheque MD5 é insignificante?

Não é um problema real que isso seja adicionado aos testes de unidade e implementado, cerca de uma hora de trabalho; no entanto, se for prejudicial, queremos que seja adicionado aos testes de sniff de nível superior usados ​​nas "verificações de integridade" do site.

Metalshark
fonte

Respostas:

10

O TCP já possui correção de erros, mas isso apenas ajuda na camada TCP. Um proxy HTTP intermediário ou um balanceador de carga pode corromper os dados na camada HTTP e depois transmiti-los novamente. Um MD5 HTTP torna possível detectar essa corrupção. A razão pela qual ninguém realmente fala sobre essa necessidade é que o problema é muito raro; a maioria dos proxies HTTP etc "simplesmente funcionam".

Os RFCs fazem alusão à segurança. IMHO isso é tão fraco que deve ser ignorado - se você precisar de algum tipo de segurança e confidencialidade reais, precisará de HTTPS.

Alguns tipos de mídia incluem sua própria forma de resumo que torna isso desnecessário?

Nada realmente bom. Mas alguns erros em fotos, streaming de vídeo etc. geralmente são imperceptíveis para os seres humanos.

Eu diria que depende do caso de uso:

  • Para serviços Web baseados em REST, um resumo adiciona uma camada útil de correção de erros adicional. Veja esta falha da AWS como um exemplo .
  • Para aplicativos que lidam com dados de missão crítica sobre HTTP simples, vale a pena implementá-lo. O Content-MD5 oferece aos clientes a opção de verificar a integridade da transmissão de ponta a ponta.
  • Para sites 'normais' que exibem texto e mídia com valor 'normal', o cabeçalho Content-MD5 não serve para nada. E sinceramente nem sei quantos navegadores convencionais (PC, especialmente móveis) realmente o suportam.
Jesper M
fonte
1
Esse caso de falha da AWS é realmente insidioso. Ele tem alguns anos, mas é realmente um exemplo fascinante de um modo de falha em que eu nunca teria pensado. É muito interessante observar ao usar o armazenamento de dados remotamente. Eu me pergunto sobre algumas das soluções NoSQL e como elas lidam com esses problemas.
artlung 10/09/10
Isso facilita a transmissão da decisão para o cliente. Uma opção como essa agora pode ser oferecida como um "bom de ter", mas não como um critério essencial. Se a Amazon puder implantar um balanceador de carga e causar esses erros, é provável que surja em algum lugar eventualmente e nada pareça pior do que um site inconsistentemente problemático.
Metalshark 10/09/10
Isso realmente depende de onde está o bit invertido. Se for o bit menos significativo, será imperceptível. Mas há uma enorme diferença entre as cores rgb(255, 0, 0)e rgb(127, 0, 0). Com o vídeo bruto, a corrupção de um único pixel será menos perceptível porque está na tela por um breve momento, mas como a maioria dos vídeos on-line usa algoritmos de compactação altamente eficientes, um único bit sendo invertido pode fazer com que metade da imagem seja corrompida ou deslocada tela.
Lèse majesté
Além disso, como você disse, os bancos devem usar apenas HTTPS, então também não há sentido em usá-los Content-MD5, pois o SSL / TLS já fornece um resumo de mensagens na camada de aplicativos?
Lèse majesté 10/09/10
1
@ Lèse majesté: Quanto aos erros de bit, concordo no caso abstrato. Mas lembre-se de que a maioria dos streaming de vídeo fx usa um transporte específico de aplicativo sobre UDP ou TCP para oferecer a troca 'certa' entre correção de erro e velocidade - e o streaming de vídeo não seria um caso de uso para o Content-MD5. Em relação aos bancos, devemos usar HTTPS, concordo e estou reformulando para tornar mais claro.
Jesper M
1

As verificações MD5 adicionam latência aos tempos de carregamento da página da web.

Se verdadeiro (e a latência não é totalmente trivial), eu diria que não valeu a pena.

Em geral, acredito que o último cabeçalho modificado é mais comumente usado para determinar se uma página foi alterada. Supondo que você forneça um valor significativo, não vejo necessidade do cabeçalho content-md5.

Kris
fonte