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:
SetEnv ap_trust_cgilike_cl 1e poi attivare la configurazione e riavviare il servizio apache:
a2enconf fix-content-length
systemctl reload apache2Se invece neanche le risorse statiche vengono servite correttamente se passato il parametro range, es:
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:
apt install libapache2-mod-security2
a2enmod security2
systemctl restart apache2assicurandosi 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