Ochrana uživatelů před útoky XSS založené na DOM

ochrana uživatelů před útoky XSS založenými na DOM

Cross-site scripting (XSS) je jedním z nejčastějších útoků wayshackers na webové stránky. Chyby zabezpečení XSS umožňují škodlivému uživateliprovádět libovolné bloky JavaScriptu, když ostatní uživatelé navštíví váš web.

XSS je nejčastější veřejně hlášenou zranitelností zabezpečení a součástí sady nástrojů každého hackera.

rizika

Prevalence vzácné

využitelnost snadná

dopad škodlivý

útoky XSS založené na DOM mají všechna rizika spojená s ostatními typy útoků XSS, s přidaným bonusem, který nelze detekovat ze strany serveru.Každá stránka, která používá fragmenty URI, je potenciálně ohrožena útoky XSS.

ochrana

ochrana před útoky XSS založenými na DOM je otázkou kontroly, zda yourJavaScript neinterpretuje fragmenty URI nebezpečným způsobem. Existuje řada způsobů, jak to zajistit.

použijte rámec JavaScript

rámce jako AngularJS a React používají šablony, díky nimž je konstrukce ad-hoc HTML explicitní (a vzácná) akce. To posune váš vývojový tým směrem k osvědčeným postupům a usnadní detekci nebezpečných operací.

AngularJS

v Angular jakýkoli dynamický obsah napsaný v složených závorkách automaticky unikne, takže následující je bezpečné:

 <div>{{dynamicContent}}</div>

dávejte si pozor na jakýkoli kód, který váže dynamický obsah na atributy innerHTML, které nebudou automaticky unikány:

 <div ="dynamicContent"></div> <div innerHTML="{{dynamicContent}}"></div>
React

v React jakýkoli dynamický obsah napsaný v složených závorkách automaticky unikne, takže následující je bezpečné:

render() { return <div>{dynamicContent}</div>}

React umožňuje napsat raw HTML vázáním obsahu na vlastnost dangerouslySetInnerHTML, která je pojmenována tak, aby vám připomněla bezpečnostní riziko! Dejte si pozor na jakýkoli kód, který vypadá následovně:

render() { return <div dangerouslySetInnerHTML={ __html: dynamicContent } />}
pečlivě zkontrolujte svůj kód

někdy je úplný rámec JavaScriptu pro váš site.In v takovém případě budete muset pravidelně provádět kontrolu kódu, abyste zjistili umístění tohoto odkazu window.location.hash. Zvažte, jak přijít s dohodnutými standardy kódování o tom, jak mají být fragmenty URI psány a interpretovány, a centralizujte tuto logiku do základní knihovny.

pokud používáte JQuery, pečlivě zkontrolujte kód, který používá funkcihtml(...). Pokud vytváříte raw HTML na straně klienta na zadní straně nedůvěryhodného vstupu, můžete mít problém, zda vstup pochází z fragmentu URI nebo ne. Pokud je to možné, použijte funkci text(...).

pokud používáte direct nativní Dom API, nepoužívejte následující vlastnosti a funkce:

  • innerHTML
  • outerHTML
  • document.write

místo toho nastavte textový obsah ve značkách, kdykoli je to možné:

  • textContent
pečlivě analyzujte JSON

nehodnoťte JSON, abyste jej převedli na nativní objekty JavaScriptu – například pomocí funkce eval(...). Místo toho použijte JSON.parse(...).

detekce nebezpečného kódu pomocí vývojových nástrojů

Sada Burp, vyrobená bezpečnostní firmou PortSwigger, může být použita k detekci zranitelností založených na DOM.

nepoužívejte fragmenty URI vůbec!

nejbezpečnější kód je kód, který tam není. Pokud nepotřebujete používat fragmenty URI, pak ne! Napište test jednotky pro skenování JavaScriptu pro zmínky o window.location.hash a nechte jej selhat, pokud je vzor nalezen. Pokud je potřeba použít fragmenty URI, můžete diskutovat o tom, jak zajistit jejich bezpečné používání.

implementujte zásady zabezpečení obsahu

moderní prohlížeče podporují zásady zabezpečení obsahukteré umožňují autorovi webové stránky řídit, odkud lze načíst a spustit JavaScript (a další zdroje). Útoky XSS se spoléhají na to, že útočník může spouštět škodlivé skripty na webové stránce uživatele-buď vložením inline <script> značek někde v rámci značky <html> stránky, nebo podvedením prohlížeče do načtení JavaScriptu ze Škodlivé domény třetí strany.

nastavením zásad zabezpečení obsahu v hlavičce odpovědi můžete prohlížeči říct, aby nikdy nespustil inline JavaScript a uzamkl, které domény mohou hostovat JavaScript pro stránku:

obsah-bezpečnost-politika: script-src ‚self‘ https://apis.google.com

povolením seznamu Uri, ze kterého lze načíst skripty, implicitně prohlašujete, že inline JavaScript není povolen.

zásady zabezpečení obsahu lze také nastavit ve značce <meta> v prvku <head>stránky:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com">

tento přístup bude chránit vaše uživatele velmi efektivně! Může to však trvatznačné množství disciplíny, aby byl váš web připraven na takovou hlavičku.Inline skripty tagy jsou považovány za špatnou praxi v moderní web-vývoj-míchání obsahu a kódu dělá webové aplikace obtížné udržovat-ale arecommon ve starších, starší weby.

Chcete-li postupně migrovat z inline skriptů, zvažte makings použití ofCSP porušení Reports.By přidáním direktivy report-uri do hlavičky zásad vás prohlížeč neinformuje o porušení zásad, místo aby zabránil spuštění inline JavaScriptu:

Content-Security-Policy-Report-Only: script-src ‚self‘; zpráva-uri http://example.com/csr-reports

to vám dá ujištění, že neexistují žádné přetrvávající inline skripty, než je úplně zakážete.

další čtení

  • jak funguje skriptování mezi weby
  • Úvod do zásad zabezpečení obsahu
  • CSP (Content Security Policy) v síti vývojářů Mozilly
  • DOM Based Cross-site Scripting Vulnerability
cross-site skriptování

odrazené XSS

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.