Compania Google a lansat versiunea web-browserului Chrome 90. În același timp, este disponibilă o versiune stabilă a proiectului liber Chromium, care stă la baza Chrome. Browserul Chrome se distinge prin utilizarea siglelor Google, printr-un sistem de trimitere a notificărilor în cazul de blocare, module pentru redarea conținutului video protejat (DRM), un sistem de instalare automată a actualizărilor și transmiterea parametrilor RLZ în timpul căutărilor. Următoarea versiune Chrome 91 este planificată pentru 25 mai.
Principalele schimbări în Chrome 90:
- Pentru toți utilizatorii, a fost activată accesarea site-urilor în mod implicit prin HTTPS atunci când se introduc numele gazdelor în bara de adrese. De exemplu, când se introduce gazda example.com, site-ul https://example.com va fi deschis în mod implicit, iar dacă apar probleme la deschidere, se va reveni la http://example.com. O setare pentru gestionarea utilizării implicite „https://” este disponibilă la „chrome://flags#omnibox-default-typed-navigations-to-https”.
- A fost implementată posibilitatea de a atribui diferite etichete feronilor pentru a le distinge vizual în panoul desktop. Suportul pentru schimbarea numelui feronului va simplifica organizarea muncii atunci când se utilizează feronuri separate ale browserului pentru diferite sarcini, de exemplu, deschizând feronuri separate pentru sarcini de lucru, interese personale, divertisment, materiale amânate, etc. Numele se schimbă prin opțiunea „Adaugă nume feronului” din meniul contextual care apare prin clic dreapta pe o zonă goală din bara de taburi. După schimbarea numelui, în panoul aplicațiilor va apărea numele selectat, în locul numelui site-ului din tab-ul activ, ceea ce poate fi util atunci când deschideți site-uri identice în feronuri diferite legate de conturi separate. Legătura este păstrată între sesiuni și după repornire, feronurile vor fi restabilite cu numele selectate.

- A fost adăugată opțiunea de a ascunde „Lista de lectură” fără a fi necesară modificarea setărilor din „chrome://flags” („chrome://flags#read-later”). Acum, pentru a ascunde, se poate folosi opțiunea „Show Reading List” din partea de jos a meniului contextual, care apare la clic dreapta pe bara de marcaje. Amintim că în versiunea anterioară, pentru unii utilizatori, apăsând pe stea în bara de adrese, pe lângă butonul „Adaugă marcaj”, apărea un al doilea buton „Adaugă în lista de lectură”, iar în colțul din dreapta al barei de marcaje apărea un meniu „Lista de lectură”, în care sunt enumerate toate paginile adăugate anterior în listă. Atunci când se deschide o pagină din listă, aceasta este marcată ca citită. Pagini din listă pot fi, de asemenea, marcate manual ca citite sau ne citite sau eliminate din listă.
- A fost adăugată suport pentru partajarea rețelei pentru a proteja împotriva metodelor de urmărire a mișcărilor utilizatorului între site-uri, bazate pe stocarea identificatorilor în zone care nu sunt destinate stocării permanente a informațiilor („Supercookies”). Deoarece resursele în memoria cache sunt stocate într-un spațiu de nume comun, independent de domeniul de origine, un site poate determina descărcarea resurselor de pe un alt site prin verificarea existenței acestei resurse în cache. Protecția se bazează pe aplicarea segmentării rețelei (Network Partitioning), esența acesteia fiind adăugarea unei legături suplimentare la înregistrările din cache-urile partajate, domeniu, de pe care se deschide pagina principală, ceea ce limitează domeniul de aplicare al cache-ului pentru scripturile de urmărire a mișcărilor doar la site-ul curent (un script din iframe nu va putea verifica dacă resursa a fost descărcată de pe un alt site). Prețul segmentării este scăderea eficienței cache-ului, ceea ce duce la o creștere nesemnificativă a timpului de încărcare a paginii (maxim 1.32%, dar pentru 80% din site-uri între 0.09-0.75%).
- A fost extinsă lista neagră cu porturi de rețea pentru care se blochează trimiterea de solicitări HTTP, HTTPS și FTP, cu scopul de a proteja împotriva atacului NAT slipstreaming, care permite, atunci când se deschide o pagină web pregătită special de un atacator în browser, stabilirea unei conexiuni de rețea cu server atacantului la orice port UDP sau TCP de pe sistemul utilizatorului, indiferent de utilizarea intervalelor interne de adrese (192.168.x.x, 10.x.x.x). Au fost adăugate porturile interzise 554 (protocol RTSP) și 10080 (folosit în Amanda backup și VMWare vCenter). Anterior, au fost deja blocate porturile 69, 137, 161, 554, 1719, 1720, 1723, 5060, 5061 și 6566.
- A fost adăugată suportul inițial pentru deschiderea documentelor PDF cu formulare XFA în browser.
- Pentru unii utilizatori a fost activată o nouă secțiune de setări „Chrome Settings > Privacy and security > Privacy sandbox”, care permite gestionarea opțiunilor API FLoC, destinat să determine categoria de interese a utilizatorului fără a efectua identificarea individuală și fără a fi legat de istoricul vizitelor pe site-uri specifice.
- A fost asigurat un mesaj de notificare mai clar cu o listă de acțiuni permise, care este afișat atunci când un utilizator se conectează la un profil pentru care este activată gestionarea centralizată.
- Interfața de solicitare a permisiunilor a fost făcută mai puțin intruzivă. Cererile pe care utilizatorul este puțin probabil să le aprobe sunt acum blocate automat cu afișarea unui indicator corespunzător în bara de adrese, prin care utilizatorul poate accesa interfața pentru gestionarea permisiunilor pentru fiecare site.

- A fost activat suportul pentru extensiile Intel CET (Intel Control-flow Enforcement Technology) pentru protecția hardware împotriva executării exploiturilor construite folosind tehnici de programare orientate pe returnare (ROP, Return-Oriented Programming).
- A fost continuată munca pentru a traduce browserul în utilizarea terminologiei incluzive. Fișierul „master_preferences” a fost redenumit în „initial_preferences”, pentru a nu răni sentimentele utilizatorilor care percep cuvântul master ca un indiciu referitor la sclavia strămoșilor lor. Pentru a păstra compatibilitatea, suportul pentru „master_preferences” va fi păstrat o vreme în browser. Anterior, browserul s-a eliberat deja de folosirea termenilor „whitelist”, „blacklist” și „native.”
- În versiunea pentru Android, activarea modului de economie de trafic „Lite” reduce bitrate-ul la încărcarea videoclipurilor atunci când se conectează prin rețelele mobile, ceea ce va permite utilizatorilor cu tarife bazate pe trafic să-și reducă cheltuielile. În modul „Lite” se asigură, de asemenea, comprimarea imaginilor solicitate din resurse accesibile public (fără autentificare) prin HTTPS.
- A fost adăugat un codificator AV1 pentru formatul video, optimizat special pentru utilizarea în videoconferințe, realizate pe baza protocolului WebRTC. Utilizarea AV1 în videoconferințe permite îmbunătățirea eficienței comprimării și asigurarea posibilității de transmitere pe canale cu lățime de bandă de 30 kbps.
- În JavaScript, obiectele Array, String și TypedArrays implementează metoda at(), care permite utilizarea indexării relative (se specifică poziția relativă ca index de masiv), inclusiv cu valori negative în raport cu sfârșitul (de exemplu, „arr.at(-1)” va returna ultimul element al masivului).
- În JavaScript, pentru expresiile regulate a fost adăugat proprietatea „.indices”, care conține un masiv cu pozițiile de început și sfârșit ale grupurilor de corespondențe. Aceasta se completează doar la executarea expresiei regulate cu flag-ul „/d”. const re = /(a)(b)/d; const m = re.exec(‘ab’); console.log(m.indices[0]); // 0 — toate grupurile de corespondență // → [0, 2] console.log(m.indices[1]); // 1 — primul grup de corespondență // → [0, 1] console.log(m.indices[2]); // 2 — al doilea grup de corespondență // → [1, 2]
- A fost optimizată performanța proprietăților „super” (de exemplu, super.x), pentru care este utilizat cache-ul inline. Performanța utilizării „super” este acum aproape de performanța accesării proprietăților obișnuite.
- A fost accelerat semnificativ apelul funcțiilor WebAssembly din JavaScript prin utilizarea desfășurării inline. Această optimizare rămâne experimentală și necesită pornirea cu flag-ul „—turbo-inline-js-wasm-calls”.
- A fost adăugat API-ul WebXR Depth Sensing, care permite determinarea distanței între obiectele din jurul utilizatorului și dispozitivul utilizatorului, de exemplu, pentru a crea aplicații de realitate augmentată mai realiste. Reamintim că API-ul WebXR permite uniformizarea lucrului cu diferite clase de dispozitive de realitate virtuală, de la căști 3D staționare la soluții bazate pe dispozitive mobile.
- A fost stabilizată capacitatea WebXR AR Lighting Estimation, care permite, în sesiuni WebXR pentru realitate augmentată, determinarea parametrilor de iluminare ambientale pentru a conferi modelelor un aspect mai natural și o integrare mai armonioasă cu mediul utilizatorului.
- În modul Origin Trials (funcționalități experimentale care necesită activare separată) au fost adăugate mai multe API-uri, care sunt momentan limitate la platforma Android. Origin Trial implică posibilitatea de a lucra cu API-ul specificat din aplicații încărcate de pe localhost sau 127.0.0.1, sau după înregistrare și obținerea unui token special, care este valid pentru o perioadă limitată pentru un anumit site.
- Metoda getCurrentBrowsingContextMedia(), care oferă posibilitatea de a organiza captarea fluxului video MediaStream, reflectând conținutul Tab-ului curent. Spre deosebire de metoda similară getDisplayMedia(), la apelarea getCurrentBrowsingContextMedia() utilizatorului îi este afișat un dialog simplu pentru a confirma sau bloca operațiunea de transmitere a video-ului cu conținutul Tab-ului.
- API-ul Insertable Streams, care permite manipularea fluxurilor multimedia brute (raw) transmise prin API-ul MediaStreamTrack, cum ar fi datele de la cameră și microfon, rezultatul captării ecranului sau datele intermediare de decodare a codec-ului. Pentru reprezentarea cadrelor brute sunt utilizate interfețele WebCodec, după care se formează un flux similar cu cel generat de API-ul WebRTC Insertable Streams pe baza RTCPeerConnections. Din punct de vedere practic, noul API permite implementarea unor funcționalități precum aplicarea metodelor de învățare automată pentru identificarea sau anotarea obiectelor în timp real sau pentru adăugarea de efecte, cum ar fi decuparea fundalului, înainte de codificare sau după decodarea codec-ului.
- Posibilitatea de a împacheta resurse în pachete (Web Bundle) pentru a organiza o încărcare mai eficientă a unui număr mare de fișiere asociate (CSS, JavaScript, imagini, iframe). Printre dezavantajele suportului existent pentru pachetele de fișiere JavaScript (webpack), pe care se încearcă să le remedieze în Web Bundle: în cache-ul HTTP poate rămâne întregul pachet, dar nu și componentele sale; compilarea și executarea pot începe numai după ce pachetul este complet descărcat; resursele suplimentare, cum ar fi CSS și imaginile, trebuie codificate sub formă de șiruri JavaScript, ceea ce duce la creșterea dimensiunii și la executarea unei alte etape de analiză.
- Suport pentru gestionarea excepțiilor în WebAssembly.
- API-ul stabilizat Declarative Shadow DOM pentru crearea de noi ramuri rădăcină în Shadow DOM, de exemplu, pentru a separa stilul extern importat al unui element și ramura DOM asociată de documentul principal. API-ul declarat propus permite deconectarea ramurilor DOM folosind doar HTML, fără a necesita scrierea de cod JavaScript.
- În proprietatea CSS aspect-ratio, care permite legarea explicită a raportului de aspect la orice element (pentru a calcula automat dimensiunea lipsă atunci când este specificată doar înălțimea sau lățimea), a fost implementată posibilitatea de interpolare a valorilor în timpul animației (tranziții line între un raport de aspect și altul).
- A fost adăugată opțiunea de a reflecta starea elementelor HTML personalizate în CSS prin pseudo-clasa «:state()». Funcționalitatea a fost implementată similar cu capacitatea elementelor HTML standard de a-și schimba starea în funcție de interacțiunea utilizatorului.
- În proprietatea CSS «appearance» a fost adăugat suport pentru valoarea ‘auto’, care este setată în mod implicit pentru <input type=color> și <select>, iar pe platforma Android, suplimentar pentru <input type=date>, <input type=datetime-local>, <input type=month>, <input type=time> și <input type=week>.
- În proprietatea CSS «overflow» a fost adăugat suport pentru valoarea «clip», la setarea căreia conținutul care depășește limitele blocului este tăiat la marginea permisă a depășirii blocului, fără posibilitatea de derulare. Valoarea care determină cât de departe poate depăși conținutul limitele reale ale blocului până începe tăierea este setată prin noua proprietate CSS «overflow-clip-margin». În comparație cu «overflow: hidden», utilizarea «overflow: clip» permite obținerea unei performanțe mai ridicate.


- Înlocuirea antetului HTTP Feature-Policy a fost realizată cu noul antet Permissions-Policy pentru gestionarea delegării de puteri și activarea funcționalităților extinse, care oferă suport pentru valori structurate ale câmpurilor (de exemplu, acum se poate specifica „Permissions-Policy: geolocation=()” în loc de „Feature-Policy: geolocation ‘none'”).
- A fost întărită protecția împotriva utilizării Protocol Buffers pentru atacuri cauzate de executarea speculativă a instrucțiunilor în procesoare. Protecția este realizată prin adăugarea tipului MIME „application/x-protobuffer” în lista tipurilor MIME care nu sunt niciodată ascultate (sniffed), a căror procesare se face prin mecanismul Cross-Origin-Read-Blocking. Anterior, tipul MIME „application/x-protobuf” a fost deja inclus în această listă, dar „application/x-protobuffer” a fost omis.
- În API-ul File System Access a fost implementată posibilitatea de a muta poziția curentă într-un fișier dincolo de sfârșit, umplând intervalul format cu zerouri la scrierea ulterioară prin apelul FileSystemWritableFileStream.write(). Această capacitate permite crearea fișierelor sparse, cu goluri, și simplifică semnificativ organizarea scrierii în fișier a fluxurilor cu sosiri neordonate de blocuri de date (de exemplu, astfel de practici sunt folosite în BitTorrent).
- A fost adăugat constructorul StaticRange cu implementarea unor tipuri ușoare Range care nu necesită actualizarea tuturor obiectelor asociate la fiecare modificare a arborelui DOM.
- S-a realizat posibilitatea de a specifica parametrii width și height pentru elemente <source>, specificate în interiorul elementului <picture>. Această posibilitate permite calcularea coeficientului de raport între aspecte pentru elemente <picture>, similar cu modul în care este realizat pentru <img>, <canvas> și <video>.
- Suportul ne-standardizat pentru canalele de date RTP (RTP Data Channels) a fost eliminat din WebRTC, în locul cărora se recomandă utilizarea canalelor de date bazate pe SCTP.
- Proprietățile navigator.plugins și navigator.mimeTypes returns now always empty value (after Flash support ceased, the need for these properties disappeared).
- Au fost implementate o serie de îmbunătățiri minore în instrumentele pentru dezvoltatori web și a fost adăugat un nou instrument pentru depanarea CSS flexbox.

Pe lângă noutăți și corectarea erorilor, noua versiune a eliminat 37 de vulnerabilități. Multe dintre vulnerabilități au fost identificate prin testări automate utilizând instrumentele AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer și AFL. Nu au fost identificate probleme critice care să permită ocolirea tuturor nivelurilor de securitate ale browserului și executarea de cod în sistem dincolo de mediul sandbox. În cadrul programului de recompensare a vulnerabilităților pentru această versiune, compania Google a oferit 19 premii în valoare totală de 54.000 de dolari (un premiu de 20.000 de dolari, un premiu de 10.000 de dolari, două premii de 5.000 de dolari, trei premii de 3.000 de dolari, un premiu de 2.000 de dolari, un premiu de 1.000 de dolari și patru premii de 500 de dolari). Valoarea a 6 premii nu a fost încă stabilită.
Este important de menționat că ieri, după generarea versiunii corective 89.0.4389.128, dar înainte de lansarea Chrome 90, a fost publicat un nou exploit, care a folosit o vulnerabilitate 0-day nenotată în Chrome 89.0.4389.128. Nu este clar dacă această problemă a fost rezolvată în Chrome 90. Ca și în prima situație, exploit-ul vizează doar o vulnerabilitate și nu conține cod pentru ocolirea izolării sandbox (atunci când se rulează Chrome cu flag-ul „—no-sandbox”, exploit-ul permite deschiderea notepad-ului la accesarea unei pagini web pe platforma Windows). Vulnerabilitatea asociată noului exploit vizează tehnologia WebAssembly.
Sursa: opennet.ro





