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.
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.