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("Width 1\/2\"")">Width 1/2"</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.
SameSite cookie
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.