How is data downloaded from HTTP or FTP get checked for corruption?
Di per sé, per nulla .
I protocolli HTTP e FTP come non offrono integrità¹.
Tuttavia, HTTP e FTP vengono solitamente utilizzati in cima al TCP / IP, che hanno entrambi i checksum nei loro trasporti - se un checksum TCP fallisce, il sistema operativo scarterà semplicemente il pacchetto TCP e lo richiederà di nuovo. Quindi non c'è bisogno di HTTP per implementare anche il controllo di integrità.
Quando esegui il tunneling di qualsiasi cosa (incluso HTTP e FTP) su TLS, ottieni un ulteriore livello di controlli di integrità.
So how does FTP and HTTP ensure that data is not corrupt?
Non lo fanno. Di solito è compito del trasporto garantire l'integrità, non il lavoro del protocollo dell'applicazione.
¹ è presente un'intestazione opzionale in HTTP 1.1 che consente al server di specificare un checksum, ma dal momento che è praticamente impossibile per le risorse generate al volo e ha un costo elevato per i file di grandi dimensioni e presenta un piccolo vantaggio rispetto a molto più checksum granulare TCP, è usato raramente. Non so nemmeno se i browser lo supportano comunemente.
Vorrei aggiungere che è ovviamente più difficile provocare una collisione all'interno di MD5 (che viene utilizzata in queste intestazioni) piuttosto che creare pacchetti TCP, se si volesse modificare intenzionalmente il trasferimento. Ma se questo è il tuo scenario di attacco, TLS è la risposta, non i checksum HTTP.