Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Cross-Site Scripting, všeobecne známy ako XSS, je jednou z najnebezpečnejších metód útoku, ktorú používa kyberzločinci, takže je dôležité, aby každý vývojár a bezpečnostný výskumník vedel, čo to je a ako na to zabrániť útokom. Ako teda môžete podniknúť kroky proti zraniteľnosti XSS? Na zobrazenie údajov, ktoré webová lokalita dostáva od používateľa, používate HTML, JavaScript alebo DOM. Jedna alebo viacero z týchto troch rôznych oblastí môže spolupracovať.

Ako zabrániť XSS pomocou HTML

XSS umožňuje útočníkom vkladať škodlivé kódy alebo skripty na webové stránky, zamerané na nič netušiacich používateľov navštevujúcich stránku. Mohlo by to ukradnúť osobné údaje, presmerovať návštevníkov na inú stránku zriadenú kyberzločincom alebo inak narušiť vzhľad webovej stránky. Ale môžete tomu zabrániť; napríklad tým, že im prestane vkladať HTML.

Predstavte si, že máte webovú stránku s knihou návštev. Povedzme, že vaši návštevníci používajúci túto knihu návštev sem môžu písať svoje mená a správy a ich správy je možné verejne prezerať. Útočník, ktorý chce urobiť test XSS vo vašej knihe návštev, použije oblasť, ktorú ste pridelili na napísanie správy. Tento kyberzločinec tu spustí kód JavaScript. Útočník by napríklad mohol použiť kód JavaScript, ako napríklad:

instagram viewer

<skript>upozornenie ("XSS!")</script>

Aby to bolo úspešné, musí útočník použiť značku skriptu. Ak nie, kód JavaScript nebude fungovať. Príkaz < musíte zakódovať, aby používatelia nikdy nemohli používať značky HTML. Útočníkovi to sťaží prácu s HTML tagmi.

Ako zabrániť XSS pomocou JavaScriptu

Logika v HTML je tiež platný v JavaScripte. V niektorých aplikáciách je možné vytlačiť údaje prijaté webom od používateľa pomocou kódu JavaScript.

Zvážte toto kódovanie:

<p id="vytlačiť"></str>
<skript>
document.getElementById("test").vnútornéHTML = "";
</script>

Predstavte si, že webová stránka používa blok kódu, ako je ten vyššie. Vývojár tu použil značku „p“ s názvom „print“. Ako vidíte z kódu, hodnota bude pochádzať z parametra „search“ a vývojár chce túto prichádzajúcu hodnotu zobraziť v značke „p“. Vývojár, ktorý vykonal túto operáciu, chcel použiť funkciu innerHTML JavaScriptu.

Teraz sa pozrime na situáciu z pohľadu kyberútočníka. V takom prípade útočník vykoná XSS test v rámci tagu „script“. Na to útočník nemusí reštartovať značku, pretože sa už používa značka "script". Útočník by potom mohol napísať test takto:

názov_súboru.php? hľadať=a" upozornenie ("XSS!"); f= "

Tento kód sa na webovej stránke zobrazí ako:

document.getElementById("test").vnútornéHTML = " a" upozornenie ("XSS!"); f="";

Ten útok by bol úspešný. Aby sme problém lepšie pochopili, pozrime sa na ďalší príklad techniky, ktorú by útočník mohol použiť. Hacker mohol použiť test XSS, ako napríklad:

názov_súboru.php? hľadať =";</script><em>Fatih</em>

Takto to bude vyzerať pri prezeraní z webovej stránky:

document.getElementById("test").vnútornéHTML = "";</script><em>Fatih</em>";

Môže sa to zdať trochu zvláštne, pretože útočník uzavrel prvú značku „script“ pomocou štruktúry ako „/script“. Útočník tak môže reštartovať ľubovoľný kód JavaScript a HTML, ktorý chce.

Ak sa zamyslíte nad týmito dvoma rôznymi príkladmi, ochrana pred XSS sa zdá byť celkom jednoduchá. Nevyhnutným opatrením by bolo zakódovanie " a ' znaky, ktoré vidíte v prvom príklade. V druhom príklade zakódujte znaky < a >.

Ako zabrániť XSS pomocou DOM

V tomto variante XSS môžu údaje, ktoré web dostane od používateľa, zasahovať do vlastnosti prvku DOM. Napríklad informácia o farbe, ktorú stránka dostane od používateľa, môže ovplyvniť farbu pozadia tabuľky alebo celého pozadia stránky. Používateľ tak nevedomky zasahuje do rozloženia štýlu tela a stola. Nasledujúci kód je dobrým príkladom:

<body bgcolor="<?php echo $_GET['farba']; ?>"/>

Pri tomto webová stránka používa parameter „color“ získaný od používateľa priamo vo vlastnosti „bgcolor“ prvku „body“. Čo by teda mohol útočník v tomto bode urobiť? Mohli by spustiť tento škodlivý kód:

názov_súboru.php? farba=červená" onload="upozornenie ('XSS!')

Pri pohľade z webovej stránky to vyzerá takto:

<body bgcolor=" červená" onload="upozornenie ('XSS!') "/>

Aby sa tomu zabránilo, vývojár by musel kódovať " charakter.

V JavaScripte je však potrebné poznamenať ešte jeden dôležitý prvok. Nasledujúci útržok kódu je príkladom:

<a href="javascript: alert('XSS!')">

To znamená, že je možné priamo spustiť nejaký kód JavaScript. Jedným z najlepších preventívnych opatrení je zabezpečiť, aby webová lokalita skontrolovala, či údaje, ktoré dostáva od používateľov, sú skutočnou adresou URL. Najjednoduchšou metódou je uistiť sa, že existujú výrazy ako „HTTP“ a "HTTPS" (zabezpečená verzia HTTP) v spojení.

Príklad funkcie na zabránenie XSS pomocou PHP

Videli ste niekoľko príkladov, ako chrániť aplikáciu alebo webovú stránku pred útokmi XSS. Útržky kódu v tejto tabuľke môžete použiť s PHP:

Kódovať v HTML

htmlspecialchars($str, ENT_COMPAT)

Kódovať v JavaScripte a atribúte DOM

htmlspecialchars($str, ENT_NOQUOTES)

Kontrola URL

'/^(((https?)|(\/\/))).*/';

Upozorňujeme, že toto sú len príklady a budú sa líšiť v závislosti od jazyka softvéru, ktorý používate.

Môžeš vytvoriť webovú aplikáciu s PHP a vyskúšajte kódy, ktoré vidíte vyššie, aby ste ich odoslali. Ak vás zaujíma, ako používať všetky tieto metódy, môžete získať niekoľko nápadov z bloku kódu PHP nižšie, ktorý by mal byť užitočný, aj keď používate iný jazyk:

<?php
$data = $_GET['data'];

funkciuv_atribúte($str){
vrátiť htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT zakóduje znak dvojitej úvodzovky (").
}

funkciuin_html($str){
$link = '/^(((https?)|(\/\/))).*/';
ak(!preg_match($link, $str))
{
vrátiť "/";
}
vrátiť $str;
}

$data = in_attribute($data);
$data = in_html($data);
$data = real_url (data);
?>

Chráňte svoj web pred XSS a ďalšími

XSS je populárny vektor útoku používaný hackermi. Na otestovanie zraniteľnosti XSS sa zvyčajne dá použiť hodnota cesty v adrese URL, akékoľvek pole na vašej webovej lokalite, do ktorého možno zadávať údaje (napríklad polia formulárov a komentárov). Ale samozrejme, existuje mnoho rôznych metód, ktoré môžu kyberzločinci použiť na napadnutie stránky, najmä ak máte web, ktorý má veľa používateľov a skrýva ich informácie.