Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Skriptiranje med spletnimi mesti, splošno znano kot XSS, je ena najnevarnejših metod napada, ki jih uporablja kibernetskih kriminalcev, zato je ključnega pomena, da vsak razvijalec in raziskovalec varnosti ve, kaj je to in kako preprečiti napade. Kako lahko torej ukrepate proti ranljivosti XSS? Za prikaz podatkov, ki jih spletno mesto prejme od uporabnika, uporabljate HTML, JavaScript ali DOM. Eno ali več od teh treh različnih področij lahko deluje skupaj.

Kako preprečiti XSS z uporabo HTML

XSS omogoča napadalcem, da vbrizgajo zlonamerne kode ali skripte v spletne strani, ki ciljajo na nič hudega sluteče uporabnike, ki obiščejo spletno mesto. S tem bi lahko ukradli osebne podatke, preusmerili obiskovalce na drugo spletno mesto, ki ga je nastavil kibernetski kriminalec, ali kako drugače posegli v videz spletne strani. Vendar lahko preprečite, da bi se to zgodilo; na primer tako, da jim preprečite vstavljanje HTML-ja.

Predstavljajte si, da imate spletno mesto s knjigo gostov. Recimo, da lahko vaši obiskovalci, ki uporabljajo to knjigo gostov, tukaj vpišejo svoja imena in sporočila, njihova sporočila pa si lahko javno ogledajo. Napadalec, ki želi narediti test XSS v vaši knjigi gostov, bo uporabil območje, ki ste ga dodelili za pisanje sporočila. Kibernetski kriminalec bo tukaj zagnal kodo JavaScript. Napadalec bi lahko na primer uporabil kodo JavaScript, kot je:

<scenarij>opozorilo("XSS!")</script>

Napadalec mora uporabiti oznako skripta, da bo to uspešno. Če tega ne storijo, koda JavaScript ne bo delovala. Stavek < morate kodirati tako, da uporabniki nikoli ne bodo mogli uporabiti oznak HTML. To bo napadalcu otežilo delo z oznakami HTML.

Kako preprečiti XSS z uporabo JavaScripta

Logika v HTML je tudi velja v JavaScriptu. V nekaterih aplikacijah je mogoče podatke, ki jih spletno mesto prejme od uporabnika, natisniti s kodo JavaScript.

Razmislite o tem kodiranju:

<p id="tiskanje"></str>
<scenarij>
document.getElementById("test").notranjiHTML = "";
</script>

Predstavljajte si, da spletno mesto uporablja blok kode, kot je zgornji. Razvijalec je tukaj uporabil oznako "p", imenovano "print". Kot lahko vidite iz kode, bo vrednost prišla iz parametra "iskanje" in razvijalec želi prikazati to dohodno vrednost v oznaki "p". Razvijalec, ki je izvedel to operacijo, je želel uporabiti funkcijo innerHTML JavaScripta.

Zdaj pa poglejmo situacijo z vidika kibernetskega napadalca. V takem primeru bo napadalec izvedel test XSS znotraj oznake "script". Za to napadalcu ni treba znova zagnati oznake, ker je oznaka "script", ki se že uporablja. Napadalec bi lahko nato napisal test, kot je ta:

imedatoteke.php? iskanje=a" opozorilo("XSS!"); f= "

Ta koda bo prikazana na spletnem mestu kot:

document.getElementById("test").notranjiHTML = " a" opozorilo("XSS!"); f="";

Ta napad bi bil uspešen. Da bi bolje razumeli težavo, preučimo še en primer tehnike, ki bi jo lahko uporabil napadalec. Heker je morda uporabil test XSS, kot je:

imedatoteke.php? iskanje=";</script><em>Fatih</em>

Tako bi izgledalo, če bi ga gledali s spletne strani:

document.getElementById("test").notranjiHTML = "";</script><em>Fatih</em>";

To se morda zdi nekoliko nenavadno, ker je napadalec zaprl prvo oznako "script" z uporabo strukture, kot je tukaj "/script". In tako lahko napadalec znova zažene katero koli kodo JavaScript in HTML, ki jo želi.

Če pomislite na ta dva različna primera, se zaščita pred XSS zdi precej preprosta. Potreben previdnostni ukrep bi bil kodiranje " in ' znakov, ki jih vidite v prvem primeru. V drugem primeru kodirajte znake < in >.

Kako preprečiti XSS z uporabo DOM

V tej različici XSS lahko podatki, ki jih spletno mesto prejme od uporabnika, motijo ​​lastnost elementa DOM. Na primer, informacije o barvi, ki jih spletno mesto prejme od uporabnika, lahko vplivajo na barvo ozadja tabele ali celotnega ozadja strani. Tako uporabnik nevede posega v stilske postavitve korpusa in mize. Naslednja koda je dober primer za to:

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

S tem spletno mesto uporablja parameter "color", ki ga prejme od uporabnika neposredno v lastnosti "bgcolor" elementa "body". Torej, kaj lahko stori napadalec na tej točki? Lahko bi izvedli to zlonamerno kodo:

imedatoteke.php? barva=rdeča" naloži="opozorilo('XSS!')

To izgleda takole, ko gledate s spletne strani:

<body bgcolor=" rdeča" naloži="opozorilo('XSS!') "/>

Da se to ne bi zgodilo, bi moral razvijalec kodirati " značaj.

Vendar je v JavaScriptu treba upoštevati še en pomemben element. Naslednji delček kode je primer za to:

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

To pomeni, da je mogoče nekaj kode JavaScript zagnati neposredno. Eden najboljših preventivnih ukrepov je zagotoviti, da spletno mesto preveri, ali so podatki, ki jih prejme od uporabnikov, pravi URL. Najenostavnejši način je zagotoviti, da obstajajo izrazi, kot sta "HTTP" in »HTTPS« (varna različica HTTP) v povezavi.

Primer funkcije za preprečevanje XSS s PHP

Videli ste nekaj primerov, kako zaščititi aplikacijo ali spletno mesto pred napadi XSS. Delčke kode v tej tabeli lahko uporabite s PHP:

Kodiraj v HTML

htmlspecialchars($str, ENT_COMPAT)

Kodiraj v JavaScript in atribut DOM

htmlspecialchars($str, ENT_NOQUOTES)

Preverjanje URL-ja

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

Upoštevajte, da so to le primeri in se razlikujejo glede na jezik programske opreme, ki ga uporabljate.

Ti lahko ustvarite spletno aplikacijo s PHP in poskusite kode, ki jih vidite zgoraj, da jih pošljete v SMS. Če se sprašujete, kako uporabiti vse te metode, lahko dobite nekaj idej iz spodnjega bloka kode PHP, kar bi moralo biti uporabno tudi, če uporabljate drug jezik:

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

funkcijoin_atribut($str){
vrnitev htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT bo kodiral znak dvojnega narekovaja (").
}

funkcijoin_html($str){
$link = '/^(((https?)|(\/\/))).*/';
če(!preg_match($link, $str))
{
vrnitev "/";
}
vrnitev $str;
}

$podatki = in_atribut($podatki);
$podatki = in_html($podatki);
$data = real_url (podatki);
?>

Zaščitite svoje spletno mesto pred XSS in še več

XSS je priljubljen vektor napadov, ki ga uporabljajo hekerji. Običajno se lahko vrednost poti v URL-ju, katerem koli polju na vašem spletnem mestu, kamor je mogoče vnesti podatke (kot so obrazci in polja za komentarje), uporabi za testiranje ranljivosti XSS. Seveda pa obstaja veliko različnih metod, ki jih lahko kibernetski kriminalci uporabijo za napad na spletno mesto, še posebej, če imate spletno mesto, ki ima veliko uporabnikov in skriva njihove podatke.