Siguri
Përmbajtja e përzier
Burime të ngarkuara mbi HTTP brenda një faqeje HTTPS; shfletuesit i bllokojnë ose i paralajmërojnë.
Çfarë është
Përmbajtje e përzier quhet çdo burim që ngarkohet mbi http:// brenda një faqeje të shërbyer mbi https://.
Shfletuesit e ndajnë në dy klasa. Aktive — skripta, stile, iframe-t — bllokohen plotësisht, sepse mund ta ndryshojnë faqen. Pasive — imazhe, video, audio — lejohen në disa raste me paralajmërim, ose po ashtu bllokohen.
Rezultati është që një faqe me përmbajtje të përzier aktive thjesht nuk punon: skripti nuk ngarkohet, stili nuk zbatohet, dhe në konsolë rri një gabim që askush nuk e sheh.
Pse ka rëndësi
Sulmi që e bën këtë të rrezikshme është i thjeshtë: kushdo midis vizitorit dhe serverit — një pikë Wi-Fi publike, një ofrues interneti, një rrjet i komprometuar — mund ta zëvendësojë atë skedar HTTP me çfarëdo. Nëse ai skedar është JavaScript, sulmuesi ekzekuton kod brenda faqes sate, me të drejtat e saj: lexon cookie-t, ndryshon formularët, dërgon të dhëna gjetkë.
Pra një skedar i vetëm mbi HTTP e anulon gjithë mbrojtjen e HTTPS-së për atë faqe.
Pasoja e dukshme është më e butë por po aq e kushtueshme: dryni në shiritin e adresës zhduket ose ndryshon, dhe vizitori e sheh që diçka nuk shkon.
Shkaku më i shpeshtë është migrimi i papërfunduar: sajti kaloi në HTTPS, por URL-të e ngurta te shabllonet dhe te baza e të dhënave mbetën http://.
Si rregullohet
- Ndrysho URL-të te `https://` kudo. Shumica janë te baza e të dhënave, jo te kodi.
- Përdor URL relative për burimet e veta:
/img/logo.svg. - Nëse një burim i jashtëm nuk ka HTTPS, hiqe ose zëvendësoje. Nuk ka zgjidhje tjetër të sigurt.
- Shto kokën e raportimit për të gjetur atë që ke humbur: ``
Content-Security-Policy: upgrade-insecure-requests`` - Kontrollo konsolën e shfletuesit te disa faqe reale; aty listohet çdo burim i bllokuar.
- Kujdes me përmbajtjen e redaktuar nga përdoruesit — imazhet e ngjitura me URL HTTP janë burim i pafund i këtij problemi.
Si e mat ky mjet
SecurityAnalyzer::checkMixedContent() (services/SecurityAnalyzer.php:114) kthehet menjëherë me 0 nëse faqja nuk është HTTPS (:116). Për faqe HTTPS, kontrollon gjashtë atribute: //img/@src, //script/@src, //link/@href, //iframe/@src, //video/@src, //audio/@src (:124), dhe numëron sa prej tyre nisin me http://.
Dy dalje: zero (:138, kaluar), një ose më shumë (:140, paralajmërim me ndikim të lartë dhe numrin e burimeve).
Çfarë NUK e mat
Kontrollohen gjashtë atribute; gjithçka tjetër nuk shihet. Nuk mbulohen: //source/@src dhe //track/@src brenda <video> dhe <audio>, //embed/@src, //object/@data, atributet srcset, poster, formaction, action te formularët, URL-të brenda style inline (background-image: url(http://…)), dhe çdo burim që ngarkohet nga JavaScript-i.
Nuk bëhet dallim midis përmbajtjes aktive dhe pasive, ndonëse pasoja e tyre është krejt e ndryshme — një skript i bllokuar e prish faqen, një imazh jo.
Për faqe HTTP kontrolli nuk kryhet fare dhe as nuk numërohet te totali (services/SecurityAnalyzer.php:116), prandaj nota e sigurisë e një faqeje HTTP llogaritet mbi një kontroll më pak.
Kodi që e kryen matjen
services/SecurityAnalyzer.php:114— SecurityAnalyzer::checkMixedContentservices/SecurityAnalyzer.php:124— queries