Zabezpieczenie przed mutation XSS – co zmienia ucieczka znaków < i > w atrybutach HTML?

itcontent.eu 2 dni temu

Zabezpieczenie przed mutation XSS – co zmienia ucieczka znaków w atrybutach HTML?

W odpowiedzi na rosnące zagrożenia typu mutation XSS (mXSS), specyfikacja HTML w wersji przyjętej 20 maja 2025 roku została zmodyfikowana – teraz znaki < i > w atrybutach HTML są automatycznie kodowane jako &lt; i &gt;. Zmiana weszła już do Chrome 138 Beta (28 maja), a do kanału stabilnego trafi 24 czerwca 2025 roku twitter.com+4developer.chrome.com+4linkedin.com+4.


Co dokładnie się zmieniło?

  • Serializacja DOM: Podczas korzystania z element.outerHTML lub innerHTML, znaki < i > są już kodowane. Przykład: <div data-content="<u>hello</u>"></div> staje się <div data-content="&lt;u&gt;hello&lt;/u&gt;"></div>.

  • Bez zmiany przy parsowaniu: Wciąż możesz odczytać atrybut przez getAttribute, dataset czy .attributes.value, a wartość wróci w pierwotnym formacie z odkodowanymi znakami developer.chrome.com.


Dlaczego to istotne?

  • Zmierzono siłę mutation XSS: ataki te są trudne do wychwycenia, bo sam przeglądarka modyfikuje DOM. Zakodowanie znaków w atrybutach skutecznie utrudnia przekształcenie wymuszonego HTML w aktywny kod.

  • Zasada “safety-first”: teraz choćby czytanie HTML przez .innerHTML nie sprowadza niebezpieczeństwa, jeżeli rozwiniemy DOM bezpośrednio.


Kto i kiedy zostanie dotknięty?

Potencjalne problemy:

  • Skrypty, które wyłuskują wartości atrybutów bezpośrednio z .innerHTML lub .outerHTML, będą musiały być zaktualizowane.

    js
    KopiujEdytuj
    const content = div.outerHTML.match(/"([^"]+)"/)[1];

    Ta metoda przestanie działać poprawnie – wartość wróci w formie zakodowanej .

  • Testy typu end‑to‑end oparte o porównywanie statycznego HTML mogą się nie zgadzać – spodziewane wartości zakodowane znaki będą się różnić od rzeczywistego wyniku.


Jak się przygotować?

  1. Unikaj parsowania HTML z .innerHTML – korzystaj z bezpiecznych metod DOM: getAttribute(), dataset, .attributes.

  2. Zaktualizuj przypadki testowe, w których porównujesz HTML – sprawdź, czy nie powinno się oczekiwać zakodowanych wartości &lt;/&gt;.

  3. Jeśli to konieczne, zgłoś bugi – szczególnie w przeglądarce Chromium, jeżeli coś zostało niesłusznie utrudnione .

Nowa specyfikacja HTML wzmacnia przeglądanie bezpieczeństwa – kodując < i > w atrybutach, skutecznie ogranicza ryzyko mutation XSS. jeżeli tworzysz skrypty lub testy zależne od .innerHTML, przygotuj się na aktualizację. Po 24 czerwca 2025 roku Chrome 138 oraz Firefox 140 (oraz Safari 26 Beta) wprowadzą tę zmianę na stałe developer.chrome.com.

Źródło: bughunters.google.com

Idź do oryginalnego materiału