window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Bezpieczeństwo XSS w popularnych bibliotekach Javascript. Czy nadal powinienem się martwić? - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2019-08-26
Software Development

Bezpieczeństwo XSS w popularnych bibliotekach Javascript. Czy nadal powinienem się martwić?

Daniel Grek

W przypadku najpopularniejszych bibliotek Javascript trzeba przyznać, że w historii ich rozwoju (9, 6 i 5 lat odpowiednio dla Angular, React i Vue) wydarzyło się wiele dobrego pod względem bezpieczeństwa, zwłaszcza związanego z podatnością na ataki XSS. W tym artykule omówione zostaną jednak drobne pułapki i zasady, o których deweloperzy nadal powinni wiedzieć.

XSS

Żyjemy w erze frameworków, a nie języków. Oznacza to, że programiści powinni być w stanie mniej martwić się o wiele aspektów rozwoju, w tym o bezpieczeństwo. Większość obecnych frameworków backendowych implementuje moduły bezpieczeństwa, które są testowane przez zewnętrzne, wyspecjalizowane firmy i duże stowarzyszenia. Dlatego, malejąca świadomość bezpieczeństwa Może to być widoczne na przykład między młodymi programistami, którzy biorą większą odpowiedzialność za produkty, zwłaszcza w zakresie freelancingu.

Jednym z powszechnych ataków po stronie klienta aplikacji jest XSS (Cross-Site Scripting). Jest on wykonywany poprzez wstrzykiwanie skryptów uruchamianych po stronie klienta do aplikacji internetowych [1] i wykorzystuje zaimplementowane metody renderowania HTML lub Javascript kod oceniających, które go wykonują. XSS jest stosunkowo lukratywny, ponieważ może gromadzić wiele różnych danych, w tym pliki cookie sesji lub dane użytkownika, i może zainstalować aplikację śledzącą, taką jak keylogger, co czyni go niebezpiecznym zarówno dla użytkowników, jak i właścicieli firm. Czasami wykonywane są inne formy ataku, aby umożliwić XSS na stronie, takie jak Wstrzyknięcie kodu SQL.

Przykład

Formularz logowania na stronie renderuje parametr loginName wysłany w żądaniu GET w polu nazwy logowania. Wartość nie jest przetwarzana ani przez serwer, ani po stronie klienta aplikacji. Poprzez żądanie: http://localhost:8080/login?name=<script>alert(document.cookies)</script>
kod jest wykonywany, a dane są ujawniane

To jest przykład odbity atak XSS, gdzie skrypty są wstrzykiwane za pośrednictwem specjalnie przygotowanego adresu URL przesłanego do ofiary i odzwierciedlanego przez odpowiedź serwera. Inne znane popularne formy ataków są następujące:

  • Przechowywane XSS wykonywane przy użyciu wstrzykniętych danych przechowywanych po stronie serwera, zwykle za pomocą formularzy dostępnych w aplikacji. Aplikacja kliencka renderuje kod przechowywany na przykład w bazie danych.
  • DOM XSS wykonuje atak XSS bez użycia strony serwera. W dalszej części artykułu skupimy się na tej formie ataku.

Aktualne luki w zabezpieczeniach bibliotek React i Vue

W obecnych wersjach React/Vue wykryto dwa poważne problemy, które nie zostały jeszcze oficjalnie naprawione. Pierwsza luka ma ten sam charakter dla każdego frameworka i jest związana z metodami pozwalającymi na renderowanie surowego HTML w szablonach: v-html i dangerouslySetInnerHTML, odpowiednio dla Vue i React. Każda dokumentacja [2] informuje czytelników, że nieostrożne użycie może narazić użytkowników na atak XSS. Jeśli żadne inne opcje nie pozwalają na rozwiązanie problemu, należy upewnić się, że dane są filtrowany i uciekł. Chociaż są one niebezpieczne, nie należy oczekiwać, że metody te zostaną naprawione. Używaj ich na własne ryzyko.

W pierwszym kwartale 2018 roku wykryto duży błąd w React, umożliwiający bezpośrednie wykonanie kodu poprzez ustawienie właściwości dla elementu znacznika. Przekazywanie przykładowego kodu w ramach atrybutów, takich jak javascript:alert(1) i uruchomienie renderowanego łącza spowoduje wykonanie kodu. Problem ten [4] jest wciąż otwarty i nie została przygotowana żadna poprawka, więc upewnij się, że Twój kod jest bezpieczny. Przykłady zaproponowane w oficjalnej dyskusji sugerują kilka sposobów na przezwyciężenie tego problemu.

Jeśli aktualizacja do najnowszych wersji nie jest możliwa, upewnij się, że stare błędy nie powodują problemów, upewniając się, że Twój kod nie jest na nie narażony:

  • dziecko węzeł wtrysk - React, użycie React.createElement [5]
  • renderowanie po stronie serwera - React/Vue [6]
  • Wstrzykiwanie CSS [8]

Wciąż chodzi o Javascript. Wciąż chodzi o front-end

Nie zapominaj, że oprócz samych frameworków lub bibliotek, Javascript jako język ma pewne niebezpieczne funkcje, których należy unikać lub używać z ostrożnością. Są one zazwyczaj związane z manipulacją DOM lub wykonywaniem skryptów. eval() reprezentuje flagowe funkcje tego rodzaju i jest niezwykle niebezpieczna, ponieważ bezpośrednio wykonuje podany kod łańcuchowy [9]. Ponadto, lepiej przyjrzyj się swojemu kodowi, gdy znajdziesz jedną z tych funkcji:

  • document.write
  • document.writeln
  • (element).innerHTML
  • (element).outerHTML
  • (element).insertAdjacentHTML

W tym przypadku użycie linterów z odpowiednim zestawem reguł może być pomocne w znalezieniu takich podatnych na ataki punktów. Istnieje również wiele otwartych lub komercyjnych analizatorów kodu, które mogą pomóc w wykryciu luk bezpieczeństwa w opracowanym kodzie.

Niezależnie od wybranej biblioteki/frameworka, wciąż musimy pamiętać o podstawowych zasadach związanych z tworzeniem front-endu. Po pierwsze, zawsze upewnij się, że zewnętrzny kod, który wstrzykujesz, pochodzi z zaufanego źródła. Audyt zależności i wybieraj je mądrze. Niektóre z nich mogą zawierać poważne luki w zabezpieczeniach, narażając twój kod, nawet jeśli wszystko jest w porządku z samym kodem. Więcej o bezpieczeństwie zależności można przeczytać tutaj:

https://thecodest.co/blog/security-in-javascript-packages/

Więc... czy nadal powinieneś się martwić?

Tak - i gorąco zachęcam wszystkich, aby nigdy nie ufali zewnętrznym bibliotekom ani sobie w kwestii bezpieczeństwa. Bez względu na to, jak bezpieczne jest twoje oprogramowanie, zawsze staraj się przetestować je w jak największym stopniu pod kątem typowych form ataku [10].

  1. https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
  2. https://vuejs.org/v2/guide/syntax.html#Raw-HTML
  3. https://github.com/facebook/react/issues/12441
  4. http://danlec.com/blog/xss-via-a-spoofed-react-element
  5. https://medium.com/node-security/the-most-common-xss-vulnerability-in-react-js-applications-2bdffbcc1fa0
  6. https://github.com/dotboris/vuejs-serverside-template-xss
  7. https://frontarm.com/james-k-nelson/how-can-i-use-css-in-js-securely/
  8. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Do_not_ever_use_eval!

Czytaj więcej:

5 błędów, których należy unikać podczas prowadzenia projektu w PHP

PHP Development. Komponent konsoli Symfony - porady i wskazówki

Dlaczego potrzebujemy Symfony Polyfill (... i dlaczego nie powinniśmy)?

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polska

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

    pl_PLPolish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek pl_PLPolish