Hogyan lehet megakadályozni a webhelyek közötti szkriptelési támadásokat?

mi a webhelyek közötti szkriptelés megelőzése?

a Cross-site scripting prevention a webhelyek vagy webes alkalmazások XSS biztonsági réseinek felderítése és kijavítása, mielőtt azok megjelennek. Az XSS sebezhetőségek észlelése automatikusan elvégezhető egy automatizált sebezhetőségi szkenner segítségével, vagy manuálisan behatolási tesztek végrehajtásával. Ebben a cikkben megismerheti a webhelyek közötti szkriptelés megelőzésének legjobb gyakorlatait, és azt, hogyan lehet ezeket azonnal végrehajtani. A cikk végén talál egy linket egy ingyenes, fejlesztőközpontú sebezhetőségi szkennerhez is, így korán és gyakran elkezdheti észlelni és orvosolni a webhelyek közötti szkriptelési sebezhetőségeket, a fejlesztési folyamat részeként

ebben a cikkben megtudhatja:

  • mi a Cross-Site Scripting megelőzés?
  • hogyan működik a cross-site scripting?
  • melyek az XSS támadások típusai?
  • mennyire fontos a Cross-site scripting megelőzés?
  • Cross site scripting protection
    • Escape dinamikus tartalom
    • Whitelist értékek
    • tartalombiztonsági politika végrehajtása
    • HTML fertőtlenítése
    • csak HTTP cookie-k
  • XSS megelőzés kódpéldákkal
    • Cross-site scripting megelőzés Pythonban (Django)
    • Cross-site scripting megelőzés Rubyban (Rails)
    • Cross-site scripting megelőzés Java-ban (Java Server Pages)
    • Cross-site scripting megelőzés C# – ban (ASP.NET)
    • Cross-site scripting megelőzés csomópont
      • bajusz.js
      • por.js
      • Nunjucks
    • Cross-site scripting megelőzés PHP-ben
    • Cross-site scripting megelőzés AngularJS – ben
    • Cross-site scripting megelőzés a React-ben
  • hogyan segíthetnek az automatizált eszközök a webhelyek közötti szkriptek megelőzésében?

hogyan működik a cross-site scripting?

a Cross-Site Scripting (XSS) támadások az injekciós támadások egyik formája, ahol a rosszindulatú szkripteket megbízható webes alkalmazásokba injektálják.

hogyan működik a cross site scripting? diagram

a támadó a webalkalmazással rosszindulatú kódot küldhet, jellemzően böngészőoldali szkript formájában egy másik végfelhasználónak, ami XSS támadást eredményez.

az XSS sebezhetőségek nagyon gyakoriak, amikor egy webalkalmazás A generált kimeneten belüli érvényes felhasználó bemenetét használja, de a megfelelő érvényesítés vagy kódolás nélkül.

a Felhasználónak küldött rosszindulatú szkript segítségével a böngésző nem tudja kategorikusan tudni, hogy a szkriptet nem szabad megbízni, majd végrehajtja a szkriptet. Ez a parancsfájl ezután számos adathoz férhet hozzá, beleértve a cookie-kat, a munkamenet-tokeneket vagy bármely más érzékeny információt, amelyet az adott webhely böngészője megőrizhet.

melyek az XSS támadások típusai?

az XSS támadásoknak három fő típusa van:

  1. tükrözött XSS: a rosszindulatú szkript az aktuális HTTP kérésből származik
  2. tárolt XSS: a rosszindulatú szkript a webhely
  3. Dom-alapú XSS adatbázisából származik: ahol a biztonsági rés a kliens oldali kódban, nem pedig a szerver oldali kódban található.

mennyire fontos a Cross-site scripting megelőzés?

az XSS biztonsági rés kihasználásából származó kár a webhely által kezelt adatok érzékenységétől függ. Íme néhány példa, ahol a hackerek kihasználták az XSS sebezhető alkalmazásokat:

  • férgek terjesztése a közösségi médiában: a Facebook, a Twitter és a YouTube mind sikeresen támadtak ilyen módon.
  • ülés eltérítés: A rosszindulatú JavaScript képes lehet elküldeni a munkamenet-azonosítót egy távoli webhelyre a hacker ellenőrzése alatt, lehetővé téve a hacker számára, hogy megszemélyesítse ezt a felhasználót egy folyamatban lévő munkamenet eltérítésével.
  • személyazonosság-lopás: ha a felhasználó bizalmas információkat, például hitelkártya-számokat ad meg egy kompromittált webhelyre, ezeket az adatokat rosszindulatú JavaScript segítségével ellophatják.
  • szolgáltatásmegtagadási támadások és weboldal vandalizmus.
  • érzékeny adatok, például jelszavak lopása.
  • pénzügyi csalás banki oldalakon.

Cross-site scripting protection

Escape dinamikus tartalom

általában egy weboldal megjelenítésekor a dinamikus tartalom HTML-be van szőve. Ha a dinamikus tartalmat nem megfelelően kezelik, a támadó ezt felhasználhatja tárolt XSS támadás létrehozására. A támadó visszaélne egy szerkeszthető mezővel valamilyen rosszindulatú JavaScript-kód beillesztésével, amelyet a böngésző értékel, amikor egy másik felhasználó meglátogatja az oldalt.

előfordulhat, hogy nem szeretné, hogy a felhasználók nyers HTML-t készítsenek, kivéve, ha webhelye tartalomkezelő rendszer. Kerülje el az adattárból származó összes dinamikus tartalmat, így a böngésző tudja, hogy HTML-címkék tartalmaként kell kezelni, szemben a nyers HTML-vel.

a dinamikus tartalom kikerülése általában abból áll, hogy a jelentős karaktereket a HTML entitás kódolásával helyettesítik:

” &#34
# &#35
& &#38
‘ &#39
( &#40
) &#41
/ &#47
; &#59
< &#60
> &#62

amint az alábbi kódmintákban látni fogja, a legtöbb modern keretrendszer alapértelmezés szerint elkerüli a dinamikus tartalmat.

a szerkeszthető tartalom ilyen módon történő kikerülésével a tartalmat a böngésző soha nem fogja végrehajtható kódként kezelni. Ez megakadályozza a legtöbb XSS támadást.

Engedélyezőlista értékek

ha egy dinamikus adatelem csak néhány érvényes értéket vehet fel, korlátozza az adattár értékeit. Győződjön meg arról is, hogy a renderelési logika csak ismert, megfelelő értékeket engedélyez.

egy példa, ahol érdemes használni ezt a megközelítést, ha megkéri a felhasználót, hogy válassza ki az országot egy legördülő listából,, ahelyett, hogy kézzel írja be.

tartalombiztonsági házirend végrehajtása

a Modern böngészők támogatják a tartalombiztonsági házirendeket. A tartalom-biztonsági házirendek lehetővé teszik, hogy a weboldal szerzője szabályozza, hogy a JavaScript és más erőforrások hol tölthetők be és hajthatók végre.

ahhoz, hogy egy XSS támadás lehetséges legyen, a támadónak képesnek kell lennie rosszindulatú szkriptek futtatására a felhasználó weboldalán – vagy inline < script>címkék befecskendezésével valahol az oldal < html> címkéjén belül, vagy a böngésző becsapásával, hogy betöltse a Javascriptet egy rosszindulatú harmadik fél domainjéből.

tartalombiztonsági házirend beállítása a válaszfejlécben lehetővé teszi, hogy megmondja a böngészőnek, hogy soha ne hajtson végre inline JavaScriptet, és válassza ki azokat a tartományokat, amelyek egy Oldalhoz Javascriptet tárolhatnak:

Content-Security-Policy: script-src 'self' https://apis.google.com
az URL-ek engedélyezőlistáján, ahonnan a szkriptek betölthetők, implicit módon kijelenti, hogy az inline JavaScript nem engedélyezett.

a tartalombiztonsági házirendet egy <meta> címkébe is elhelyezheti az oldal <head> elemében:

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

ez a megközelítés nagyon hatékony a felhasználók védelmében, de fegyelmet igényel, hogy webhelye készen álljon egy ilyen fejlécre. Míg az inline szkriptek használata rossz gyakorlatnak számít a modern webfejlesztésben, a régebbi, örökölt webhelyeken gyakoriak.

az inline szkriptek fokozatos eltávolításához fontolja meg a CSP megsértési jelentések használatát. A jelentés-uri irányelv hozzáadásával a házirend fejlécébe, a böngésző értesíti Önt az irányelvek megsértéséről, ahelyett, hogy megakadályozná az inline JavaScript végrehajtását:

Content-Security-Policy-Report-Only: script-src 'self'; report-uri http://example.com/csr-reports

ez megnyugtatja Önt, hogy nincsenek elhúzódó inline szkriptek, mielőtt egyenesen betiltaná őket.

HTML fertőtlenítése

egyes webhelyek esetében jogos igény van a nyers HTML tárolására és renderelésére. Ha a webhely gazdag tartalmat tárol és renderel, HTML-fertőtlenítő könyvtárat kell használnia annak biztosítására, hogy a rosszindulatú felhasználók ne fecskendezhessenek szkripteket HTML-beadványaikba.

csak HTTP-cookie-k

rosszindulatú JavaScript használható a felhasználó munkamenet-azonosítóját tartalmazó cookie ellopására. Ritkán van jó ok arra, hogy olvassa el vagy manipulálja a cookie-kat az ügyféloldali JavaScript – ben, ezért fontolja meg a cookie-k csak HTTP-ként való megjelölését, ami azt jelenti, hogy a cookie-kat a böngésző fogadja, tárolja és elküldi, de a JavaScript nem módosíthatja vagy olvashatja.

XSS megelőzés kód példákkal

Cross-site scripting megelőzés Python (Django)

sablonok Django escape HTML alapértelmezés szerint, így bármi, ami úgy néz ki, mint a következő általában biztonságos:

**{{ contents }}**

a | safe szűrő segítségével felülbírálhatja az escape funkciót. Ennek gyakran jó okai vannak, de kódvizsgálatokat kell végeznie bármiről, amely ezt a parancsot használja:

**{{ contents | safe }}**

vegye figyelembe, hogy a HTML-menekülés a {% autoescape %} címkével is be-vagy kikapcsolható.

Cross-site scripting prevention in Ruby (Rails)

a Rails sablonok alapértelmezés szerint kikerülnek a HTML-ből, így minden, ami a következőnek tűnik, általában biztonságos:

<%= contents %>

az escape felülbírálható a raw függvény vagy a <%== operátor használatával. Ennek gyakran jó okai vannak, de kódvizsgálatokat kell végeznie bármiről, amely ezeket a funkciókat használja:

<% raw contents %>

<%== contents %>

Cross-site scripting prevention Java-ban (Java Server Pages)

a c:out címke használatával biztonságosan elkerülheti a HTML-t:

<c:out value="${contents}">

a sablonba történő írás következő módjai nem kerülik el a HTML-t, ezért óvatosan kell használni őket:

<%= contents %>

${contents}

<%
out.println(contents);
%>

Cross-site scripting megelőzés C# (ASP.NET)

használja a következő funkciók egyikét a HTML biztonságos elkerüléséhez (a <%: űrlapot a ASP.NET 4.0):

<%= HttpUtility.HtmlEncode(contents) %>

<%: contents %>

a sablonba történő írás következő módja nem kerül el automatikusan a HTML-ből, ezért óvatosan kell használni őket:

<%= contents %>

használja a HttpUtility.HtmlEncode(...) parancsot, ha manuálisan kell kikerülnie a HTML-t.

Cross-site scripting megelőzés csomópont

bajusz.js

bajuszban.js, a dupla bajuszokban lévő címkék automatikusan elkerülik a HTML-t:

{{ contents }}

ne feledje, hogy a hármas bajusz címkéi nem kerülik el a HTML-t, ezért óvatosan használja őket:

{{{ contents }}}

por.js

a Kulcscímkék automatikusan kikerülnek a HTML-ből:

{ contents }

a menekülés azonban letiltható a |s operátorral, ezért óvatosan használja ezt

{ contents | s }

Nunjucks

ha az automatikus menekülés be van kapcsolva a környezetben, a nunjucks automatikusan elhagyja a címkéket a biztonságos kimenet érdekében:

{{ contents }}

a biztonságos szűrővel jelölt tartalom nem kerül ki – használja ezt a funkciót óvatosan:

{{ contents | safe }}

az automatikus menekülés letiltható egy sablonnál, ebben az esetben a címkéket manuálisan kell megszökni:

{{ contents | escape }}

Cross-site scripting prevention in PHP

a PHP echo parancsa alapértelmezés szerint nem kerülheti el a HTML-t, ami azt jelenti, hogy minden olyan kód, mint a következő, amely közvetlenül kihúzza az adatokat a HTTP kérésből, sebezhető az XSS támadásokkal szemben:

<?php
Echo $_POST;
?>

Cross-site scripting megelőzés AngularJS

Minden tartalom írt ki göndör zárójelben automatikusan megszökött, így a következő biztonságos:

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

ne feledje, hogy minden olyan kód, amely a dinamikus tartalmat az innerHTML attribútumhoz köti, nem kerül automatikusan kikerülésre:

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

Cross-site scripting prevention in React

minden göndör zárójelben írt dinamikus tartalom automatikusan kikerül a React-ben, így a következő kód biztonságos:

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

a nyers HTML-t úgy is kiírhatja, hogy a tartalmat a dangerouslySetInnerHTML tulajdonsághoz köti. A név nem véletlen, ezért vigyázzon minden olyan kódra, amely a következőképpen néz ki:

render() {
return <div dangerouslySetInnerHTML={ __html: dynamicContent } />
}

hogyan segíthetnek az automatizált eszközök a webhelyek közötti szkriptek megelőzésében?

mint fentebb említettük, a webhelyek közötti szkriptelési támadások megelőzése egyszerű lehet, sok keretrendszer alapértelmezés szerint elkerüli a dinamikus tartalmat. De ez a kényelem véletlenszerűséghez és komoly biztonsági gyengeségekhez vezethet az alkalmazás és a vállalkozás számára.
mindig győződjön meg róla, hogy átvizsgálja az alkalmazásokat a biztonsági résekre, mielőtt kiadná őket a gyártásba, ideális esetben a DevOps és a CI/CD csővezetékek részeként, hogy minden build / commit során korán észlelje és orvosolja a biztonsági réseket.

meg lehet kezdeni automatizálja a biztonsági tesztelés ma NeuraLegion dinamikus alkalmazás biztonsági tesztelés scanner, Nexploit. Beépített fejlesztők számára, és nem hamis pozitív, akkor integrálja azt a csővezetékek váltani biztonsági tesztelés balra, és biztonságos legyen a tervezés.
iratkozzon fel ingyenes fiókjára itt: https://nexploit.app/signup

Leave a Reply

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.