Saididevaheline skriptimine, laialt tuntud kui XSS, on üks ohtlikumaid ründemeetodeid, mida kasutatakse küberkurjategijad, seega on ülioluline, et iga arendaja ja turvauurija teaks, mis see on ja kuidas ennetada rünnakuid. Niisiis, kuidas saate XSS-i haavatavuse vastu meetmeid võtta? Kasutate HTML-i, JavaScripti või DOM-i, et näidata andmeid, mida veebisait kasutajalt saab. Üks või mitu neist kolmest erinevast valdkonnast võivad koos töötada.
Kuidas vältida XSS-i HTML-i kasutamist
XSS võimaldab ründajatel sisestada pahatahtlikke koode või veebilehtedele skriptid, mis sihivad saiti külastavaid pahaaimamatuid kasutajaid. See võib varastada isikuandmeid, suunata külastajaid teisele küberkurjategija loodud saidile või muul viisil rikkuda veebilehe välimust. Kuid te saate seda vältida; näiteks peatades neil HTML-i sisestamise.
Kujutage ette, et teil on veebisait külalisteraamatuga. Oletame, et seda külalisteraamatut kasutavad külastajad saavad siia kirjutada oma nimed ja sõnumid ning nende sõnumeid saab avalikult vaadata. Ründaja, kes soovib teie külalisteraamatus XSS-testi teha, kasutab teie eraldatud ala sõnumi kirjutamiseks. See küberkurjategija käivitab siin JavaScripti koodi. Näiteks võib ründaja kasutada JavaScripti koodi, näiteks:
<stsenaarium>hoiatus ("XSS!")</script>
Selle õnnestumiseks peab ründaja kasutama skriptimärgendit. Kui nad seda ei tee, siis JavaScripti kood ei tööta. Peate kodeerima lause
Kuidas vältida XSS-i JavaScripti abil
HTML-i loogika on samuti kehtib JavaScriptis. Mõnes rakenduses on võimalik veebilehele kasutajalt saadud andmed välja printida JavaScripti koodiga.
Mõelge sellele kodeerimisele:
<p id="printida"></lk>
<stsenaarium>
document.getElementById("test").innerHTML = "";
</script>
Kujutage ette, et veebisait kasutab ülaltoodud koodiplokki. Arendaja kasutas siin märgendit "p" nimega "print". Nagu koodist näha, tuleb väärtus "otsingu" parameetrist ja arendaja soovib seda sissetulevat väärtust kuvada sildil "p". Selle toimingu teinud arendaja soovis kasutada JavaScripti sisemist HTML-i funktsiooni.
Vaatame nüüd olukorda küberründaja vaatevinklist. Sellisel juhul viib ründaja läbi XSS-testi märgendi "script" raames. Selleks ei pea ründaja märgendit taaskäivitama, kuna juba kasutusel on "skripti" silt. Seejärel võib ründaja kirjutada sellise testi:
failinimi.php? otsing=a" hoiatus ("XSS!"); f= "
See kood kuvatakse veebisaidil järgmiselt:
document.getElementById("test").innerHTML = " a" hoiatus ("XSS!"); f="";
See rünnak oleks edukas. Probleemi paremaks mõistmiseks uurime veel ühte näidet, mida ründaja võiks kasutada. Häkker võis rakendada XSS-i testi, näiteks:
failinimi.php? otsing=";</script><em>Fatih</em>
Veebisaidilt vaadates näeks see välja järgmine:
document.getElementById("test").innerHTML = "";</script><em>Fatih</em>";
See võib tunduda veidi kummaline, sest ründaja on sulgenud esimese "skripti" sildi, kasutades siin sellist struktuuri nagu "/script". Ja seega saab ründaja taaskäivitada mis tahes soovitud JavaScripti ja HTML-koodi.
Kui mõelda nendele kahele erinevale näitele, tundub XSS-i eest kaitsmine üsna lihtne. Vajalik ettevaatusabinõu oleks koodi kodeerimine " ja ' tähemärki, mida näete esimeses näites. Teises näites kodeerige märgid < ja >.
Kuidas vältida XSS-i DOM-i abil
Selles XSS-i variandis võivad veebisaidilt kasutajalt saadavad andmed häirida DOM-i elemendi omadusi. Näiteks värviteave, mille sait kasutajalt saab, võib mõjutada tabeli taustavärvi või kogu lehe tausta. Seega sekkub kasutaja tahtmatult korpuse ja laua stiilipaigutustesse. Selle hea näide on järgmine kood:
<keha bgcolor="<?php echo $_GET['värvi']; ?>"/>
Sellega kasutab veebisait kasutajalt saadud parameetrit "color" otse elemendi "body" atribuudis "bgcolor". Mida saab ründaja sel hetkel teha? Nad võivad käivitada selle pahatahtliku koodi:
failinimi.php? värv = punane" laadimine ="hoiatus ('XSS!')
See näeb veebisaidilt vaadates välja järgmine:
<keha bgcolor=" punane" laadimine ="hoiatus ('XSS!') "/>
Selle vältimiseks peaks arendaja kodeerima " iseloomu.
Siiski on JavaScriptis veel üks oluline element, mida tuleb märkida. Selle näiteks on järgmine koodilõik:
<a href="javascript: alert('XSS!')">
See tähendab, et mõnda JavaScripti koodi on võimalik otse käitada. Üks parimaid ennetavaid meetmeid on tagada, et veebisait kontrollib, kas kasutajatelt saadavad andmed on tõelised URL-id. Lihtsaim meetod on veenduda, et on olemas sellised väljendid nagu "HTTP" ja "HTTPS" (HTTP turvaline versioon) ühenduses.
Näidisfunktsioon XSS-i vältimiseks PHP-ga
Olete näinud mõnda näidet selle kohta, kuidas kaitsta rakendust või veebisaiti XSS-i rünnakute eest. Selles tabelis olevaid koodilõike saate kasutada PHP-ga:
Kodeerige HTML-is |
htmlspecialchars ($str, ENT_COMPAT) |
Kodeerimine JavaScriptis ja DOM-i atribuudis |
htmlspecialchars ($str, ENT_NOQUOTES) |
URL-i kontrollimine |
'/^(((https?)|(\/\/))).*/'; |
Pange tähele, et need on vaid näited ja sõltuvad kasutatavast tarkvara keelest.
Sa saad luua veebirakendus PHP-ga ja proovige ülaltoodud koode, et need välja saata. Kui soovite teada, kuidas kõiki neid meetodeid kasutada, võite saada ideid allolevast PHP koodiplokist, mis peaks olema kasulik isegi siis, kui kasutate teist keelt:
<?php
$andmed = $_GET['andmed'];funktsiooniin_attribute($str){
tagasi htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT kodeerib topeltjutumärgi (").
}
funktsiooniin_html($str){
$link = '/^(((https?)|(\/\/))).*/';
kui(!preg_match($link, $str))
{
tagasi "/";
}
tagasi $str;
}
$andmed = in_attribute($andmed);
$andmed = in_html($andmed);
$andmed = tegelik_url (andmed);
?>
Kaitske oma veebisaiti XSS-i ja muu eest
XSS on populaarne ründevektor, mida häkkerid kasutavad. Tavaliselt saab XSS-i haavatavuse testimiseks kasutada tee väärtust URL-is, mis tahes teie veebisaidi väljal, kuhu saab andmeid sisestada (nt vormid ja kommentaariväljad). Kuid loomulikult on küberkurjategijatel võimalik saidi ründamiseks kasutada palju erinevaid meetodeid, eriti kui teil on veebisait, millel on palju kasutajaid ja mis peidab nende teavet.