Zaščita pred ranljivostmi

Vsake toliko časa poročajo o varnostni luknji na še enem pomembnem spletnem mestu ali pa je luknja izkoriščena. To je neprijetno. Če vam je mar za varnost vaših spletnih aplikacij, je Nette Framework zagotovo najboljša izbira.

Cross-Site Scripting (XSS)

Cross-Site Scripting je metoda vdora v spletne strani z izkoriščanjem neobdelanih izpisov. Napadalec lahko nato v stran vstavi svojo lastno kodo in s tem lahko stran spremeni ali celo pridobi občutljive podatke o obiskovalcih. Proti XSS se je mogoče braniti le z doslednim in pravilnim obdelovanjem vseh nizov. Pri tem zadostuje, da vaš koder samo enkrat to opusti, in celotno spletno mesto je lahko takoj ogroženo.

Primer napada je lahko podtikanje spremenjenega URL-ja uporabniku, s katerim v stran vbrizgamo svojo kodo. Če aplikacija ne bo pravilno obdelovala izpisov, bo skript izvedla v brskalniku uporabnika. Na ta način mu lahko na primer ukrademo identiteto.

https://example.com/?search=<script>alert('Uspešen XSS napad.');</script>

Nette Framework prihaja z revolucionarno tehnologijo Context-Aware Escaping, ki vas za vedno reši tveganja Cross-Site Scriptinga. Vse izpise namreč obdeluje samodejno in tako se ne more zgoditi, da bi koder na kaj pozabil. Primer? Koder ustvari to predlogo:

<p onclick="alert({$message})">{$message}</p>

<script>
document.title = {$message};
</script>

Zapis {$message} pomeni izpis spremenljivke. V drugih ogrodjih je treba vsak izpis izrecno obdelati in celo na vsakem mestu drugače. V Nette Framework ni treba obdelovati ničesar, vse se naredi samodejno, pravilno in dosledno. Če v spremenljivko vstavimo $message = 'Širina 1/2"', ogrodje generira HTML kodo:

<p onclick="alert(&quot;Širina 1\/2\&quot;&quot;)">Širina 1/2&quot;</p>

<script>
document.title = "Širina 1\/2\"";
</script>

Cross-Site Request Forgery (CSRF)

Napad Cross-Site Request Forgery temelji na tem, da napadalec žrtev zvabi na stran, ki neopazno v brskalniku žrtve izvede zahtevek na strežnik, na katerem je žrtev prijavljena, in strežnik domneva, da je zahtevek izvedla žrtev po lastni volji. Tako pod identiteto žrtve izvede določeno dejanje, ne da bi ta za to vedela. Lahko gre za spremembo ali brisanje podatkov, pošiljanje sporočila itd.

Nette Framework samodejno ščiti obrazce in signale v presenterjih pred to vrsto napada. In sicer tako, da preprečuje njihovo pošiljanje ali klicanje iz druge domene. Če želite zaščito izklopiti, uporabite pri obrazcih:

$form->allowCrossOrigin();

ali v primeru signala dodajte anotacijo @crossOrigin:

/**
 * @crossOrigin
 */
public function handleXyz()
{
}

V Nette Application 3.2 lahko uporabite tudi atribute:

use Nette\Application\Attributes\Requires;

#[Requires(sameOrigin: false)]
public function handleXyz()
{
}

URL napad, kontrolne kode, neveljaven UTF-8

Različni pojmi, povezani s poskusom napadalca, da vaši spletni aplikaciji podtakne škodljiv vnos. Posledice so lahko zelo raznolike, od poškodovanja XML izpisov (npr. nedelujoči RSS viri) do pridobivanja občutljivih informacij iz baze podatkov ali gesel. Obramba je dosledno obdelovanje vseh vnosov na ravni posameznih bajtov. In roko na srce, kdo od vas to počne?

Nette Framework to počne za vas in poleg tega samodejno. Ni vam treba nastaviti ničesar in vsi vnosi bodo obdelani.

Ugrabitev seje, kraja seje, fiksacija seje

Z upravljanjem sej je povezanih več vrst napadov. Napadalec bodisi ukrade ali uporabniku podtakne svoj ID seje in s tem pridobi dostop do spletne aplikacije, ne da bi poznal geslo uporabnika. Nato lahko v aplikaciji počne karkoli, ne da bi uporabnik za to vedel. Obramba temelji na pravilni konfiguraciji strežnika in PHP.

Pri čemer Nette Framework konfigurira PHP samodejno. Programerju tako ni treba razmišljati, kako pravilno zavarovati sejo, in se lahko popolnoma osredotoči na ustvarjanje aplikacije. Vendar to zahteva omogočeno funkcijo ini_set().

SameSite piškotki zagotavljajo mehanizem za prepoznavanje, kaj je vodilo do nalaganja strani. Kar je absolutno ključno zaradi varnosti.

Zastavica SameSite lahko ima tri vrednosti: Lax, Strict in None (ta zahteva HTTPS). Če zahtevek za stran prihaja neposredno s spletnega mesta ali uporabnik odpre stran z neposrednim vnosom v naslovno vrstico ali s klikom na zaznamek, brskalnik strežniku pošlje vse piškotke (torej z zastavicami Lax, Strict in None). Če se uporabnik na spletno mesto preklikne prek povezave z drugega spletnega mesta, se strežniku predajo piškotki z zastavicami Lax in None. Če zahtevek nastane na drug način, kot je pošiljanje POST obrazca z drugega spletnega mesta, nalaganje znotraj iframe, s pomočjo JavaScripta itd., se pošljejo samo piškotki z zastavico None.

Nette privzeto vse piškotke pošilja z zastavico Lax.

različica: 4.0