Mână care afișează mesajul „Instrumente de suprapunere afișate”, simbolizând activarea instrumentelor de suprapunere pentru accesibilitate.

Descrierea imaginii: O mână care dezvăluie mesajul „Instrumente de suprapunere afișate”, simbolizând afișarea instrumentelor de suprapunere pentru accesibilitate.

Am interceptat toate solicitările provenite de la cinci instrumente de accesibilitate. Iată ce efectele reale pe care le au asupra site-ului tău.

Am interceptat toate solicitările provenite de la cinci instrumente de accesibilitate. Iată ce efectele reale pe care le au asupra site-ului tău.

Un audit tehnic independent al patru suprapuneri de accesibilitate și al unei soluții destinate exclusiv monitorizării – ce modifică acestea de fapt, ce ascund de utilizatorii cu dizabilități și de ce peste 1.000 de companii care utilizează suprapuneri au fost date în judecată numai în anul 2024.

Ce am descoperit când ne-am uitat înăuntru

🔴
141 de butoane de finalizare a comenzii, linkuri către produse și comenzi ale coșului de cumpărături ascunse utilizatorilor nevăzători
Amazon Pay, Shop Pay, Klarna, câmpurile de introducere a cantității din coș, rezultatele căutării – toate acestea sunt invizibile pentru cititoarele de ecran. Utilizatorii văzători văd totul. Utilizatorii nevăzători primesc o versiune filtrată și redusă a aceleiași pagini.
🤖
5.066 de descrieri ale imaginilor generate de IA au fost publicate fără a fi verificate de vreun om
Doar 2 din 5.068 de texte alternative au fost aprobate de o persoană. IA a descris logo-ul unei companii drept „un semn albastru și galben”, iar un banner al unui produs drept „text”.
⚖️
26% dintre modificările aduse ferestrelor suprapuse reduc, de fapt, accesibilitatea site-ului
Cele 203 de reguli de remediere introduc noi încălcări ale WCAG în timp ce încearcă să remedieze pe cele existente – inclusiv până la 705 de noi neconformități de nivel A cauzate de ascunderea elementelor funcționale.
🕐
75% din timpul de rețea al unei ferestre suprapuse este dedicat urmăririi comportamentale, nu accesibilității
Cele 58 de solicitări POST de analiză au consumat 25,5 din cele 33,9 secunde. O altă fereastră suprapusă a irosit 38,8 secunde pe cererile de verificare preliminară CORS – o pierdere de timp pură din punct de vedere tehnic.
💰
În 2024, 1.023 de companii care utilizau suprapuneri de accesibilitate au fost date în judecată. Un furnizor a fost amendat cu 1 milion de dolari de către FTC.
25% din toate procesele intentate în temeiul ADA au menționat suprapunerile ca fiind bariere, nu soluții. În 2025, numărul proceselor legate de suprapuneri se ridică la peste 100 pe lună.
🔒
Overlay-urile au acces complet de scriere la pagina de finalizare a comenzii – aceeași interfață exploatată de Magecart
Am confirmat existența unor reguli de securitate care vizează #cardNumber, #billingState și butoanele de plată. Un CDN de tip overlay compromis ar putea sustrage datele cardurilor de pe fiecare site al clienților.

Toate constatările se bazează pe traficul de producție interceptat – 924 de solicitări, 579 de corpuri complete de răspuns, provenite de la 14 site-uri de comerț electronic active, precum și instantanee DOM salvate, care includ modificările de suprapunere.


Cum am procedat: Metodologia de cercetare

Majoritatea analizelor privind instrumentele de accesibilitate se bazează pe afirmații de marketing, pe documentația furnizorilor sau pe teste superficiale. Noi am adoptat o abordare fundamental diferită: am interceptat fiecare octet de date care circula între browser și serverele fiecărui instrument, am extras fișierele JavaScript de remediere și datele de remediere propriu-zise și am analizat exact ce face fiecare instrument asupra DOM-ului activ al site-urilor de comerț electronic aflate în producție.

Configurația tehnică

Am implementat mitmproxy – un proxy HTTPS open-source – configurat să captureze conținutul complet al cererilor și răspunsurilor pentru întregul trafic către domeniile CDN și API ale instrumentelor. Am instalat certificatul CA rădăcină al proxy-ului în browser pentru a permite interceptarea transparentă a traficului HTTPS, apoi am lansat o instanță dedicată de Chrome redirecționată exclusiv prin proxy. Am configurat filtre de domeniu pentru a captura doar traficul către serverele instrumentelor de accesibilitate – asigurându-ne că analizăm doar ceea ce injectează aceste instrumente, nu traficul propriu al site-urilor.

Apoi am navigat pe 14 site-uri de comerț electronic active, așa cum ar face un utilizator obișnuit: am încărcat pagina de start, am accesat paginile cu lista de produse, am vizualizat paginile cu detalii despre produse, am adăugat articole în coș, am trecut la finalizarea comenzii, am vizitat paginile de cont și de înregistrare și am interacționat cu ferestrele modale, caruselurile și funcția de căutare. Fiecare sesiune de navigare a fost capturată ca fișier HTTP Archive (HAR) cu corpuri de răspuns complete – același format pe care browserele îl utilizează intern, dar îmbogățit cu conținutul real al fiecărui fișier JavaScript, al fiecărei foi de stil CSS, al fiecărei configurații JSON și al fiecărui răspuns API furnizat de instrumente.

După capturare, am creat scripturi de analiză în Python care au analizat conținutul fiecărui răspuns, au clasificat fiecare fișier în funcție de instrument și funcție, au extras fiecare selector CSS din definițiile de remediere, au numărat fiecare tipar de manipulare DOM din codul JavaScript, au identificat fiecare caz în care conținutul era ascuns de tehnologiile de asistență și au asociat fiecare remediere cu zona paginii pe care o afectează (procesul de plată, coșul de cumpărături, lista de produse, navigarea etc.).

01Configurarea proxy-ului

mitmproxy interceptează traficul HTTPS cu conținutul complet al răspunsurilor

02Captarea traficului

Am vizitat 14 site-uri de toate tipurile

03Extragerea datelor

A extras toate fișierele JS, CSS și JSON din răspunsuri

04Analiza codului

Reguli de remediere analizate, selectori, modificări ARIA

05Clasificare

Clasificate în funcție de zona paginii, nivelul de risc și riscul de rupere

Proxy-ul a capturat 924 de solicitări HTTP cu 579 de corpuri complete de răspuns în cadrul a trei sesiuni de captură – incluzând fiecare script de remediere specific site-ului, fiecare fișier JSON de remediere, fiecare fișier de configurare și fiecare încărcătură de date analitice. De asemenea, am salvat instantanee DOM complete ale paginilor cu modificări de suprapunere aplicate, ceea ce ne-a permis să inspectăm valorile exacte ale etichetelor aria și atributele de date ale furnizorilor injectate în timpul rulării. Apoi, am scris scripturi de analiză automatizate pentru a analiza JavaScript-ul, a număra fiecare model de modificare DOM, a extrage fiecare selector CSS, a clasifica fiecare remediere în funcție de zona paginii și a identifica fiecare instanță de conținut ascunsă de tehnologia de asistență.

924
Solicitări HTTP capturate
579
Corpurile răspunsurilor extrase
14
Site-uri de comerț electronic active
3
Sesiuni de captură independente

Ce am analizat

Tipul sculeiFișiere JSCSSJSON/DateTotal analizatSite-uri
Suprapunere A20718.633 KB5 (modă, ciocolată, bagaje, genți de mână)
Suprapunere B104306.739 KB3 (telecomunicații, agenție web, sectorul bancar)
Suprapunere C2054.713 KB3 (modă, ceasuri, produse de cofetărie)
Suprapunere D11103.320 KB3 (jucării, băuturi, articole de papetărie)
Instrument de monitorizare23042.334 KB8 proiecte

Printre clienții noștri s-au numărat mari lanțuri de magazine de modă, mărci de ciocolată de lux, producători de bagaje, magazine de genți de mână de designer, companii producătoare de jucării, un furnizor de servicii de telecomunicații, o bancă națională, precum și mărci din domeniul băuturilor, al articolelor de papetărie, al ceasurilor și al produselor de cofetărie – acoperind atât piețele din UE, cât și cele din SUA.

O observație importantă: Niciun cadru de aplicare la nivel de pagină în niciun strat de accesibilitate

Una dintre cele mai surprinzătoare constatări a ieșit la iveală înainte chiar de a analiza regulile de remediere: fiecare suprapunere de accesibilitate încarcă întregul set de remedieri pe fiecare pagină în parte, indiferent de tipul paginii. Remediile specifice procesului de plată se activează pe pagina de start. Regulile privind cantitatea din coș se execută pe pagina „Despre noi”. Remediile pentru casetele de produse se execută pe formularul de autentificare.

InstrumentCe se încarcă pe fiecare paginăLa nivel de pagină?Execuție ratată
Suprapunere AToate cele 383 de reguli de remediere (cel mai mare site)NuS-au aplicat remedieri la procesul de finalizare a comenzii, coșul de cumpărături și produsele pe pagina principală, pagina de întrebări frecvente și paginile de contact
Suprapunere BFișier JSON complet de remediere de 1,25 MBNu4.974 de texte alternative pentru imagini + 2.000 de intrări PDF încărcate pe fiecare pagină
Suprapunere CPachet monolitic de 794 KBNuAcelași cod, aceiași observatori, aceiași selectori generici – pe fiecare pagină
Suprapunere DConfigurație completă + motor de 649 KBNuToate selectorii sunt evaluați chiar dacă elementele țintă nu există pe pagina respectivă
Monitorizare4,2 KB script + 1 balizăN/A – fără remedieriNiciuna – scanarea se efectuează doar la cerere, nu pentru fiecare vizitator

Aceasta înseamnă că, pe site-ul furnizorului de servicii de telecomunicații, fiecare vizitator al oricărei pagini descarcă un fișier JSON de 1,25 MB care conține 4.974 de descrieri de imagini și 2.000 de intrări de remediere în format PDF – chiar și pe paginile care nu conțin nicio imagine. Pe site-ul retailerului de genți de mână de designer, 383 de reguli de remediere DOM se execută la fiecare încărcare a paginii, încercând să potrivească selectori care există doar pe anumite tipuri de pagini. Când un selector specific procesului de plată, precum #cardNumber, nu se potrivește pe pagina de start, motorul de remediere al overlay-ului continuă să consume resurse CPU pentru a-l evalua – multiplicat cu sute de reguli, acest lucru creează o pierdere măsurabilă de performanță la fiecare vizualizare a paginii.

Scanarea Overlay A acoperă doar 4,5% din sesiuni

Analizând datele POST din Overlay A, am descoperit un câmp care indica rata reală de eșantionare a scanării:

// From intercepted analytics POST to Overlay A’s report endpoint: { “phase”: “after”, “scanId”: “6ede145b-b78e-…”, “samplingRate”: 0.045, “scannerVersion”: “11.0.28”, “evaluationCount”: 464684, “scanTimingReport”: { “wallDuration”: 858.7 } }

O rată de eșantionare de 0,045 înseamnă că doar 4,5% dintre sesiunile vizitatorilor declanșează o scanare de conformitate pe site-ul acestui retailer de modă. Pe un alt site – al unei mărci de ciocolată de lux – rata a fost chiar mai mică: doar 1,7%. Este posibil ca furnizorul de soluții de suprapunere să efectueze o scanare inițială mai cuprinzătoare în timpul procesului de integrare sau configurare, iar apoi să reducă rata de eșantionare pentru monitorizarea continuă. Cu toate acestea, implicațiile pentru operațiunile zilnice rămân semnificative.

Codul pachetului de pornire al suprapunerii de accesibilitate confirmă existența a trei niveluri operaționale: ReleaseVersionReport (scanare completă + raport – procentul eșantionat), ShadowVersionReport (scanare în fundal, fără acțiuni vizibile pentru utilizator) și RunReleaseFixesNoReport (aplicarea tuturor regulilor de remediere, dar fără efectuarea vreunei scanări). Aceasta înseamnă că, în timpul funcționării normale, marea majoritate a vizitatorilor dvs. primesc modificări ale DOM-ului care nu sunt validate pe durata sesiunii lor.

Riscul concret este următorul: dacă o implementare a site-ului modifică structura DOM și încalcă una sau mai multe reguli de remediere, rata redusă de eșantionare continuă înseamnă că această regresie poate rămâne nedetectată pentru o perioadă îndelungată. Având în vedere că sunt scanate doar 1,7–4,5% din sesiuni, o remediere defectuoasă ar putea afecta mii de vizitatori înainte ca următoarea sesiune eșantionată să se declanșeze pe pagina afectată și să semnaleze problema. În acest interval, fiecare vizitator primește remedieri învechite sau direcționate greșit – iar nici operatorul site-ului, nici furnizorul de overlay-uri nu pot fi conștienți de problemă.


Concluziile: Corectarea regulilor și a modificărilor DOM

1,058
Reguli de remediere DOM
(Suprapunere A, 5 site-uri)
9,070
Înregistrări privind remedierea
(Suprapunere B, 3 amplasamente)
0
Modificări DOM în „
” (Instrument de monitorizare)

Suprapunere A: Fișiere de remediere JavaScript pentru fiecare site

Această suprapunere menține un fișier JavaScript separat pentru fiecare site al clientului, care conține reguli destinate anumitor selectori CSS. În cele cinci site-uri pe care le-am analizat, am constatat:

Tipul site-uluiReguli de remediereascunde de ATrol=pres/niciunulalt=””Întotdeauna activ
Magazin de modă59121342
Marcă de ciocolată4523445
Producător de bagaje1766277176
Genți de mână de marcă (Marea Britanie)360573015358
Genți de mână de marcă (UE)383645434381
Total1,023141115631,002
🔴 141 de elemente ascunse de cititoarele de ecran

Acesta este unul dintre cele mai dăunătoare modele întâlnite în instrumentele de suprapunere pentru accesibilitate: hideFromAT() funcția elimină complet elementele din arborele de accesibilitate. Elementul rămâne vizibil pe ecran, dar pentru o persoană nevăzătoare care utilizează un cititor de ecran, nu există. Am constatat că butoanele de plată, elementele de control ale coșului de cumpărături, linkurile către produse, rezultatele căutării, evaluările cu stele, traseul de navigare și formularele de finalizare a comenzii erau ascunse.

Am constatat, de asemenea, că 7 cazuri unde șirul literal "true" a fost administrat sub formă de aria-label – o eroare de cod în care s-a transmis o valoare booleană în loc de text descriptiv. Cititoarele de ecran anunță „buton, true” – ceea ce nu are absolut niciun sens. Pe un alt site, cuvântul „Search” a fost scris greșit, ca „Seacrh”, într-o etichetă inserată.

Suprapunere B: Text alternativ generat de IA la scară largă

Această suprapunere descarcă fișiere JSON de dimensiuni mari care conțin descrieri ale imaginilor generate de inteligența artificială. De pe trei site-uri:

5,068
Texte alternative generate de IA
2
Aprobat de un om
ă 0,04%
241
Descrieri vagi
(„text”, „fișier”, „oraș”)

Exemple concrete din datele privind remedierea:

// Textul alternativ efectiv din fișierul JSON de remediere: alt=”text” ← pentru o imagine de banner promoțional alt=”fișier” ← pentru o captură de ecran a paginii de start alt=”city” ← pentru o imagine principală a unei capitale alt=”un semn albastru și galben” ← pentru un logo al companiei alt=”Un dreptunghi negru simplu” ← pentru o pictogramă de navigare

323 de descrieri depășeau 125 de caractere – ceea ce ducea la o citire excesiv de detaliată din partea cititorului de ecran, care rămânea la o singură frază timp de 10–15 secunde pentru fiecare imagine. 156 dintre ele începeau în mod redundant cu „imaginea lui” – un anti-model conform WCAG, întrucât cititoarele de ecran anunță deja tipul elementului.

Instrument de monitorizare: Fără modificări – verificat în codul sursă

🢢 Verificarea codului sursă

Am extras scriptul complet al instrumentului de monitorizare, de 4,2 KB, și am analizat fiecare funcție. Rezultat: zero atribute `aria-hidden`, zero `innerHTML`, zero `MutationObserver`, zero modificări ale rolurilor, zero interceptări ale evenimentelor de la tastatură. Acesta transmite doar adresa URL a paginii și tipul dispozitivului – fără ID-uri de utilizator, fără token-uri de sesiune, fără amprentare digitală.


Ce înseamnă „Ascunde de AT” pentru utilizatorii reali

Atunci când o suprapunere ascunde un element de tehnologiile de asistență, elementul rămâne vizibil pe ecran, dar devine complet invizibil pentru cititoarele de ecran. Am clasificat fiecare element ascuns în funcție de zona paginii pe care o afectează:

Elemente ascunse de cititoarele de ecran – pe zone ale paginii (Suprapunere A, 5 site-uri)
Imagini și conținut media
18 elemente ascunse
Pagini de produse
15 elemente ascunse
Navigare
12 elemente ascunse
Altele
10 elemente ascunse
Finalizare comandă
8 elemente ascunse
Carusele
8 elemente ascunse
Verbe modale
7 elemente ascunse
Coș
4 elemente ascunse
Subsol
2 elemente ascunse

Date provenite din fișierele de remediere active.js reale, extrase pentru fiecare site prin intermediul mitmproxy. Fiecare valoare reprezintă un selector CSS unic vizat de funcția hideFromAT().

Pe pagina de finalizare a comenzii unui magazin de lux, elementele ascunse de cititoarele de ecran includeau:

# Metode de plată ascunse utilizatorilor nevăzători: .amazon-pay-onetime-buttonASCUNS #shop-pay-button-container buttonASCUNS .checkout-form-area .payment-skeletonASCUNS (×2) .express-checkout-dividerASCUNS # Descoperirea produselor ascunsă utilizatorilor nevăzători: #product-search-results > aASCUNS .product-info .item-image aASCUNS .ratings-container svgASCUNS

Astfel, instrumentele de suprapunere pentru accesibilitate creează o experiență de cumpărături pe două niveluri: utilizatorii văzători văd toate opțiunile de plată și pot alege între card de credit, PayPal, Amazon Pay, Shop Pay și Klarna. Utilizatorii nevăzători pot găsi doar metodele de plată pe care suprapunerea nu le-a ascuns. La un magazin online de modă, câmpul de introducere a cantității din coș și butonul de actualizare erau amândouă ascunse – un utilizator nevăzător putea adăuga articole, dar nu putea modifica cantitățile.

Aceasta ridică o întrebare fundamentală: o suprapunere care ascunde butoanele de plată de utilizatorii nevăzători face site-ul mai accesibil sau mai puțin accesibil?


Impactul asupra performanței

Timpul total petrecut în rețea – Toate paginile accesate
Instrument de monitorizare
7,3 secunde
Suprapunere C
4,0 secunde
Suprapunere D
10,4 secunde
Suprapunere A
33,9 secunde
Suprapunere B
83,7 secunde
🔴 Suprapunere B: 83 verificări preliminare CORS = 38,8 secunde pierdute

Fiecare apel către API-ul de text alternativ generat de IA declanșează o verificare preliminară CORS, dublând numărul de solicitări. 46% din timpul total de rețea al acestei suprapuneri reprezintă doar suprasarcina protocolului.

🡡 Suprapunere A: 75% din timpul dedicat analizei datelor

Cele 58 de solicitări POST de urmărire către punctul final de analiză al furnizorului au durat 25,5 secunde – trei sferturi din durata totală a suprapunerii au fost dedicate supravegherii comportamentale, nu accesibilității.

Unde se scurge fiecare secundă – timp pe domeniu de server
Scopul domeniuluiInstrumentSolicităriOraCe face
API pentru text alternativ generat de IASuprapunere B13543.1sGenerarea descrierilor imaginilor + verificări preliminare CORS
API pentru Link/tuningsSuprapunere B9835.8sVerificarea linkurilor nefuncționale, configurare, apeluri de colaborare
Punct final de analizăSuprapunere A6025.5sPostări privind monitorizarea comportamentală – nu accesibilitatea
Widget CDNSuprapunere D11110.2sWidget JS, CSS, peste 20 de fișiere cu pictograme SVG
Script CDNSuprapunere A1536.9sToate pachetele JS, scanerul, remedierile specifice fiecărui site
Baliza de monitorizareMonitorizare293.3sSolicitare POST minimă la accesarea paginii (doar URL și tipul dispozitivului)

Ce se întâmplă după implementarea unui site

Poate că cel mai insidios risc al instrumentelor de suprapunere devine vizibil abia în timp: soluțiile aplicate se deteriorează în tăcere. Spre deosebire de o eroare JavaScript care blochează vizibil aplicația sau de un aspect defectuos pe care cineva îl observă, o soluție de suprapunere învechită nu generează nicio eroare, nicio alertă și nicio schimbare vizuală. Pur și simplu încetează să mai funcționeze – iar bariera de accesibilitate pe care o masca reapare fără ca nimeni să-și dea seama.

Pentru a înțelege acest lucru, ia în considerare modul în care fiecare tip de suprapunere se integrează în structura DOM a site-ului tău.

Soluții bazate pe selector: Timpul trece

Overlay A – la fel ca majoritatea soluțiilor de suprapunere pentru accesibilitate – menține fișiere JavaScript de remediere specifice fiecărui site, care conțin reguli de genul acesta (reconstruite pe baza codului capturat efectiv):

// Real fix rule from a fashion retailer’s active.js: defineFix({ ruleName: “Button_Name_WeakName”, selector: “.js-recommendation_carousel button.slick-prev.slick-arrow”, fix: (element) => element.attr(“aria-label”, “Previous slide”), runMode: “always” })

Această regulă vizează butonul cu săgeată de revenire al caruselului Slick, utilizând trei clase CSS: .js-recommendation_carousel, .slick-prevși .slick-arrow. Fiecare componentă a acestui selector este vulnerabilă. Dacă echipa care se ocupă de site redenumește clasa containerului caruselului, trece de la Slick la Splide sau Swiper sau pur și simplu actualizează biblioteca Slick la o versiune care modifică convenția de denumire a claselor, selectorul nu mai găsește nimic. Butonul își pierde eticheta „Slide anterior”. Utilizatorii cititoarelor de ecran nu îl mai pot identifica.

În cele cinci locații pe care le-am analizat pentru Overlay A, am constatat că 98% dintre selectori conțin nume de clase specifice unui anumit framework – cursuri care încep cu .js-, .b-, .chakra-, .splide__, sau hash-uri CSS-în-JS precum .css-acuo7n. Acestea nu sunt identificatori semantici stabili – sunt detalii de implementare care se schimbă la fiecare actualizare a framework-ului, refactorizare a componentelor sau modificare a sistemului de compilare.

La un retailer de genți de mână de designer, am descoperit selectori care vizează componentele Chakra UI. Chakra UI lansează modificări radicale în versiunile majore – numele claselor, structura componentelor și modelele ARIA evoluează toate. Când acest site actualizează Chakra, sute de reguli de remediere a suprapunerilor riscă să nu mai funcționeze fără ca utilizatorul să observe. Furnizorul de overlay-uri trebuie apoi să verifice manual noua structură DOM, să rescrie fiecare selector afectat și să implementeze fișierele de remediere actualizate. În perioada dintre implementarea site-ului și actualizarea furnizorului de overlay-uri, site-ul funcționează cu remedieri învechite – unele fără niciun efect, altele aplicându-se potențial elementelor greșite.

Soluții bazate pe URL: și mai instabile

Suprapuneți cheile JSON de remediere din fișierul B peste fiecare intrare de text alternativ, înlocuind-o cu adresa URL exactă a sursei imaginii. Am găsit intrări de genul:

// From the actual consolidated remediation JSON (1.17 MB): { “src”: “https://example.com/web/files/devices/13555/images/thumb_86x86_Product.png”, “alt”: “A gaming console standing vertically next to its controller”, “approved”: false, “decorative”: false }

Observați fragilitatea: adresa URL conține un ID de dispozitiv (13555), dimensiunea miniaturii (86x86), precum și un nume de fișier care include denumirea produsului. Oricare dintre aceste elemente se poate modifica independent. Dacă sistemul CMS regenerează miniaturile la o dimensiune diferită, atunci thumb_86x86 o parte din adresa URL se modifică, iar înregistrarea nu mai corespunde. Dacă echipa de produs încarcă o nouă fotografie cu un nume de fișier diferit, înregistrarea rămâne orfană. Dacă site-ul își migrează fișierele media către un CDN cu un domeniu diferit, fiecare înregistrare din fișierul JSON de 1,17 MB devine o povară inutilă – iar toate imaginile de pe site își pierd simultan textul alternativ.

Cel mai rău scenariu este o potrivire parțială eșuată: unele imagini își păstrează vechile adrese URL (și primesc text alternativ), în timp ce imaginile noi sau actualizate nu corespund niciunei intrări (și nu primesc nimic). Rezultatul este o experiență inconsecventă, în care unele imagini sunt descrise, iar altele sunt omise fără nicio mențiune – ceea ce este mult mai derutant pentru un utilizator de cititor de ecran decât o absență consecventă a textului alternativ.

Remediere la nivel global: problema cascadei

Abordarea Overlay C – atașarea unui MutationObserver la întregul document și aplicarea unor remedieri generice tuturor elementelor de anumite tipuri (a, button, input, img, h1) – generează un tip de eroare diferit, dar la fel de periculos. În loc să se defecteze în tăcere atunci când selectorii devin expirați, această suprapunere lucrează intens la un cod nou.

Să luăm în considerare un scenariu obișnuit: echipa responsabilă de site implementează o nouă componentă de dialog modal accesibilă, care pune în aplicare corect funcțiile de reținere a focalizării, închiderea prin apăsarea tastei Escape și atributele ARIA. MutationObserver-ul suprapunerii detectează noile elemente DOM, le evaluează în raport cu regulile sale generice și – găsind elemente care se potrivesc cu modelele sale – își aplică propriile mecanisme de gestionare a focalizării, propriile rutine de gestionare a tastaturii și propriile atribute ARIA peste implementarea existentă și corectă a componentei. Rezultatul este un focus capturat de două ori, gestionări de tastatură duplicate și atribute ARIA conflictuale. Fereastra modală care funcționa perfect înainte de încărcarea overlay-ului se comportă acum eratic.

Nu este vorba doar de o preocupare teoretică. Bibliotecile de componente de tip framework, precum Radix UI, Headless UI și Chakra UI, dedică eforturi tehnice considerabile implementării corecte a standardului ARIA. O suprapunere care aplică în mod generalizat propriile atribute ARIA tuturor button și a este probabil ca aceste elemente să intre în conflict cu aceste implementări bine testate, ceea ce face ca componentele să fie accesibile în mod corect mai puțin accesibil.

Instrumentul de monitorizare: Nu există nimic de stricat

Instrumentul de monitorizare pe care l-am analizat nu conține remedieri bazate pe selectori, intrări legate de URL-uri, MutationObserver și nici țintirea elementelor generice. Atunci când site-ul implementează cod nou, următoarea scanare a instrumentului de monitorizare evaluează automat noul DOM în raport cu setul standardizat de reguli al axe-core și raportează orice încălcări noi – fără a modifica nimic. Rezultatele scanării apar în tabloul de bord al instrumentului, împreună cu nivelurile de gravitate, numărul de elemente afectate și ID-urile standardizate ale regulilor WCAG. Dezvoltatorii examinează rezultatele și implementează remedierile în propria bază de cod, unde acestea trec prin revizuirea codului, testarea automată, validarea în mediul de testare și implementarea controlată.

Acest proces este, prin natura sa, adaptabil la schimbări: instrumentul analizează structura DOM existentă în momentul scanării, semnalează problemele identificate și începe de la zero la următoarea scanare. Nu există o „datorie tehnică” acumulată legată de definițiile soluțiilor, nici selectori învechiți, nici intrări de text alternativ orfane și nici posibilitatea de a aplica o soluție greșită unui element greșit.


Ce se strică atunci când reinstalezi

Fiecare remediere a suprapunerii de accesibilitate este legată de structura DOM actuală a site-ului. Am constatat că 98% dintre selectorii unui overlay vizează nume de clase specifice cadrului – cursuri precum .chakra-, .splide__, .js-, .b-și hash-uri CSS-in-JS precum .css-acuo7n care se modifică la fiecare compilare.

Când site-ul…SuprapuneriInstrument de monitorizare
Modifică numele claselor CSSToate remediile bazate pe selector nu mai funcționeazăNeafectat
Actualizează biblioteca caruseluluiToate modificările aduse caruselului sunt anulateNeafectat
Reorganizarea procesului de finalizare a comenzii68 de remedieri ale procesului de finalizare a comenzii aflate în pericolNeafectat
Actualizează imaginile produselorIntrări de text alternativ fără element asociatNeafectat
Migrează CMSToate definițiile sunt depășiteNeafectat
Actualizări React/Vue/AngularModificarea hash-urilor CSS-in-JSNeafectat

Instrumentul de monitorizare afișează „Neafectat” în fiecare rând, deoarece nu conține nicio remediere bazată pe selectori. Nu există nimic care să devină învechit, nimic care să vizeze un element greșit, nimic care să provoace erori.


GDPR, confidențialitatea și problema consimțământului

Analiza noastră a confirmat că trei dintre cele patru ferestre de accesibilitate transmit date către servere externe înainte ca utilizatorul să poată interacționa cu orice banner de consimțământ:

InstrumentUrmărirea utilizatorilorDepozitareAmprentareDestinația datelor
Suprapunere AID-ul sesiunii + ID-ul încărcării paginiiServer din SUA
Suprapunere BUUID constant pe toate paginileIsrael/SUA
Suprapunere CANALIZA COMPORTAMENTULUI UTILIZATORILORlocalStorage (3 chei)userAgent + maxTouchPointsIsrael
Suprapunere DNu s-a observatlocalStorage (16 referințe)16 arbitri de navigațieGermania (UE)
MonitorizareNiciuna1 indicator de depanareNiciunaBulgaria (UE)

Conform hotărârii CJUE în cauza Planet49, urmărirea neesențială necesită consimțământul prealabil expres. Două ferestre pop-up transmit identificatori permanenți încă de la prima solicitare de rețea – înainte ca vreun mecanism de obținere a consimțământului să poată fi activat. Pentru site-urile destinate utilizatorilor din UE, aceasta constituie o încălcare automată a RGPD.


Cadrul juridic

1,023
Companiile care utilizează suprapuneri
au fost date în judecată pentru încălcarea Legii privind americanii cu dizabilități (ADA) în 2024
$1M
Amenda aplicată de FTC unui furnizor de soluții de tip overlay d
, pentru prezentarea în mod eronat a capacităților de inteligență artificială
~5,000
Numărul total estimat de procese legate de ADA pentru anul 2025, conform
(+20% față de anul precedent)

În aprilie 2025, Comisia Federală pentru Comerț din SUA (FTC) a finalizat o înțelegere în valoare de 1 milion de dolari împotriva unuia dintre furnizorii de soluții de accesibilitate incluși în studiul nostru, pentru că a afirmat în mod eronat că instrumentul său bazat pe IA ar putea asigura conformitatea oricărui site web cu standardele WCAG. FTC a constatat că instrumentul nu a reușit să asigure accesibilitatea componentelor de bază ale site-ului web – meniuri, titluri, tabele, imagini și înregistrări. Într-un exemplu citat, o fotografie a unui filet mignon a primit descrierea generată de IA „Pâine neagră pe farfurie de ceramică albă”.

Conform datelor de monitorizare din sector, 25% din totalul proceselor privind accesibilitatea digitală din 2024 au menționat în mod explicit widgeturile de tip overlay ca fiind bariere – nu soluții. În prima jumătate a anului 2025, procesele împotriva companiilor care utilizează overlay-uri au continuat să depășească 100 pe lună. Doi dintre furnizorii de overlay din studiul nostru au fost implicați direct în litigii: unul în trei cazuri separate de brevete/secrete comerciale, iar altul confruntându-se cu o acțiune colectivă din partea unui client de tip întreprindere mică care a fost dat în judecată în ciuda utilizării overlay-ului.

Instrumentul de monitorizare utilizat în studiul nostru nu are antecedente de litigii legate de probleme de accesibilitate – o consecință logică a arhitecturii sale: întrucât nu modifică niciodată DOM-ul, nu poate crea bariere de accesibilitate.


În detaliu: Ce modifică de fapt suprapunerile

Pentru a înțelege amploarea manipulării DOM, am numărat toate tipurile de modificări din codul JavaScript al fiecărui instrument. Diferențele sunt semnificative:

Model de codMonitorizareSuprapunere CSuprapunere DSuprapunere ASuprapunere B
setAttribute1227216Pe sitePrin intermediul motorului
aria-hidden02147141 de apeluri69 decorative
aria-label012849Pe site5.068 IA
role0822115Nu se aplică
MutationObserver02 (la nivel de document)9În motorÎn motor
localStorage1 depanare1416
navigator amprentă digitală0916
keydown/keyup047În motorPe siteasistent de navigare

Overlay C merită o atenție specială. Pachetul său monolitic de 794 KB include un MutationObserver spre document.documentElement cu configurația {subtree: true, childList: true, attributes: true, attributeOldValue: true}. Asta înseamnă fiecare modificare DOM de pe întreaga pagină – fie că provine din reconcilierea DOM-ului virtual al React, dintr-un script de testare A/B, dintr-un widget de chat sau din propriul cod JavaScript al site-ului – declanșează observatorul suprapunerii, care apoi reevaluează și, eventual, reaplică corecțiile sale. După o redeployare a site-ului, acest lucru generează o serie de încercări de corectare a elementelor care ar putea fi deja accesibile în mod corect, existând riscul ca atributele ARIA corecte să fie suprascrise cu unele incorecte.

Am confirmat că Overlay C transmite USER-BEHAVIOR-ANALYTICS Trimite cereri POST către propriul receptor de jurnale, cu date utile care conțin domeniul site-ului, versiunea widgetului, limba utilizatorului și evenimentele de interacțiune. În combinație cu localStorage persistența și identificarea dispozitivelor prin intermediul navigator.userAgent și navigator.maxTouchPoints, aceasta reprezintă o operațiune de prelucrare a datelor de care majoritatea operatorilor de site-uri nu sunt conștienți.

Rezolvarea problemei cu fișierul JSON

Overlay B descarcă un fișier JSON de dimensiuni mari (până la 1,17 MB pentru un singur site de telecomunicații) care conține toate definițiile de remediere. Pe unul dintre site-uri, am observat că acesta a fost descărcat de patru ori în cadrul aceleiași sesiuni de navigare – 4,7 MB de lățime de bandă pentru un fișier care ar fi trebuit să fie stocat în cache. Fișierul JSON conține 11 categorii, dar marea majoritate sunt descrieri de imagini generate de IA: 4.974 din 6.975 de intrări pentru un singur site. Fiecare este asociată cu o adresă URL specifică a imaginii – când CMS-ul redenumește un fișier, modifică dimensiunile miniaturilor sau migrează domeniile CDN, intrările încetează să mai corespundă fără ca utilizatorul să observe. Imaginile de înlocuire nu primesc deloc text alternativ, ceea ce face ca pagina să fie mai puțin accesibilă decât înainte de instalarea overlay-ului.

Această suprapunere implementează, de asemenea, module de execuție care rescriu în mod activ pagina: un motor de remediere de 110 KB, un modul auxiliar pentru meniul de navigare de 23 KB care restructurează gestionarea meniului prin tastatură, un patch pentru carusel de 5,8 KB și un scaner pe partea clientului de 53 KB care utilizează o logică proprie în locul motorului standard din industrie, axe-core – ceea ce înseamnă că rezultatele sale nu pot fi verificate independent.

Cea mai transparentă suprapunere – totuși riscantă

Overlay D avea cea mai transparentă arhitectură: fișiere de configurare JSON ușor de înțeles, cu comenzi explicite de activare/dezactivare. Opțiuni precum addAriaHidden, overwriteAltși adjustMetaViewport au fost setate în mod explicit la false. Cu toate acestea, motorul de bază (649 KB) conține 216 setAttribute apeluri, 47 aria-hidden referințe, 282 addEventListener înregistrări și 9 MutationObserver instanțe. Motorul acceptă modificări agresive ale DOM chiar și în cazul în care configurația actuală este conservatoare – o modificare a configurației efectuată de furnizor ar putea activa funcții riscante fără știrea administratorului site-ului.

Am găsit selectori specifici pentru fiecare site care conțin sufixe hash generate de JavaScript, cum ar fi button.topHeader__infoButton.js-exclusions85ada2b86bb632424e3ad77c14 care se modifică la fiecare versiune, precum și selectorii de URL-uri pentru rețelele sociale, care devin nevalide atunci când site-ul își actualizează linkurile către Facebook sau Instagram.

Legea europeană privind accesibilitatea: De ce suprapunerile nu vor îndeplini cerințele EAA

Începând cu 28 iunie 2025, Legea europeană privind accesibilitatea (EAA) impune ca produsele și serviciile digitale comercializate în UE să respecte standardele de accesibilitate aliniate la EN 301 549, care face referire la WCAG 2.1 AA. Spre deosebire de ADA – care este aplicată în principal prin acțiuni în justiție inițiate de persoane fizice – EAA este aplicată de autoritățile naționale de supraveghere a pieței, care au competența de a aplica amenzi, de a dispune măsuri corective și de a retrage de pe piață produsele neconforme.

Respingerea oficială de către Germania a instrumentelor de suprapunere

Germania a adoptat cea mai clară poziție legislativă dintre toate țările în ceea ce privește instrumentele de accesibilitate de tip overlay. BFIT-Bund (Überwachungsstelle des Bundes für Barrierefreiheit von Informationstechnik) – organismul federal german de monitorizare a accesibilității tehnologiei informației – împreună cu toate organismele de monitorizare de la nivel de land, a emis o evaluare comună prin care respinge în mod explicit utilizarea instrumentelor de tip overlay pentru asigurarea conformității cu standardele de accesibilitate:

Evaluarea comună oficială BFIT-Bund

„În prezent, instrumentele de tip overlay nu sunt capabile să facă complet accesibil un site web care prezintă bariere. Se întâmplă adesea ca utilizarea acestor instrumente să creeze bariere suplimentare pe site, care nu ar fi existat fără ele.”

– Evaluare comună a autorităților de supraveghere federale și regionale privind accesibilitatea tehnologiilor informaționale în ceea ce privește utilizarea instrumentelor de suprapunere

La 12 martie 2025, Comitetul pentru Tehnologia Informației Accesibile (Ausschuss für barrierefreie Informationstechnik, înființat în temeiul articolului 5 din BITV 2.0) și-a reafirmat această poziție în cadrul ședinței sale, exprimându-și îngrijorarea cu privire la faptul că organismele publice continuă să încerce să își îndeplinească obligațiile în materie de accesibilitate prin integrarea unor instrumente de suprapunere. Comitetul a concluzionat că „o redare temporară accesibilă a unui site web prin intermediul unui software – eventual numai după ce setările sunt configurate de utilizator – pe durata vizitei acestuia nu îndeplinește cerințele dispozițiilor legale aplicabile.”

Comitetul a avertizat în mod explicit că organismele publice care utilizează instrumente de suprapunere riscă să facă site-urile lor web mai puțin accesibile, nu mai accesibile – ceea ce duce la o deteriorare a accesibilității („Verschlechterung der Barrierefreiheit”). Acest lucru reflectă în mod direct constatarea noastră tehnică conform căreia 26 % dintre regulile de remediere prin suprapunere introduc noi încălcări ale WCAG.

Sigiliul de testare BIK: respins pentru site-urile web care utilizează suprapuneri

Rețeaua germană de testare BIK – organismele acreditate care evaluează site-urile web în conformitate cu BITV 2.0, EN 301 549 și WCAG 2.1 AA – a luat o măsură concretă: site-urile web care utilizează instrumente de suprapunere nu pot primi sigiliul de testare BIK. Organismele de testare au declarat că nu pot efectua o evaluare fiabilă a conformității atunci când este prezent un overlay, deoarece acesta modifică DOM-ul în timpul rulării în moduri care fac ca rezultatele testului să fie nesigure. Sigiliul BIK este utilizat pe scară largă în Germania ca dovadă a conformității cu BITV 2.0 – și acum nu mai este disponibil pentru niciun site web care utilizează un overlay.

Nu este vorba de o problemă teoretică de natură politică. Aceasta înseamnă că un site german de comerț electronic care utilizează oricare dintre cele patru ferestre suprapuse pe care le-am testat nu poate obține certificarea de conformitate standard utilizată pe piața germană.

Confirmare la nivel european

Această poziție normativă depășește granițele Germaniei. Forumul European al Persoanelor cu Dizabilități și Asociația Internațională a Profesioniștilor în Accesibilitate au emis o declarație comună în 2023, în care avertizau că suprapunerile de accesibilitate nu fac site-urile web accesibile și nici nu le asigură conformitatea cu legislația europeană în materie de accesibilitate, inclusiv cu Actul european privind accesibilitatea. Comisia Europeană s-a pronunțat, de asemenea, cu privire la afirmațiile privind conformitatea suprapunerilor, concluzionând că acestea nu pot asigura respectarea standardelor aplicabile.

În conformitate cu Legea germană privind consolidarea accesibilității (BFSG – Barrierefreiheitsstärkungsgesetz), care transpune în legislația germană Acordul privind accesibilitatea electronică (EAA) și este în vigoare din 28 iunie 2025, autoritățile de supraveghere a pieței pot aplica amenzi cuprinse între 10.000 și 100.000 de euro pentru fiecare încălcare. Evaluarea BFIT-Bund și refuzul rețelei de testare BIK de a certifica site-urile care utilizează overlay-uri înseamnă, în practică, că instrumentele de overlay nu oferă nicio acoperire normativă în Germania – și pot crește în mod activ riscul de a face obiectul unor măsuri de aplicare a legii.

Date importante privind EAA

28 iunie 2025: Încep aplicarea normelor EAA în toate statele membre ale UE. Produsele și serviciile trebuie să respecte cerințele de accesibilitate prevăzute în standardul EN 301 549.

28 iunie 2030: Se încheie perioada de tranziție pentru serviciile care făceau deja obiectul unui contract înainte de iunie 2025. După această dată, toate serviciile digitale trebuie să respecte cerințele, indiferent de data încheierii contractului.

Companiile care se bazează pe extensii pentru a respecta cerințele ADA nu ar trebui să presupună că aceeași abordare va satisface cerințele EAA. Autoritățile de reglementare europene evaluează accesibilitatea efectivă a produsului, nu prezența unui widget dezvoltat de o terță parte.

Securitatea și riscurile legate de lanțul de aprovizionare

Fiecare instrument de suprapunere funcționează prin inserarea de cod JavaScript de la terți în domeniul global al paginilor dvs. de producție. Acest cod JavaScript rulează cu aceleași privilegii ca și codul dvs. propriu – poate citi și modifica orice element DOM, poate intercepta trimiterile de formulare, poate accesa cookie-urile, poate redirecționa utilizatorii și poate sustrage date. Implicațiile de securitate ale acestei configurații sunt semnificative și adesea trecute cu vederea.

Suprafața de atac

Luați în considerare lanțul de aprovizionare: atunci când adăugați un modul de accesibilitate pe site-ul dvs., acordați unui furnizor terț acces continuu și nelimitat de scriere la DOM-ul dvs. de producție activ. CDN-ul furnizorului găzduiește fișierul JavaScript, echipa furnizorului se ocupă de întreținerea codului, iar fluxul de implementare al furnizorului trimite actualizările direct pe site-ul dvs. – fără revizuirea codului de către dvs., fără procesul dvs. de control al calității și fără aprobarea dvs.

Dacă rețeaua CDN a furnizorului de servicii de overlay este compromisă, atacatorul capătă posibilitatea de a injecta cod rău intenționat în fiecare site care utilizează acel overlay. Dacă un angajat al furnizorului lansează o actualizare defectuoasă, toate site-urile clienților sunt afectate simultan. Dacă punctul final al API-ului furnizorului este deturnat, fișierul JSON de remediere sau datele de configurare furnizate site-ului dumneavoastră pot fi manipulate pentru a modifica câmpurile formularelor, a redirecționa linkurile sau a injecta conținut de phishing.

Amploarea acestui risc este direct proporțională cu amprenta DOM a suprapunerii:

InstrumentJS în context globalAcces la scriere DOMDomenii externeDependența de date API
Suprapunere A~1.240 KB (activ)Regulile de corectare pe pagină modifică orice element care corespunde3 domeniiactive.js pe fiecare site
Suprapunere B~500 KB (activ)Motorul de remediere modifică orice element corespunzător3 domenii, 228 de apeluri API1,17 MB JSON
Suprapunere C1.285 KB (monolitic)227 setAttribute, 82 modificări ale rolurilor3 domeniiPostări de configurare și analiză
Suprapunere D~740 KB (activ)216 apeluri la setAttribute, 47 referințe la aria-hidden2 domeniiFișiere JS de configurare
Monitorizare4,2 KB (pasiv)Niciuna – zero operațiuni de scriere în DOM2 domeniiNiciuna

Overlay B prezintă cea mai mare suprafață de risc din lanțul de aprovizionare: 228 de apeluri API pe sesiune, distribuite pe 3 domenii externe, cu o încărcătură JSON de 1,17 MB care definește modul în care trebuie modificat DOM-ul. Un răspuns API compromis ar putea instrui motorul de remediere să injecteze conținut arbitrar în orice element de pe pagină. Pachetul monolitic de 1.285 KB al suprapunerii C este cea mai mare sarcină utilă JavaScript unică – și, deoarece este minificat și ofuscat, nici operatorul site-ului, nici un auditor de securitate nu pot examina în mod semnificativ ce execută acesta în timpul rulării.

Conformitatea cu standardul PCI DSS: Un conflict direct

Pentru orice site de comerț electronic care procesează plăți cu cardul de credit, conformitatea cu standardul PCI DSS nu este opțională. Iar concluziile noastre evidențiază un conflict direct între arhitectura instrumentelor de accesibilitate de tip overlay și cerințele standardului PCI DSS.

Cerința 6.4.3 din PCI DSS (introdusă în PCI DSS v4.0, obligatorie începând cu 31 martie 2025) prevede ca toate scripturile paginilor de plată care se încarcă și se execută în browserul consumatorului să fie gestionate după cum urmează: trebuie implementată o metodă pentru a confirma că fiecare script este autorizat, trebuie asigurată integritatea fiecărui script și trebuie menținut un inventar al tuturor scripturilor, însoțit de o justificare scrisă a necesității fiecăruia.

Analiza noastră a confirmat că regulile de remediere a suprapunerilor vizează în mod activ elementele DOM ale paginilor de plată de pe mai multe site-uri:

# Overlay: un set de reguli care vizează elementele de plată/finalizare a comenzii (din fișierul active.js capturat): #cardNumber → modifică atributele câmpurilor formularului #billingState → modifică atributele câmpurilor formularului .shipping-method-link → modifică comportamentul linkului #g-recaptcha-response → modifică integrarea reCAPTCHA .klarna-express-button → modifică butonul de plată svg.klarna-option, svg.credit-card-option → elimină atributele .amazon-pay-onetime-buttonhideFromAT() – ascuns de cititoarele de ecran #shop-pay-button-container buttonhideFromAT() – ascuns de cititoarele de ecran #minicart-popover #paypal-button-container → role=”presentation” .checkout-form-area .payment-skeletonhideFromAT() – ascuns de cititoarele de ecran

Nu este vorba de un risc teoretic – acestea sunt reguli concrete pe care le-am identificat în mediile de producție, care modifică în mod activ câmpurile pentru numerele de carduri de credit, selectorii de adrese de facturare, butoanele furnizorilor de servicii de plată și elementele care conțin formularele de finalizare a comenzii. Conform standardului PCI DSS 6.4.3, fiecare dintre aceste scripturi ale unor terți necesită o autorizare documentată, o verificare a integrității și o justificare scrisă.

Gândiți-vă la ce poate face scriptul unui furnizor de suprapuneri pe pagina dvs. de finalizare a comenzii:

Cerință PCI DSSCe presupuneRealitate augmentată
6.4.3 Gestionarea scripturilorVerificarea stocului, autorizarea și asigurarea integrității pentru toate scripturile paginilor de platăSuprapunerile încarcă peste 400 KB de cod JavaScript de la terți, care se actualizează fără aprobarea comerciantului
6.4.3 Justificarea scriptuluiO justificare scrisă a necesității fiecărui scenariuScripturile de suprapunere asigură remedieri de accesibilitate, urmărirea datelor analitice și monitorizarea comportamentală – ceea ce este justificabil doar parțial
11.6.1 Detectarea modificărilorImplementați un mecanism de detectare a modificărilor și a intervențiilor neautorizate pe paginile de platăFurnizorii de servicii de overlay transmit actualizări de cod către rețeaua lor CDN fără a informa comerciantul – conținutul scriptului se modifică în mod silențios
6.2.4 Integritatea software-uluiProtejați-vă împotriva exploatării și a vulnerabilităților din software-ul personalizat și cel al terțilorModificări aduse de Overlay JS #cardNumber, #billingStateși elementele butonului de plată – au demonstrat accesul la scriere la câmpurile cu datele titularului cardului
🔴 Cazul Magecart

Atacurile Magecart care au afectat British Airways (380.000 de carduri furate), Ticketmaster (40.000 de carduri) și Newegg au urmat toate același tipar: codul JavaScript al unor terți de pe paginile de plată a fost compromis pentru a sustrage datele cardurilor de credit. Instrumentele de suprapunere funcționează exact pe aceeași suprafață tehnică – JavaScript de la terți cu acces complet la DOM, care se execută pe paginile de finalizare a comenzii, cu capacitatea demonstrată de a citi și modifica câmpurile formularelor de plată. Diferența este că scripturile Magecart au fost injectate în secret, în timp ce scripturile de suprapunere sunt invitate. Suprafața de atac este identică.

Analiza noastră a demonstrat că regulile de remediere prin suprapunere vizează #cardNumber și #billingState pe bază de nume – ceea ce înseamnă că codul overlay-ului are acces programatic la elementele în care clienții introduc numerele cardurilor de credit și adresele de facturare. Un CDN de overlay compromis ar putea modifica aceste reguli fixe pentru a sustrage simultan datele deținătorilor de carduri de pe toate site-urile clienților.

În schimb, instrumentul de monitorizare nu are nicio capacitate de scriere în DOM. Scriptul său de 4,2 KB nu poate modifica câmpurile formularelor, nu poate intercepta evenimentele de introducere a datelor și nu poate accesa sau modifica elementele din procesul de finalizare a comenzii. Chiar dacă rețeaua CDN a furnizorului de servicii de monitorizare ar fi compromisă, atacatorul ar avea acces doar la un script care poate citi doar adresa URL a paginii și tipul dispozitivului – nu la unul care poate rescrie formularul de finalizare a comenzii. În ceea ce privește stabilirea domeniului de aplicare PCI DSS, instrumentul de monitorizare nu creează nicio suprafață de risc suplimentară pe paginile de plată.

Problema discriminării

Aceasta este problema discriminării care stă la baza oricărei soluții de accesibilitate: cea mai îngrijorătoare constatare nu este un defect tehnic, ci un model de refuz sistematic al accesului utilizatorilor cu dizabilități la funcționalități pe care utilizatorii fără dizabilități le consideră de la sine înțelese.

Atunci când o fereastră suprapusă ascunde butonul Amazon Pay din arborele de accesibilitate, un utilizator nevăzător vede mai puține opțiuni de plată decât un utilizator văzător. Atunci când câmpul de introducere a cantității din coș este ascuns, un utilizator nevăzător nu își poate modifica comanda. Atunci când linkurile către rezultatele căutării sunt ascunse, găsirea produselor este îngreunată. Atunci când evaluările cu stele sunt ascunse, un utilizator nevăzător nu poate evalua calitatea produsului la fel ca un utilizator văzător.

Nu este vorba de cazuri marginale – ci de fluxuri de lucru esențiale din domeniul comerțului electronic, care sunt afectate tocmai de instrumentele care promit să le facă accesibile.

Comunitatea persoanelor cu dizabilități atrage atenția asupra acestui aspect de ani de zile. Fișa informativă privind suprapunerile – semnată de sute de specialiști în accesibilitate – avertizează că suprapunerile de accesibilitate „nu remediază codul HTML de bază” și „adesea constituie un obstacol real pentru persoanele cu dizabilități”. Analiza noastră tehnică oferă dovezi: 141 de elemente funcționale ascunse de cititoarele de ecran, 7 etichete fără sens inserate și 5.066 de descrieri AI neverificate implementate în producție – pe doar 14 site-uri.

Pentru administratorii de site-uri, întrebarea nu este dacă suprapunerile sunt „suficient de bune”, ci dacă se poate justifica implementarea unui instrument care creează o experiență pe două niveluri: o versiune pentru utilizatorii văzători, care beneficiază de funcționalitate completă, și o versiune filtrată, defectuoasă și, uneori, fără sens pentru utilizatorii cu dizabilități.

Impactul asupra conformității cu ADA: Aceste remedieri sunt cu adevărat utile?

Promisiunea fundamentală a oricărei suprapuneri este aceea că îmbunătățește conformitatea cu ADA prin remedierea încălcărilor WCAG în timpul rulării. Însă analiza noastră relevă un paradox îngrijorător: un procent semnificativ dintre remediile oferite de suprapuneri introduc în mod activ noi încălcări ale WCAG în timp ce încearcă să le remedieze pe cele existente.

Am corelat fiecare regulă de remediere identificată din Overlay A cu criteriul de succes specific din WCAG 2.1 pe care îl vizează. Din cele 776 de reguli care au putut fi corelate, rezultatele s-au împărțit în două categorii: remedieri care rezolvă efectiv o problemă WCAG și remedieri care generează o nouă încălcare a WCAG în acest proces.

Suprapunere: reguli de remediere corelate cu WCAG – benefice vs. dăunătoare
Criteriu de conformitate WCAGTotal remedieriAutenticascunde de ATrol=președintealt=””Bug
4.1.2 Nume, rol, valoare292260131423
2.4.4 Scopul linkului (în context)15810845510
1.3.1 Informații și relații1099211600
1.1.1 Conținut non-textual10828525280
4.1.3 Mesaje de stare44431000
2.1.1 Tastatura36226602
Altele (6 criterii)29261200
TOTAL776579 (75 %)11948315
75%
dintre soluțiile identificate care rezolvă cu adevărat o problemă WCAG
26%
dintre remediile identificate
reduc accesibilitatea
203
norme specifice care introduc noi încălcări ale WCAG

Ca să fim corecți, trei sferturi dintre modificările identificate reprezintă îmbunătățiri reale – adăugarea etichetelor butoanelor lipsă, corectarea ierarhiilor titlurilor, rectificarea atributelor de completare automată și implementarea mecanismelor de captare a focalizării în ferestrele modale. Însă restul de un sfert are un efect dăunător, iar acest efect se răsfrânge în mod disproporționat asupra tocmai a acelor utilizatori pe care instrumentul pretinde că îi ajută.

Modul în care fiecare model riscant încalcă WCAG

Problema nu este doar că aceste soluții nu funcționează, ci că ele generează încălcări ale anumitor criterii de conformitate WCAG care nu existau înainte de aplicarea suprapunerii. Într-un proces intentat în temeiul ADA, expertul reclamantului poate invoca aceste încălcări generate de suprapunere ca dovadă a faptului că site-ul discriminează persoanele cu dizabilități.

hideFromAT() – Generează simultan încălcări ale a 5 criterii WCAG

Când hideFromAT() atunci când este aplicat unui element funcțional, cum ar fi un buton de plată sau un link către un produs, acesta introduce:

WCAG 1.1.1 (Conținut non-textual, Nivelul A) – Imaginile ascunse nu mai beneficiază de text alternativ.

WCAG 1.3.1 (Informații și relații, Nivelul A) – Se pierde sensul structural; rolul elementului în ierarhia paginii dispare.

WCAG 2.1.1 (Tastatură, Nivelul A) – Elementele interactive ascunse nu pot primi focalizarea și nu pot fi operate prin intermediul tastaturii.

WCAG 2.4.4 (Scopul linkurilor, Nivelul A) – Linkurile ascunse nu pot fi accesate sau identificate de tehnologiile de asistență.

WCAG 4.1.2 (Nume, Rol, Valoare, Nivelul A) – Elementele ascunse nu au un nume sau un rol care să poată fi determinat prin programare.

Toate aceste cinci elemente constituie criterii de nivel A – nivelul minim de accesibilitate prevăzut de WCAG. Fiecare utilizare a funcției hideFromAT() pe un element funcțional generează simultan cinci încălcări de nivel A. Pe cele 5 site-uri, am identificat 141 de astfel de cazuri – ceea ce reprezintă potențial 705 de noi încălcări de nivel A introduse chiar de suprapunerea respectivă.

atributul „role=”presentation”” în tabelele de date – Încalcă conformitatea cu WCAG 1.3.1

Când role="presentation" se aplică unui tabel de date, cititoarele de ecran nu mai pot naviga pe rânduri și coloane. Structura tabelului devine invizibilă. Acest lucru încalcă în mod direct WCAG 1.3.1 (Informații și relații) și 1.3.2 (Secvență semnificativă). Am identificat 115 cazuri în care s-a utilizat atributul role cu valoarea „presentation” sau „none” – inclusiv în cazul tabelelor de date, al titlurilor și al elementelor de orientare.

aria-label="true" – Încalcă WCAG 4.1.2 și 2.4.6

Șirul literal „true” folosit ca nume accesibil încalcă WCAG 4.1.2 (Nume, Rol, Valoare), deoarece numele nu descrie scopul elementului, și WCAG 2.4.6 (Titluri și etichete), deoarece eticheta nu este descriptivă. Un utilizator al unui cititor de ecran aude „buton, true” – acesta nu poate determina ce face butonul, ceea ce îl face inaccesibil din punct de vedere funcțional. Am găsit 7 cazuri pe 3 site-uri.

Suprapunere B: Text alternativ generat de IA și WCAG 1.1.1

WCAG 1.1.1 prevede ca conținutul non-textual să aibă o „alternativă text care să îndeplinească același scop”. Un text alternativ generat de IA care descrie logo-ul unei companii ca „un semn albastru și galben” nu servește scopului echivalent – scopul unui logo este identificarea mărcii, nu descrierea culorii. Un text alternativ de tipul „text” pentru un banner promoțional sau „oraș” pentru o imagine principală nu îndeplinește același criteriu într-un mod diferit – este atât de vag încât devine inutil.

Dintre cele 5.068 de texte alternative generate de IA pe care le-am capturat din Overlay B, 241 aveau mai puțin de 15 caractere (prea vagi pentru a fi utile), 323 depășeau 125 de caractere (încălcând bunele practici privind accesibilitatea cititoarelor de ecran), iar 156 începeau cu „imaginea” sau „fotografia” (redundante, deoarece cititoarele de ecran anunță deja tipul elementului). Doar 2 au fost aprobate de un evaluator uman.

Conform standardelor procesuale prevăzute de ADA, un expert în accesibilitate al reclamantului ar identifica aceste aspecte ca fiind încălcări ale criteriului WCAG 1.1.1 – cel mai frecvent invocat criteriu în procesele privind accesibilitatea web în temeiul ADA. Suprapunerea nu remediază încălcarea; aceasta înlocuiește o formă de neconformitate (lipsa textului alternativ) cu o alta (text alternativ inexact sau vag), creând în același timp o falsă impresie de conformitate pentru operatorul site-ului.

Suprapunere B: Injectarea etichetelor de formular în timpul rulării – când „repararea” agravează situația

Beyond the consolidated JSON, Overlay B runs a 110 KB remediation engine (remediation-tool.js) that performs 24 distinct DOM mutation rules at runtime on every page load. One of these rules – the EmptyControls handler – targets unlabeled form fields and attempts to inject accessible names by finding nearby <label> elements.

The mechanism works as follows: for each form control without an accessible name, the engine calls a label-finder function that searches for <label for=”id”> elements matching the input’s ID. If found, it injects the label’s text content as an aria-label:

// Extracted from remediation-tool.js (110.5 KB): // Step 1: Find label element by input ID io = e => { const t = e.getAttribute(“id”); if (!t) return null; return document.querySelector(`label[for=’${t}’]`) } // Step 2: If label found, inject its text as aria-label i.textContent && !e.hasAttribute(“aria-label”) && e.setAttribute(“aria-label”, i.textContent.trim()) // Step 3: Fallback if no label found – check placeholder, then title, then element attributes lo = e => { const r = e.getAttribute(“placeholder”), n = e.getAttribute(“title”); if (r && r.trim()) return r; if (n && n.trim()) return n; // Falls through to construct label from classList, name, tagName, type }

We verified this behavior on a live site – a web agency’s contact page with six form fields. The original HTML had visible labels (“First Name”, “Company Name”, “Last Name”, “Work Email”, “Phone Number”, “Message”) but they were not programmatically associated with their inputs via <label for> or aria-label. Without the overlay, a screen reader would announce each field with no name at all.

Cu motorul de remediere al Overlay B activat, un cititor de ecran a anunțat:

Etichetă vizibilăIntroduceți numele=Element de suprapunere aria-label=Problemă
Prenumeprenume„Nume”Trunchiat – „First” lipsește. Aceeași etichetă ca și „Last Name” de mai jos
Prenumenume de familie„Nume”Aceeași etichetă ca și „Prenume” – utilizatorul nu poate distinge între câmpuri
E-mail de serviciuadresa de e-mail„Vă rugăm să introduceți adresa de e-mail”Generat pe baza tipului de validare a datelor introduse, nu pe baza etichetei vizibile „E-mail de serviciu”
Număr de telefontelefon„Vă rugăm să introduceți un număr de telefon”Generat pe baza tipului de câmp, nu a etichetei vizibile „Număr de telefon”
Numele companieicompanie„Câmp text”Nu s-a găsit nicio etichetă – se revine la tipul de element generic
Cu ce vă putem ajuta?meniu-627„Selectare unică”Nu s-a găsit nicio etichetă – doar tipul elementului
Mesajmesajul tău„Zonă de text”Nu s-a găsit nicio etichetă – doar tipul elementului

We verified this by examining the saved HTML source with the overlay’s modifications baked in. Every modified element carries a vendor-specific data-*-form=”fx” attribute – the overlay’s own marker confirming it injected the aria-label. The original HTML has <label> elements with correct text (“First Name”, “Last Name”, “Work Email”, etc.) but they have no for attribute and the inputs are not nested inside the labels – so there is no programmatic association. The overlay’s label-finder function only looks for label[for=id], and since the inputs have no id attribute at all, it returns null for every field. The engine then falls back to constructing labels from the name attribute (“first-name” → “Name”, “last-name” → “Name”), input validation type (“email” → “Please enter email address”), or the raw element type (“text” → “Text field”, “select” → “Single select”, “textarea” → “Text area”).

Rezultatul este mai prost decât formularul inițial fără etichete. Înainte de aplicarea suprapunerii, un utilizator de cititor de ecran se confrunta cu șapte câmpuri fără etichete – o situație confuză, dar cel puțin consecventă. Acesta putea folosi ordinea de navigare cu tasta Tab și contextul pentru a ghici care câmp este care. După intervenția suprapunerii, utilizatorul întâlnește două câmpuri cu aceeași etichetă („Nume” atât pentru Prenume, cât și pentru Nume de familie), două câmpuri cu etichete fabricate în stil de validare care nu se potrivesc cu textul vizibil și trei câmpuri cu nume fără sens, bazate pe tipul de caractere. Etichetarea parțială și incorectă este mai dezorientantă decât lipsa totală a etichetării, deoarece creează o impresie falsă că formularul a fost făcut accesibil, în timp ce câmpurile critice rămân neetichetate sau etichetate greșit.

Această constatare evidențiază, de asemenea, o lacună în fișierul JSON de remediere al Overlay B. Fișierul JSON conținea 87 de intrări de text alternativ generate de IA și zero intrări de remediere a formularelor pentru acest site. Injectarea etichetelor formularului are loc în întregime în timpul rulării prin intermediul handlerului de reguli EmptyControls – nu este vizibilă în fișierul JSON de remediere consolidat, nu este urmărită în niciun tablou de bord pe care operatorul site-ului îl poate verifica și nu este supusă aprobării umane. Operatorul site-ului nu are nicio modalitate de a ști că formularul său de contact este etichetat greșit, cu excepția cazului în care îl testează el însuși cu un cititor de ecran.

The remediation engine’s 24 rule handlers collectively perform: aria-label injection on form fields, links, images, and dialogs; aria-hidden toggling; role modification (heading, presentation, menuitem, button, img); tabindex injection to make non-interactive elements focusable; alt text from the AI JSON; style overrides to make hidden elements visible; aria-required injection; aria-describedby associations between fields and error messages; heading text rewrites; broken link URL corrections; <meta viewport> modification; and <html lang> changes. All of this executes at runtime in the visitor’s browser on every page load – none of it is visible in the consolidated remediation JSON.

Efectul net al conformității cu ADA

Problema fundamentală este că instrumentele de suprapunere confundă acoperirea cu conformitatea. O suprapunere poate indica 1.058 de reguli de remediere și poate susține că acoperă peste 40 de criterii de succes WCAG. Însă, atunci când 26% dintre aceste remedieri introduc noi încălcări – inclusiv nerespectări de nivel A generate prin ascunderea elementelor funcționale –, nivelul net de conformitate poate fi mai slab decât în cazul site-ului nemodificat.

Un site fără fereastră suprapusă care prezintă 50 de încălcări ale standardelor WCAG se află într-o situație juridică mai clară decât un site cu fereastră suprapusă care prezintă 30 de încălcări inițiale plus 203 de încălcări generate de fereastra suprapusă – deoarece încălcările generate de fereastra suprapusă demonstrează că operatorul site-ului a implementat un instrument care discriminează în mod activ utilizatorii cu dizabilități, ceea ce subminează orice apărare bazată pe bună-credință.

🢢 Abordarea instrumentului de monitorizare în ceea ce privește conformitatea cu ADA

Instrumentul de monitorizare nu poate genera încălcări ale standardelor WCAG, deoarece nu modifică niciodată DOM-ul. În schimb, acesta utilizează axe-core – același motor folosit de Departamentul de Justiție, Comisia Europeană și majoritatea specialiștilor în testarea accesibilității – pentru a identifica încălcări reale, cu ID-uri de reguli standardizate și niveluri de gravitate. Dezvoltatorii remediază aceste încălcări în codul sursă, unde remediile sunt supuse unei revizuiri a codului, testării automate (inclusiv verificări CI/CD de accesibilitate) și unei implementări controlate. Fiecare remediere reprezintă o îmbunătățire permanentă a bazei de cod, nu un patch temporar de rulare care poate deveni învechit, se poate aplica elementului greșit sau poate ascunde conținutul de utilizatorii cu dizabilități.

Concluzia

Arhitectura de suprapunere pentru accesibilitate generează tocmai problemele pe care pretinde că le rezolvă

Suprapunerile ascund conținutul utilizatorilor cu dizabilități (141 de elemente pe 5 site-uri). Acestea introduc erori în mediul de producție (7 instanțe aria-label=”true”). Se defectează la fiecare implementare a site-ului (98% dintre selectori vizează clase specifice framework-ului). Urmăresc utilizatorii înainte de obținerea consimțământului (UID-uri și ID-uri de sesiune persistente). Consumă 75% din timpul de rețea pentru analizele furnizorilor, nu pentru accesibilitate. Iar companiile care le utilizează sunt date în judecată la o rată de peste 1.000 de cazuri pe an.

Un instrument de monitorizare care scanează și generează rapoarte – fără a modifica DOM-ul – elimină simultan toate aceste riscuri. Remediile sunt implementate de către dezvoltatorii site-ului prin intermediul proceselor obișnuite de revizuire a codului, testare și implementare. Remediile sunt durabile, deoarece fac parte din codul sursă, nu dintr-un strat paralel al unei terțe părți. Iar instrumentul în sine nu poate afecta funcționalitatea site-ului, nu poate urmări utilizatorii și nu poate crea bariere de accesibilitate, deoarece nu intervine niciodată asupra paginii.

Pentru companiile din domeniul comerțului electronic care analizează utilizarea unor extensii de accesibilitate, recomandăm să vă puneți trei întrebări: În primul rând, acest instrument modifică DOM-ul în timp real? Dacă da, fiecare remediere reprezintă un potențial punct de defectare la următoarea implementare. În al doilea rând, acest instrument monitorizează utilizatorii? Dacă da, aveți nevoie de un acord de prelucrare a datelor (DPA) conform cu GDPR și de un mecanism de consimțământ, iar monitorizarea trebuie menționată în politica de confidențialitate. În al treilea rând, puteți verifica ce face acest instrument? Dacă răspunsul este un singur fișier minimizat de 794 KB cu un MutationObserver pe întregul document, răspunsul sincer este nu.

Arhitectura de tip overlay a fost concepută ca o scurtătură. Cercetările noastre arată că aceasta duce la răspundere juridică, discriminare a utilizatorilor, scăderea performanței și acumularea de datorii tehnice. Abordarea bazată pe monitorizare – scanare, raportare, remediere direct în codul sursă – este singura arhitectură care se poate scala fără a genera noi probleme.