Apache+PHP: Content-Length header mancante
Stavo lavorando su un File Manager PHP/JS che utilziza pdfjs per mostrare l’anteprima dei pdf. Inizialmente abbiamo caricato file molto grandi e funzionava tutto regolarmente, ma da qualche mese ci siamo trovati in difficoltà nel visualizzare i contenuti, perché il browser tentava di scaricare tutto il pdf prima di mostrarlo.
Ho fatto una serie di ricerche ed effettivamente pdfjs gestisce già da tempo il lazy loading dei pdf, grazie agli header Accept-Ranges e Content-Length e dopo qualche verifica mi sono accorto che effettivamente mancava l’header Content-Length nella risposta del server. Questo succede perché il file pdf non viene recuperato staticamente sul server, ma servito da uno script PHP che controlla se si hanno o meno i privilegi per visualizzarlo.
A questo punto doveva essere cambiato qualcosa lato server; ho provato a controllare tra le segnalazioni per apache ed è saltata fuori questa cosa: #68973: Content-Length header missing in 2.4.59 is a breaking change. In pratica con il rilascio di Apache 2.4.59 è stato introdotto un fix di sicurezza per la segnalazione CVE-2024-24795 che serve a prevenire che script CGI (compreso PHP in modalità fpm) inviino l’header Content-Length.
Fortunatamente c’è una variabile d’ambiente che possiamo impostare in apache per ripristinare il funzionamento precedente: ap_trust_cgilike_cl.
Possiamo quindi creare un file chiamato /etc/apache2/conf-available/fix-content-length.conf con il seguente contenuto:
1 |
SetEnv ap_trust_cgilike_cl 1 |
e poi attivare la configurazione e riavviare il servizio apache:
1 2 |
a2enconf fix-content-length systemctl reload apache2 |
Se invece neanche le risorse statiche vengono servite correttamente se passato il parametro range, es:
1 |
curl https://www.smsoft.it/ -H "Range: bytes=0-8" |
deve restituire solo <!DOCTYPE mentre se invece restituisce tutta la pagina va installato anche mod_security:
1 2 3 |
apt install libapache2-mod-security2 a2enmod security2 systemctl restart apache2 |
assicurandosi che la direttiva SecResponseBodyAccess in /etc/modsecurity/modsecurity.conf sia impostata ad On
enjoy!
Ti interessa acquistare un dominio a prezzi ultraconvenienti? clicca qui
Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂
Commenta