Um report.xlsx hipotético tem 8 KB e abre como uma página de início de sessão. O programa guardou um ficheiro com sucesso, mas nunca obteve a folha de cálculo pretendida. O nome do ficheiro é escolhido localmente; não é prova do que chegou.

Torne a aceitação um passo separado antes de publicar o download temporário:

  1. Exija uma transferência bem-sucedida e o estado de resposta esperado. Preserve o erro em vez de tratar os bytes escritos antes dele como completos.
  2. Compare o conteúdo com o tipo de artefacto esperado. Uma página de início de sessão ou de filtragem pode devolver 200. O Content-Type pode estar errado, e um prefixo HTML numa folha de cálculo é um aviso que exige investigação. Um ficheiro que começa com uma linha de estado HTTP aponta, em vez disso, para um enquadramento de resposta em bruto.
  3. Valide todos os bytes guardados com uma soma de verificação ou assinatura de confiança, quando disponível. Só depois de passarem as verificações exigidas deve a aplicação publicar ou utilizar o ficheiro final.

Calcular um hash sem um valor esperado identifica apenas os bytes recebidos. Uma soma de verificação não assinada obtida pelo mesmo caminho não fidedigno pode partilhar a fraqueza do artefacto; use uma expectativa de confiança independente.

Tenha também cuidado com as comparações de tamanho. Um cliente HTTP pode descodificar a codificação do conteúdo durante a leitura, pelo que o comprimento resultante do ficheiro pode divergir legitimamente de um cabeçalho que descreva a mensagem codificada. Compare a expectativa do editor com a representação efetivamente guardada.

Se uma tentativa falhar, conserve a saída temporária apenas para um recomeço deliberado ou descarte-a. Deixar bytes incompletos no caminho final obriga o programa seguinte a adivinhar se são utilizáveis.

Artigos relacionados