VPN conectat, dar conținutul mixt rămâne blocat: ce trebuie corectat
Sortează adresa URL blocată după cine a produs-o, repară referința sau trimite-o proprietarului gazdei, apoi confirmă corectura din consola browserului.
Jumătate din pagină se randează, o foaie de stil apare gri în panoul Rețea, iar clientul VPN raportează în continuare un tunel sănătos. Toate trei observațiile sunt adevărate simultan, pentru că browserul a judecat o cerere făcută de pagină, iar tunelul nu a avut niciun cuvânt în acea judecată. Ce închide cazul este o decizie, nu o setare: repară referința, escaladeaz-o către cine deține gazda sau renunță la dependență. Fiecare dintre aceste opțiuni are un test ieftin, iar alegerea celei greșite consumă un ciclu de suport.
De ce tunelul nu poate acoperi o subresursă
Conținutul mixt începe cu un document HTTPS care cere o subresursă prin HTTP simplu. Fiecare adresă URL este judecată după propria schemă, așa că protecția documentului părinte nu se extinde niciodată la o cerere copil. Criptarea adăugată sub browser schimbă ce circulă pe fir, nu http:// pe care l-a cerut marcajul.
Browserele actuale împart aceste cereri în două grupe și le tratează diferit. Scripturile, foile de stil, iframe-urile și apelurile prin fetch, XMLHttpRequest sau WebSocket sunt refuzate direct, fără nicio încercare de actualizare în prealabil. Imaginile, audio și video sunt rescrise în https:// și cerute din nou, iar încărcarea este abandonată când acea obținere sigură eșuează. O adresă URL de subresursă a cărei gazdă este o adresă IP simplă este exceptată de la actualizare, așa că o imagine HTTP pe o gazdă IP rămâne blocată în loc să fie reparată în tăcere. Împărțirea, inclusiv acea excepție pe partea actualizabilă, este documentată în ghidul Mozilla despre conținut mixt. Chrome aplică un refuz similar descărcărilor nesigure pornite dintr-o pagină sigură, de aceea un link PDF poate muri în timp ce pagina din jur pare intactă.
Rândul gri este, așadar, dovada că controlul funcționează, nu dovada că tunelul a scurs text clar. Tratează rândul ca o constatare care indică o singură referință, nu toată pagina.
Stabilește cui îi aparține referința nesigură
Sortează adresa URL incriminată după locul unde este produsă înainte de a modifica ceva. Acel răspuns decide dacă poți livra azi o corectură, dacă un furnizor trebuie să publice una, sau dacă dependența trebuie să părăsească pagina. Citește-o din coloana Initiator din panoul Rețea, pentru că marcajul de pe ecran este adesea asamblat la rulare.
| De unde vine adresa URL | Cine o poate corecta | Primul pas |
|---|---|---|
| Codificată direct într-un șablon sau un parțial pe care îl publici | Tu | Înlocuiește-o cu forma https:// și apoi golește cache-ul |
| Injectată de un manager de etichete sau de un pachet al furnizorului | Furnizorul, cu tichetul tău | Trimite adresa URL exactă, tipul cererii și linia din consolă |
| Servită doar pe portul 80 fără un ascultător TLS | Proprietarul gazdei | Cere TLS, pune în față ceva ce administrezi tu, sau renunță la ea |
Când gazda răspunde deja pe 443 și doar referința spune http, reparația este locală: schimbă referința, golește cache-ul paginii și confirmă că rândul devine https. O gazdă care ascultă doar pe portul 80 nu poate fi adusă în conformitate editând-o, așa că resursa se mută, este pusă în spatele a ceva ce controlezi, sau dispare. O adresă URL injectată de un manager de etichete apare în continuare chiar și când șablonul tău este curat, iar acel caz aparține unui tichet cu adresa URL exactă și linia din consolă atașate. Să le spui angajaților să permită conținut nesigur nu este niciuna dintre aceste opțiuni, pentru că dezactivează verificarea pentru fiecare site pe care îl vizitează acel profil de browser.
Repară referința în locul setării browserului
Reîncarcă fluxul care eșuează păstrând jurnalul de rețea și filtrează panoul după gazda pe care o suspectezi. Consola numește adresa URL și directiva, ceea ce lămurește dacă o cerere a fost refuzată sau actualizată înainte să atingi un șablon.
curl -sSI https://cdn.example.org/vendor.js | head -n 1
curl -sS -o /dev/null -w '%{http_code} %{url_effective}\n' -L https://cdn.example.org/vendor.jsDouă controale de sprijin merită cunoscute, iar niciunul nu înlocuiește reparația. Un antet Content-Security-Policy cu upgrade-insecure-requests face browserul să rescrie adresele URL de subresursă http înainte să părăsească pagina, ceea ce prinde referințe vechi pe care nu le-ai găsit încă. Cererea rescrisă eșuează în continuare când gazda țintă nu servește HTTPS, așa că antetul schimbă doar ce adresă URL încearcă browserul. HSTS se aplică pe gazdă, ceea ce înseamnă că o politică pe propriul domeniu nu face nimic pentru un CDN terț care nu a trimis niciodată antetul. După o modificare de șablon golește cache-ul paginii și caută numele vechi de gazdă în HTML-ul randat, pentru că aceeași adresă URL poate veni și printr-un parțial, un șir de traducere sau un câmp din baza de date.
Urmărește și redirecționările, pentru că un lanț care începe pe https:// poate ateriza într-o locație http:// și browserul judecă ultimul salt. Forma -L celei de-a doua comenzi de mai sus tipărește acea adresă URL efectivă pentru tine. Dacă ultimul salt este http pur, referința este în continuare greșită chiar dacă linkul pe care l-ai editat părea în regulă.
Confirmă pagina cu consola și panoul Rețea
Reîncarcă cu cache-ul dezactivat și parcurge din nou fluxul, inclusiv butoanele care încarcă conținut la cerere. O primă încărcare a paginii ascunde widgeturi leneșe, dale de hartă și scripturi de player care apar doar după un clic. Consola nu ar trebui să conțină intrări de conținut mixt, iar fiecare rând pe care l-ai atins ar trebui să arate https. Capturează consola și rândul cererii înainte de a închide tichetul, pentru că acea stare este greu de reconstruit după următorul deploy.
Când resursa aparține altcuiva, trimite patru lucruri: adresa URL exactă, tipul cererii, textul din consolă și pagina unde apare. Ascunde identificatorii de sesiune din tot ce lipești într-un tichet. Un raport care spune doar că imaginile sunt stricate nu îi dă proprietarului nimic de căutat.
Tunelul își face în continuare propria treabă în timp ce corectura stă în referința care a produs cererea. Caută încă o dată numele de gazdă în șablon și în pachetul furnizorului după deploy, și închide cazul doar când nu mai rămâne nicio intrare de conținut mixt blocată în consolă.