Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Cross-Site Scripting, široce známý jako XSS, je jednou z nejnebezpečnějších metod útoku, kterou používá kyberzločinci, takže je životně důležité, aby každý vývojář a bezpečnostní výzkumník věděl, co to je a jak na to zabránit útokům. Jak tedy můžete podniknout kroky proti zranitelnosti XSS? K zobrazení dat, která web obdrží od uživatele, používáte HTML, JavaScript nebo DOM. Jedna nebo více z těchto tří různých oblastí může spolupracovat.

Jak zabránit XSS pomocí HTML

XSS umožňuje útočníkům vkládat škodlivé kódy nebo skripty na webové stránky zacílené na nic netušící uživatele navštěvující web. Mohlo by to ukrást osobní údaje, přesměrovat návštěvníky na jiný web vytvořený kyberzločincem nebo jinak narušit vzhled webové stránky. Ale můžete tomu zabránit; například tím, že jim zabráníte vkládat HTML.

Představte si, že máte web s návštěvní knihou. Řekněme, že vaši návštěvníci používající tuto knihu návštěv sem mohou psát svá jména a zprávy a jejich zprávy lze veřejně prohlížet. Útočník, který chce provést test XSS ve vaší knize návštěv, použije oblast, kterou jste vyčlenili pro napsání zprávy. Tento kyberzločinec zde spustí kód JavaScript. Útočník by mohl například použít kód JavaScriptu jako:

<skript>upozornění ("XSS!")</script>

Aby to bylo úspěšné, musí útočník použít značku skriptu. Pokud ne, JavaScript kód nebude fungovat. Příkaz < musíte zakódovat, aby uživatelé nikdy nemohli používat značky HTML. To útočníkovi znesnadní práci s HTML tagy.

Jak zabránit XSS pomocí JavaScriptu

Logika v HTML je také platný v JavaScriptu. V některých aplikacích je možné vytisknout data přijatá webem od uživatele pomocí kódu JavaScript.

Zvažte toto kódování:

<p id="tisk"></str>
<skript>
document.getElementById("test").vnitřníHTML = "";
</script>

Představte si, že web používá blok kódu, jako je ten výše. Vývojář zde použil značku „p“ s názvem „print“. Jak můžete vidět z kódu, z parametru „search“ bude pocházet hodnota a vývojář chce tuto příchozí hodnotu zobrazit ve značce „p“. Vývojář, který provedl tuto operaci, chtěl použít funkci innerHTML JavaScriptu.

Nyní se podívejme na situaci z pohledu kyberútočníka. V takovém případě útočník provede XSS test v rámci tagu „script“. K tomu útočník nemusí značku restartovat, protože se již používá značka „script“. Útočník by pak mohl napsat test takto:

název_souboru.php? hledat=a" upozornění ("XSS!"); f= "

Tento kód se na webu objeví jako:

document.getElementById("test").vnitřníHTML = " A" upozornění ("XSS!"); f="";

Ten útok by byl úspěšný. Abychom problému lépe porozuměli, podívejme se na další příklad techniky, kterou by útočník mohl použít. Hacker mohl použít test XSS, například:

název_souboru.php? hledat =";</script><em>Fatih</em>

Takto to bude vypadat při pohledu z webu:

document.getElementById("test").vnitřníHTML = "";</script><em>Fatih</em>";

To se může zdát trochu divné, protože útočník uzavřel první značku „script“ pomocí struktury jako „/script“. Útočník tak může restartovat libovolný JavaScript a HTML kód, který chce.

Pokud se zamyslíte nad těmito dvěma různými příklady, ochrana před XSS se zdá docela jednoduchá. Nezbytným opatřením by bylo zakódování " a ' znaky, které vidíte v prvním příkladu. Ve druhém příkladu zakódujte znaky < a >.

Jak zabránit XSS pomocí DOM

V této variantě XSS mohou data, která web obdrží od uživatele, zasahovat do vlastnosti prvku DOM. Například informace o barvě, kterou web obdrží od uživatele, může ovlivnit barvu pozadí tabulky nebo celého pozadí stránky. Uživatel tedy nevědomky zasahuje do stylových rozložení těla a stolu. Následující kód je dobrým příkladem:

<tělo bgcolor="<?php echo $_GET['barva']; ?>"/>

Tím web používá parametr „color“ obdržený od uživatele přímo ve vlastnosti „bgcolor“ prvku „body“. Co by tedy v tomto okamžiku mohl útočník udělat? Mohli by spustit tento škodlivý kód:

název_souboru.php? barva=červená" načtení="upozornění ('XSS!')

Při prohlížení z webu to vypadá takto:

<tělo bgcolor=" Červené" načtení="upozornění ('XSS!') "/>

Aby se tomu zabránilo, vývojář by musel kódovat " charakter.

V JavaScriptu je však třeba poznamenat ještě jeden důležitý prvek. Následující fragment kódu je příkladem:

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

To znamená, že je možné přímo spouštět nějaký kód JavaScript. Jedním z nejlepších preventivních opatření je zajistit, aby web zkontroloval, zda data, která obdrží od uživatelů, jsou skutečnou adresou URL. Nejjednodušší metodou je ujistit se, že existují výrazy jako „HTTP“ a "HTTPS" (zabezpečená verze HTTP) ve spojení.

Příklad funkce pro prevenci XSS pomocí PHP

Viděli jste několik příkladů, jak chránit aplikaci nebo web před útoky XSS. Fragmenty kódu v této tabulce můžete použít s PHP:

Kódovat v HTML

htmlspecialchars($str, ENT_COMPAT)

Kódování v JavaScriptu a atributu DOM

htmlspecialchars($str, ENT_NOQUOTES)

Kontrola URL

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

Všimněte si, že toto jsou pouze příklady a budou se lišit v závislosti na jazyce softwaru, který používáte.

Můžeš vytvořit webovou aplikaci s PHP a zkuste je odeslat pomocí kódů, které vidíte výše. Pokud vás zajímá, jak používat všechny tyto metody, můžete získat nějaké nápady z bloku kódu PHP níže, který by měl být užitečný, i když používáte jiný jazyk:

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

funkcev_atributu($str){
vrátit se htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT zakóduje znak dvojité uvozovky (").
}

funkcein_html($str){
$odkaz = '/^(((https?)|(\/\/))).*/';
-li(!preg_match($link, $str))
{
vrátit se "/";
}
vrátit se $str;
}

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

Chraňte svůj web před XSS a dalšími

XSS je populární útočný vektor používaný hackery. K testování zranitelnosti XSS lze obvykle použít hodnotu cesty v adrese URL, libovolné pole na vašem webu, do kterého lze zadávat data (například pole formulářů a komentářů). Ale samozřejmě existuje mnoho různých metod, které mohou kyberzločinci použít k útoku na stránky, zvláště pokud máte web, který má mnoho uživatelů a skrývá jejich informace.