Sebezhetőségi védelem

Időről időre bejelentésre kerül egy-egy nagyobb biztonsági hiba, vagy akár visszaélnek vele. Az biztos, hogy ez egy kicsit kellemetlen. Ha fontos Önnek a webes alkalmazásai biztonsága, akkor a Nette Framework őszintén szólva a legjobb választás az Ön számára.

Cross-Site Scripting (XSS)

A Cross-Site Scripting egy olyan webhely-megszakítási módszer, amely nem kimentett bemenetet használ. A támadó saját HTML- vagy JavaScript-kódot juttathat be, és megváltoztathatja az oldal kinézetét, vagy akár érzékeny információkat is gyűjthet a felhasználókról. Az XSS elleni védelem egyszerű: az összes karakterlánc és bemenet következetes és helyes escapingje. Hagyományosan elég lenne, ha a kódolója csak egy apró hibát vét, és egyszer elfelejti, és máris veszélybe kerülhet az egész weboldal.

Ilyen injektálásra példa lehet, ha a felhasználónak egy módosított URL-t csúsztatunk, amely egy “rosszindulatú” szkriptet illeszt be. Ha egy alkalmazás nem megfelelően menekíti a bemeneteket, egy ilyen kérés esetleg egy szkriptet hajtana végre a kliens oldalán. Ez például lopott személyazonossághoz vezethet.

https://example.com/?search=<script>alert('XSS attack.');</script>

A Nette Framework egy vadonatúj technológiával, a Context-Aware Escapinggel állt elő, amely örökre megszabadítja Önt a Cross-Site Scripting kockázatoktól. Az összes bemenetet automatikusan, az adott kontextus alapján eszkábálja, így lehetetlen, hogy egy programozó véletlenül elfelejtsen valamit. Vegyük példaként a következő sablont:

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

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

A {$message} parancs kiír egy változót. Más keretrendszerek gyakran kényszerítik a fejlesztőket arra, hogy explicit módon deklarálják az escapinget, és még azt is, hogy milyen típusú escapinget alkalmazzanak a kontextus alapján. A Nette Frameworkben azonban nem kell deklarálni semmit. Minden automatikus, következetes és éppen megfelelő. Ha a változót a $message = 'Width 1/2"' értékre állítjuk, a keretrendszer ezt a HTML-kódot fogja generálni:

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

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

Cross-Site Request Forgery (CSRF)

A Cross-Site Request Forgery támadás lényege, hogy a támadó egy olyan oldal meglátogatására csábítja az áldozatot, amely némán végrehajt egy kérést az áldozat böngészőjében a szerver felé, ahová az áldozat éppen be van jelentkezve, és a szerver azt hiszi, hogy a kérést az áldozat akaratából tette. A szerver az áldozat személyazonossága alatt, de az áldozat tudta nélkül hajt végre egy bizonyos műveletet. Ez lehet adatok módosítása vagy törlése, üzenet küldése stb.

A Nette Framework automatikusan védi a prezenterekben lévő űrlapokat és jeleket az ilyen típusú támadásoktól. Ez úgy történik, hogy megakadályozza, hogy egy másik tartományból küldjék vagy hívják őket. A védelem kikapcsolásához használja a következőket az űrlapok esetében:

$form->allowCrossOrigin();

vagy egy jel esetében adjon hozzá egy megjegyzést @crossOrigin:

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

A PHP 8-ban attribútumokat is használhat:

use Nette\Application\Attributes\CrossOrigin;

#[CrossOrigin]
public function handleXyz()
{
}

URL-támadás, Vezérlő kódok, Érvénytelen UTF-8

Különböző kifejezések, amelyek mind a támadó azon törekvésével kapcsolatosak, hogy “rosszindulatú” bemenetet adjon az alkalmazásodnak. Az eredmények nagyon különbözőek lehetnek, a hibás XML kimenettől (pl. rosszul működő RSS stream) az érzékeny információk megszerzésén át egy adatbázisból a felhasználói jelszavak megszerzéséig. Az ilyen támadások elleni védelem a következetes UTF-8 ellenőrzés bájtszinten. És őszintén szólva, ezt nem tenné meg egy keretrendszer nélkül, igaz?

A Nette Framework ezt automatikusan elvégzi Ön helyett. Egyáltalán nem kell semmit sem konfigurálnod, és az alkalmazásod biztonságban lesz.

Munkamenet eltérítés, munkamenet lopás, munkamenet rögzítés

A munkamenet-kezelés néhány támadástípust foglal magában. A támadó ellophatja az áldozat munkamenet-azonosítóját, vagy meghamisíthatja azt, és így a tényleges jelszó nélkül férhet hozzá egy webes alkalmazáshoz. Ezután a támadó nyom nélkül bármit megtehet, amit a felhasználó megtehet. A védelem mind a PHP, mind magának a webkiszolgálónak a megfelelő konfigurálásában rejlik.

A Nette Framework automatikusan konfigurálja a PHP-t. A fejlesztőknek így nem kell azon aggódniuk, hogy hogyan tegyék eléggé védetté a munkamenetet, és teljes mértékben az alkalmazás kulcsfontosságú részeire koncentrálhatnak. Ehhez a ini_set() funkciót kell engedélyezni.

A SameSite sütik egy olyan mechanizmust biztosítanak, amely felismeri, hogy mi vezetett az oldal betöltéséhez. Ami biztonsági okokból elengedhetetlenül fontos.

A SameSite jelzőnek három értéke lehet: Lax, Strict és None (HTTPS-t igényel). Ha egy oldalra irányuló kérés közvetlenül magától a webről érkezik, vagy a felhasználó úgy nyitja meg az oldalt, hogy közvetlenül beírja a címsorba vagy egy könyvjelzőre kattint, a böngésző az összes sütit elküldi a szervernek (azaz a Lax, Strict és None jelekkel). Ha a felhasználó egy másik weboldalról érkező linkre kattintva jut el a weboldalra, akkor a Lax és None jelzővel ellátott cookie-kat továbbítja a szervernek. Ha a kérés egy másik módon, például egy másik eredetű POST űrlap küldésével, iframe-en belüli betöltéssel, JavaScript használatával stb., csak a None jelű cookie-kat küldi el a rendszer.

Alapértelmezés szerint a Nette minden cookie-t a Lax jelzővel küld el.

verzió: 4.0