Cross-Site Scripting, joka tunnetaan yleisesti nimellä XSS, on yksi vaarallisimmista käyttämistä hyökkäysmenetelmistä kyberrikollisia, joten on tärkeää, että jokainen kehittäjä ja tietoturvatutkija tietää, mitä se on ja miten estää hyökkäykset. Joten miten voit ryhtyä toimiin XSS-haavoittuvuutta vastaan? Käytät HTML-, JavaScript- tai DOM-muotoa näyttääksesi tiedot, jotka verkkosivusto vastaanottaa käyttäjältä. Yksi tai useampi näistä kolmesta eri alueesta voi toimia yhdessä.
Kuinka estää XSS käyttämällä HTML: ää
XSS antaa hyökkääjille mahdollisuuden syöttää haitallisia koodeja tai komentosarjat verkkosivuille, jotka kohdistetaan pahaa-aavistamattomiin käyttäjiin, jotka vierailevat sivustolla. Tämä voi varastaa henkilötietoja, ohjata vierailijat toiselle verkkorikollisen perustamalle sivustolle tai muuten peukaloida verkkosivun ulkoasua. Mutta voit estää tämän tapahtuman; esimerkiksi estämällä niitä lisäämästä HTML-koodia.
Kuvittele, että sinulla on verkkosivusto, jossa on vieraskirja. Oletetaan, että vierailijasi, jotka käyttävät tätä vieraskirjaa, voivat kirjoittaa nimensä ja viestinsä tänne, ja heidän viestinsä ovat julkisesti katsottavissa. Hyökkääjä, joka haluaa tehdä XSS-testin vieraskirjaasi, käyttää varaamaasi aluetta viestin kirjoittamiseen. Tuo kyberrikollinen suorittaa JavaScript-koodin täällä. Hyökkääjä voi esimerkiksi käyttää JavaScript-koodia, kuten:
<käsikirjoitus>hälytys ("XSS!")</script>
Hyökkääjän on käytettävä komentosarjatunnistetta, jotta tämä onnistuu. Jos ne eivät toimi, JavaScript-koodi ei toimi. Sinun on koodattava
Kuinka estää XSS JavaScriptin avulla
Myös HTML: n logiikka on voimassa JavaScriptissä. Joissakin sovelluksissa on mahdollista tulostaa sivuston käyttäjältä saamat tiedot JavaScript-koodilla.
Harkitse tätä koodausta:
<p id="Tulosta"></s>
<käsikirjoitus>
document.getElementById("testata").innerHTML = "";
</script>
Kuvittele, että verkkosivusto käyttää yllä olevan kaltaista koodilohkoa. Kehittäjä käytti tässä "p"-tunnistetta nimeltä "print". Kuten koodista näkyy, arvo tulee "haku"-parametrista, ja kehittäjä haluaa näyttää tämän saapuvan arvon "p"-tunnisteessa. Tämän toiminnon tehnyt kehittäjä halusi käyttää JavaScriptin sisäistä HTML-ominaisuutta.
Katsotaan nyt tilannetta kyberhyökkääjän näkökulmasta. Tällaisessa tapauksessa hyökkääjä suorittaa XSS-testin "script"-tunnisteen sisällä. Tätä varten hyökkääjän ei tarvitse käynnistää tunnistetta uudelleen, koska "script"-tagi on jo käytössä. Hyökkääjä voisi sitten kirjoittaa seuraavanlaisen testin:
tiedostonimi.php? haku=a" hälytys ("XSS!"); f= "
Tämä koodi näkyy verkkosivustolla seuraavasti:
document.getElementById("testata").innerHTML = " a" hälytys ("XSS!"); f="";
Hyökkäys olisi onnistunut. Ymmärtääksemme ongelmaa paremmin, tarkastellaan vielä yhtä esimerkkitekniikkaa, jota hyökkääjä voisi käyttää. Hakkeri on saattanut tehdä XSS-testin, kuten:
tiedostonimi.php? haku =";</script><em>Fatih</em>
Tältä se näyttäisi verkkosivustolta katsottuna:
document.getElementById("testata").innerHTML = "";</script><em>Fatih</em>";
Tämä saattaa tuntua hieman oudolta, koska hyökkääjä on sulkenut ensimmäisen "script" -tunnisteen käyttämällä rakennetta, kuten "/script" tässä. Joten hyökkääjä voi käynnistää uudelleen minkä tahansa haluamansa JavaScript- ja HTML-koodin.
Jos ajattelet näitä kahta eri esimerkkiä, XSS: ltä suojaaminen näyttää melko yksinkertaiselta. Tarvittava varotoimenpide olisi koodata " ja ' merkit, jotka näet ensimmäisessä esimerkissä. Toisessa esimerkissä koodaa merkit < ja >.
Kuinka estää XSS DOM: n avulla
Tässä XSS-versiossa verkkosivuston käyttäjältä saamat tiedot voivat häiritä DOM-elementin ominaisuuksia. Esimerkiksi väritiedot, jotka sivusto saa käyttäjältä, voivat vaikuttaa taulukon taustaväriin tai koko sivun taustaan. Joten käyttäjä puuttuu tahattomasti rungon ja pöydän tyyliasetelmiin. Seuraava koodi on hyvä esimerkki tästä:
<body bgcolor="<?php echo $_GET['väri']; ?>"/>
Tämän avulla verkkosivusto käyttää käyttäjältä saatua "color"-parametria suoraan "body"-elementin "bgcolor"-ominaisuuteen. Joten mitä hyökkääjä voisi tehdä tässä vaiheessa? He voivat suorittaa tämän haitallisen koodin:
tiedostonimi.php? väri = punainen" lataus ="hälytys ('XSS!')
Tältä näyttää verkkosivulta katsottuna:
<body bgcolor=" punainen" lataus ="hälytys ('XSS!') "/>
Tämän estämiseksi kehittäjän on koodattava " merkki.
JavaScriptissä on kuitenkin vielä yksi tärkeä elementti, joka on huomioitava. Seuraava koodinpätkä on esimerkki tästä:
<a href="javascript: alert('XSS!')">
Tämä tarkoittaa, että on mahdollista suorittaa JavaScript-koodia suoraan. Yksi parhaista ennaltaehkäisevistä toimenpiteistä on varmistaa, että verkkosivusto tarkistaa, ovatko käyttäjiltä saamansa tiedot todellista URL-osoitetta. Yksinkertaisin tapa on varmistaa, että siinä on ilmaisuja, kuten "HTTP" ja "HTTPS" (HTTP: n suojattu versio) yhteydessä.
Esimerkkitoiminto XSS: n estämiseksi PHP: llä
Olet nähnyt esimerkkejä sovelluksen tai verkkosivuston suojaamisesta XSS-hyökkäyksiltä. Voit käyttää tämän taulukon koodinpätkiä PHP: n kanssa:
Koodaa HTML: llä |
htmlerikoismerkit($str, ENT_COMPAT) |
Koodaa JavaScriptillä ja DOM-attribuutilla |
htmlerikoismerkit($str, ENT_NOQUOTES) |
URL-osoitteen tarkistus |
'/^(((https?)|(\/\/))).*/'; |
Huomaa, että nämä ovat vain esimerkkejä ja vaihtelevat käyttämäsi ohjelmistokielen mukaan.
Sinä pystyt Luo web-sovellus PHP: llä ja kokeile yllä näkemiäsi koodeja lähettääksesi ne tekstiviestillä. Jos mietit, kuinka käyttää kaikkia näitä menetelmiä, voit saada ideoita alla olevasta PHP-koodilohkosta, jonka pitäisi olla hyödyllinen, vaikka käytät eri kieltä:
<?php
$tiedot = $_GET['data'];toimintoin_attribute($str){
palata htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT koodaa lainausmerkin (").
}
toimintoin_html($str){
$linkki = '/^(((https?)|(\/\/))).*/';
jos(!preg_match($link, $str))
{
palata "/";
}
palata $str;
}
$tiedot = in_attribuutti($data);
$tiedot = in_html($data);
$tiedot = todellinen_url (data);
?>
Suojaa verkkosivustosi XSS: ltä ja muilta
XSS on suosittu hyökkäysvektori, jota hakkerit käyttävät. Yleensä URL-osoitteessa olevaa polkuarvoa, mitä tahansa verkkosivustosi kenttää, johon tietoja voidaan syöttää (kuten lomakkeet ja kommenttikentät), voidaan käyttää XSS-haavoittuvuuden testaamiseen. Mutta tietysti on olemassa monia erilaisia menetelmiä, joilla kyberrikolliset voivat hyökätä sivustoon, varsinkin jos sinulla on verkkosivusto, jolla on paljon käyttäjiä ja joka piilottaa heidän tietonsa.