Cross-Site Scripting, plačiai žinomas kaip XSS, yra vienas pavojingiausių atakų metodų, naudojamų kibernetiniai nusikaltėliai, todėl labai svarbu, kad kiekvienas kūrėjas ir saugumo tyrinėtojas žinotų, kas tai yra ir kaip užkirsti kelią išpuoliams. Taigi, kaip galite imtis veiksmų prieš XSS pažeidžiamumą? Naudojate HTML, JavaScript arba DOM, kad parodytumėte duomenis, kuriuos svetainė gauna iš vartotojo. Viena ar daugiau iš šių trijų skirtingų sričių gali veikti kartu.
Kaip užkirsti kelią XSS naudojant HTML
XSS leidžia užpuolikams suleisti kenkėjiškus kodus arba scenarijus į tinklalapius, nukreipiančius į nieko neįtariančius naudotojus, kurie lankosi svetainėje. Taip galima pavogti asmens duomenis, nukreipti lankytojus į kitą kibernetinio nusikaltėlio sukurtą svetainę arba kitaip sugadinti tinklalapio išvaizdą. Bet jūs galite užkirsti tam kelią; pavyzdžiui, neleisdami jiems įterpti HTML.
Įsivaizduokite, kad turite svetainę su svečių knyga. Tarkime, kad jūsų lankytojai, naudojantys šią svečių knygą, gali čia įrašyti savo vardus ir žinutes, o jų pranešimus galima peržiūrėti viešai. Užpuolikas, norintis atlikti XSS testą jūsų svečių knygoje, naudos jūsų paskirtą sritį žinutei parašyti. Tas kibernetinis nusikaltėlis čia paleis „JavaScript“ kodą. Pavyzdžiui, užpuolikas gali naudoti JavaScript kodą, pvz.:
<scenarijus>budrus("XSS!")</script>
Kad tai būtų sėkminga, užpuolikas turi naudoti scenarijaus žymą. Jei to nepadarys, JavaScript kodas neveiks. Turite užkoduoti < teiginį, kad vartotojai niekada negalėtų naudoti HTML žymų. Dėl to užpuolikui bus sunku dirbti su HTML žymomis.
Kaip užkirsti kelią XSS naudojant „JavaScript“.
HTML logika taip pat yra galioja JavaScript. Kai kuriose programose galima atspausdinti duomenis, kuriuos svetainė gauna iš vartotojo su JavaScript kodu.
Apsvarstykite šį kodavimą:
<p id="spausdinti"></p>
<scenarijus>
document.getElementById("bandymas").innerHTML = "";
</script>
Įsivaizduokite, kad svetainėje naudojamas kodo blokas, kaip nurodyta aukščiau. Kūrėjas čia naudojo „p“ žymą, vadinamą „spausdinti“. Kaip matote iš kodo, vertė bus gauta iš parametro „search“, o kūrėjas nori parodyti šią gaunamą reikšmę „p“ žymoje. Šią operaciją atlikęs kūrėjas norėjo naudoti „JavaScript“ vidinę HTML funkciją.
Dabar pažvelkime į situaciją kibernetinio užpuoliko požiūriu. Tokiu atveju užpuolikas atliks XSS testą „skripto“ žymoje. Norėdami tai padaryti, užpuolikui nereikia iš naujo paleisti žymos, nes jau naudojama „skripto“ žyma. Tada užpuolikas galėtų parašyti tokį testą:
failo vardas.php? paieška=a" budrus("XSS!"); f= "
Šis kodas svetainėje bus rodomas taip:
document.getElementById("bandymas").innerHTML = " a" budrus("XSS!"); f="";
Toks puolimas būtų sėkmingas. Norėdami geriau suprasti problemą, panagrinėkime dar vieną technikos pavyzdį, kurį galėtų naudoti užpuolikas. Įsilaužėlis galėjo pritaikyti XSS testą, pavyzdžiui:
failo vardas.php? paieška =";</script><em>Fatih</em>
Štai kaip jis atrodytų žiūrint iš svetainės:
document.getElementById("bandymas").innerHTML = "";</script><em>Fatih</em>";
Tai gali atrodyti šiek tiek keista, nes užpuolikas uždarė pirmąją „skripto“ žymą naudodamas tokią struktūrą kaip „/script“. Taigi, užpuolikas gali iš naujo paleisti bet kurį norimą „JavaScript“ ir HTML kodą.
Jei galvojate apie šiuos du skirtingus pavyzdžius, apsisaugoti nuo XSS atrodo gana paprasta. Būtina atsargumo priemonė būtų užkoduoti " ir ' simboliai, kuriuos matote pirmame pavyzdyje. Antrame pavyzdyje užkoduokite simbolius < ir >.
Kaip užkirsti kelią XSS naudojant DOM
Šiame XSS variante duomenys, kuriuos svetainė gauna iš vartotojo, gali trukdyti DOM elemento nuosavybei. Pavyzdžiui, spalvų informacija, kurią svetainė gauna iš vartotojo, gali turėti įtakos lentelės fono spalvai arba visam puslapio fonui. Taigi vartotojas nesąmoningai kišasi į korpuso ir stalo išdėstymą. Šis kodas yra geras to pavyzdys:
<body bgcolor="<?php echo $_GET['spalva']; ?>"/>
Tokiu būdu svetainė naudoja iš vartotojo gautą parametrą "spalva" tiesiogiai elemento "body" ypatybėje "bgcolor". Taigi ką šiuo metu galėtų padaryti užpuolikas? Jie gali paleisti šį kenkėjišką kodą:
failo vardas.php? spalva = raudona" įkelti ="budrus('XSS!')
Taip atrodo žiūrint iš svetainės:
<body bgcolor=" raudona" įkelti ="budrus('XSS!') "/>
Kad taip nenutiktų, kūrėjas turėtų užkoduoti " charakteris.
Tačiau reikia atkreipti dėmesį į dar vieną svarbų „JavaScript“ elementą. Šis kodo fragmentas yra pavyzdys:
<a href="javascript: alert('XSS!')">
Tai reiškia, kad tam tikrą „JavaScript“ kodą galima paleisti tiesiogiai. Viena geriausių prevencinių priemonių yra užtikrinti, kad svetainė patikrintų, ar iš vartotojų gauti duomenys yra tikras URL. Paprasčiausias būdas yra įsitikinti, kad yra tokių posakių kaip „HTTP“ ir „HTTPS“ (saugi HTTP versija) ryšyje.
Pavyzdys, kaip užkirsti kelią XSS naudojant PHP
Matėte keletą pavyzdžių, kaip apsaugoti programą ar svetainę nuo XSS atakų. Šioje lentelėje pateiktus kodo fragmentus galite naudoti su PHP:
Užkoduoti HTML |
htmlspecialieji simboliai ($str, ENT_COMPAT) |
Koduoti JavaScript ir DOM atributu |
htmlspecialieji simboliai ($str, ENT_NOQUOTES) |
URL tikrinimas |
'/^(((https?)|(\/\/))).*/'; |
Atminkite, kad tai tik pavyzdžiai ir gali skirtis priklausomai nuo jūsų naudojamos programinės įrangos kalbos.
Tu gali sukurti žiniatinklio programą su PHP ir išbandykite kodus, kuriuos matote anksčiau, kad išsiųstumėte juos žinute. Jei jums įdomu, kaip naudoti visus šiuos metodus, galite pasisemti idėjų iš toliau pateikto PHP kodo bloko, kuris turėtų būti naudingas, net jei naudojate kitą kalbą:
<?php
$duomenys = $_GET['duomenys'];funkcijain_atributas($str){
grąžinti htmlspecialieji simboliai($str, ENT_COMPAT);
// ENT_COMPAT užkoduos dvigubą kabutę (").
}
funkcijain_html($str){
$nuoroda = '/^(((https?)|(\/\/))).*/';
jeigu(!preg_match($link, $str))
{
grąžinti "/";
}
grąžinti $str;
}
$duomenys = in_atributas($duomenys);
$duomenys = in_html($duomenys);
$duomenys = real_url (duomenys);
?>
Apsaugokite savo svetainę nuo XSS ir kt
XSS yra populiarus įsilaužėlių naudojamas atakos vektorius. Paprastai kelio reikšmė URL, bet kuris jūsų svetainės laukas, kuriame galima įvesti duomenis (pvz., formos ir komentarų laukai), gali būti naudojama norint patikrinti, ar nėra XSS pažeidžiamumo. Tačiau, žinoma, yra daug įvairių metodų, kuriuos kibernetiniai nusikaltėliai gali naudoti norėdami užpulti svetainę, ypač jei turite svetainę, kurioje yra daug vartotojų ir kurioje slepiama jų informacija.