Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A Cross-Site Scripting, széles körben XSS néven ismert, az egyik legveszélyesebb támadási módszer kiberbűnözők, ezért létfontosságú, hogy minden fejlesztő és biztonsági kutató tudja, mi az, és hogyan megakadályozza a támadásokat. Tehát hogyan léphet fel az XSS sebezhetősége ellen? HTML-t, JavaScriptet vagy DOM-ot használ a webhely által a felhasználótól kapott adatok megjelenítésére. A három különböző terület közül egy vagy több együtt is működhet.

Hogyan lehet megakadályozni az XSS-t HTML használatával

Az XSS lehetővé teszi a támadók számára rosszindulatú kódok beszúrását vagy szkripteket weboldalakra, célozva a webhelyet felkereső, gyanútlan felhasználókat. Ez személyes adatokat lophat el, a látogatókat a kiberbűnözők által létrehozott másik webhelyre irányíthatja át, vagy más módon megváltoztathatja a weboldal megjelenését. De megakadályozhatja, hogy ez megtörténjen; például a HTML beszúrásának leállításával.

instagram viewer

Képzeld el, hogy van egy weboldalad egy vendégkönyvvel. Tegyük fel, hogy a vendégkönyvet használó látogatói ide írhatják nevüket és üzeneteiket, és üzeneteik nyilvánosan megtekinthetők. Az a támadó, aki XSS-tesztet szeretne végezni a vendégkönyvében, az Ön által kijelölt területet fogja használni az üzenet megírására. Ez a kiberbűnöző JavaScript kódot fog futtatni itt. Például egy támadó használhat JavaScript kódot, például:

<forgatókönyv>éber("Az XSS!")</script>

A támadónak script címkét kell használnia ahhoz, hogy ez sikeres legyen. Ha nem, a JavaScript kód nem fog működni. Kódolnia kell a < utasítást, hogy a felhasználók soha ne használjanak HTML-címkéket. Ez megnehezíti a támadó számára a HTML-címkékkel való munkát.

Hogyan lehet megakadályozni az XSS-t JavaScript használatával

A HTML logikája is az JavaScriptben érvényes. Egyes alkalmazásokban lehetőség van arra, hogy a weboldal által a felhasználótól kapott adatokat JavaScript kóddal kinyomtassák.

Fontolja meg ezt a kódolást:

<p id="nyomtatás"></p>
<forgatókönyv>
document.getElementById("teszt").innerHTML = "";
</script>

Képzelje el, hogy egy webhely a fentihez hasonló kódblokkot használ. A fejlesztő itt egy "print" nevű "p" címkét használt. Amint a kódból látható, a "search" paraméterből származik egy érték, és a fejlesztő ezt a bejövő értéket szeretné megjeleníteni a "p" címkében. A műveletet végrehajtó fejlesztő a JavaScript belső HTML funkcióját akarta használni.

Most nézzük meg a helyzetet a kibertámadás szemszögéből. Ilyen esetben a támadó XSS-tesztet hajt végre a "script" címkén belül. Ehhez a támadónak nem kell újraindítania a címkét, mert egy "script" címke már használatban van. A támadó ezután egy ilyen tesztet írhat:

fájlnév.php? keresés=a" éber("Az XSS!"); f= "

Ez a kód így fog megjelenni a weboldalon:

document.getElementById("teszt").innerHTML = " a" éber("Az XSS!"); f="";

Ez a támadás sikeres lenne. A probléma jobb megértése érdekében vizsgáljunk meg még egy példa technikát, amelyet a támadó használhat. Lehetséges, hogy a hacker XSS-tesztet alkalmazott, például:

fájlnév.php? keresés=";</script><em>Fatih</em>

Így nézne ki a weboldalról nézve:

document.getElementById("teszt").innerHTML = "";</script><em>Fatih</em>";

Ez kissé furcsának tűnhet, mert a támadó bezárta az első "script" címkét a "/script"-hez hasonló szerkezet használatával. Így a támadó bármilyen JavaScript- és HTML-kódot újraindíthat.

Ha erre a két különböző példára gondol, az XSS elleni védelem meglehetősen egyszerűnek tűnik. A szükséges óvintézkedés az lenne, hogy kódoljuk a " és ' az első példában látható karakterek. A második példában kódolja a karaktereket < és >.

Hogyan lehet megakadályozni az XSS-t DOM használatával

Az XSS ezen változatában a webhely által a felhasználótól kapott adatok zavarhatják a DOM-elemek tulajdonságait. Például az a színinformáció, amelyet a webhely a felhasználótól kap, befolyásolhatja egy táblázat háttérszínét vagy az oldal teljes hátterét. Így a felhasználó akaratlanul is beleavatkozik a test és az asztal stíluselrendezésébe. A következő kód jó példa erre:

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

Ezzel a weboldal közvetlenül a felhasználótól kapott "color" paramétert használja a "body" elem "bgcolor" tulajdonságában. Mit tehet tehát egy támadó ilyenkor? Ezt a rosszindulatú kódot futtathatják:

fájlnév.php? szín=piros" onload="éber('Az XSS!')

A weboldalról nézve így néz ki:

<body bgcolor=" piros" onload="éber('Az XSS!') "/>

Ennek elkerülése érdekében a fejlesztőnek kódolnia kell a " karakter.

A JavaScriptben azonban még egy fontos elemet meg kell jegyeznünk. A következő kódrészlet egy példa erre:

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

Ez azt jelenti, hogy néhány JavaScript-kód közvetlenül is futtatható. Az egyik legjobb megelőző intézkedés annak biztosítása, hogy a webhely ellenőrzi, hogy a felhasználóktól kapott adatok valódi URL-ek-e. A legegyszerűbb módszer, ha megbizonyosodik arról, hogy vannak olyan kifejezések, mint a "HTTP" és "HTTPS" (a HTTP biztonságos verziója) kapcsolatban.

Példafüggvény az XSS megakadályozására PHP-vel

Látott már néhány példát arra, hogyan védhet meg egy alkalmazást vagy webhelyet az XSS-támadásokkal szemben. A táblázat kódrészleteit használhatja PHP-vel:

Kódolás HTML-be

htmlspecialchars($str, ENT_COMPAT)

Kódolás JavaScriptben és DOM attribútumban

htmlspecialchars($str, ENT_NOQUOTES)

URL ellenőrzése

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

Vegye figyelembe, hogy ezek csak példák, és a használt szoftvernyelvtől függően változhatnak.

tudsz webalkalmazás létrehozása PHP-vel és próbálja ki a fent látható kódokat, hogy kiírja őket. Ha kíváncsi ezeknek a módszereknek a használatára, ötleteket meríthet az alábbi PHP kódblokkból, amely akkor is hasznos lehet, ha más nyelvet használ:

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

funkcióin_attribute($str){
Visszatérés htmlspecialchars($str, ENT_COMPAT);
// Az ENT_COMPAT az idézőjel (") karaktert kódolja.
}

funkcióin_html($str){
$link = '/^(((https?)|(\/\/))).*/';
ha(!preg_match($link, $str))
{
Visszatérés "/";
}
Visszatérés $str;
}

$adat = in_attribute($adat);
$adat = in_html($adat);
$adat = valós_url (adat);
?>

Védje webhelyét az XSS-től és egyebektől

Az XSS egy népszerű támadási vektor, amelyet a hackerek használnak. Általában az URL-ben található elérési út, a webhely bármely olyan mezője, amelybe adatokat lehet bevinni (például űrlapok és megjegyzésmezők), használható az XSS-sebezhetőség tesztelésére. De természetesen a kiberbűnözők számos különféle módszert használhatnak egy webhely megtámadására, különösen akkor, ha olyan webhelye van, amely sok felhasználóval rendelkezik, és elrejti az információikat.