Védelem a sebezhetőségek ellen

Időről időre újabb jelentős webhelyen jelentenek be biztonsági rést, vagy kihasználják azt. Ez kellemetlen. Ha fontos Önnek webalkalmazásai biztonsága, a Nette Framework minden bizonnyal a legjobb választás.

Cross-Site Scripting (XSS)

A Cross-Site Scripting egy weboldal-megsértési módszer, amely a nem kezelt kimeneteket használja ki. A támadó ezután képes saját kódot beilleszteni az oldalba, és ezzel módosíthatja az oldalt, vagy akár érzékeny adatokat szerezhet a látogatókról. Az XSS ellen csak az összes karakterlánc következetes és korrekt kezelésével lehet védekezni. Eközben elég, ha a kódolója csak egyszer is elfelejti ezt, és az egész webhely máris kompromittálódhat.

A támadás példája lehet egy módosított URL becsempészése a felhasználóhoz, amellyel saját kódot injektálunk az oldalba. Ha az alkalmazás nem kezeli megfelelően a kimeneteket, végrehajtja a szkriptet a felhasználó böngészőjében. Ezzel a módszerrel például ellophatjuk az identitását.

https://example.com/?search=<script>alert('Sikeres XSS támadás.');</script>

A Nette Framework forradalmi Context-Aware Escaping technológiával rendelkezik, amely örökre megszabadítja Önt a Cross-Site Scripting kockázatától. Minden kimenetet automatikusan kezel, így nem fordulhat elő, hogy a kódoló valamit elfelejtene. Példa? A kódoló létrehozza ezt a sablont:

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

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

A {$message} jelölés a változó kiírását jelenti. Más keretrendszerekben minden kiírást explicit módon kell kezelni, sőt minden helyen másképp. A Nette Frameworkben semmit sem kell kezelni, minden automatikusan, helyesen és következetesen megtörténik. Ha a $message = 'Szélesség 1/2"' értéket helyettesítjük be a változóba, a keretrendszer a következő HTML kódot generálja:

<p onclick="alert(&quot;Szélesség 1\/2\&quot;&quot;)">Szélesség 1/2&quot;</p>

<script>
document.title = "Szélesség 1\/2\"";
</script>

Cross-Site Request Forgery (CSRF)

A Cross-Site Request Forgery támadás abból áll, hogy a támadó egy olyan oldalra csalogatja az áldozatot, amely észrevétlenül végrehajt egy kérést az áldozat böngészőjében egy olyan szerver felé, amelyen az áldozat be van jelentkezve, és a szerver azt hiszi, hogy a kérést az áldozat saját akaratából hajtotta végre. Így az áldozat identitása alatt végrehajt egy bizonyos műveletet anélkül, hogy az áldozat tudna róla. Ez lehet adatok módosítása vagy törlése, üzenet küldése stb.

A Nette Framework automatikusan védi az űrlapokat és a presenterekben lévő signálokat az ilyen típusú támadások ellen. Ezt úgy teszi, hogy megakadályozza azok elküldését vagy meghívását más domainről. Ha ki szeretné kapcsolni a védelmet, használja az űrlapoknál:

$form->allowCrossOrigin();

vagy a signál esetén adjon hozzá egy @crossOrigin annotációt:

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

A Nette Application 3.2-ben attribútumokat is használhat:

use Nette\Application\Attributes\Requires;

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

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

Különböző fogalmak, amelyek a támadó azon próbálkozásával kapcsolatosak, hogy káros bemenetet csempésszen a webalkalmazásába. A következmények nagyon változatosak lehetnek, az XML kimenetek sérülésétől (pl. nem működő RSS csatornák) az érzékeny adatok adatbázisból való megszerzéséig vagy jelszavakig. A védekezés az összes bemenet következetes kezelése az egyes bájtok szintjén. És őszintén szólva, ki csinálja ezt Önök közül?

A Nette Framework ezt megteszi Ön helyett, ráadásul automatikusan. Semmit sem kell beállítania, és minden bemenet kezelve lesz.

Session hijacking, session stealing, session fixation

A session kezelésével több támadástípus is összefügg. A támadó vagy ellopja, vagy becsempészi a felhasználóhoz a saját session ID-jét, és ennek köszönhetően hozzáférést szerez a webalkalmazáshoz anélkül, hogy ismerné a felhasználó jelszavát. Ezután bármit megtehet az alkalmazásban anélkül, hogy a felhasználó tudna róla. A védekezés a szerver és a PHP helyes konfigurációjában rejlik.

Eközben a Nette Framework automatikusan konfigurálja a PHP-t. A programozónak így nem kell azon gondolkodnia, hogyan biztosítsa helyesen a sessiont, és teljes mértékben az alkalmazás létrehozására koncentrálhat. Ehhez azonban engedélyezni kell az ini_set() függvényt.

A SameSite cookie-k mechanizmust biztosítanak annak felismerésére, hogy mi vezetett az oldal betöltéséhez. Ami teljesen alapvető a biztonság szempontjából.

A SameSite jelzőnek három értéke lehet: Lax, Strict és None (ez HTTPS-t igényel). Ha az oldalra irányuló kérés közvetlenül a webhelyről érkezik, vagy a felhasználó közvetlenül a címsorba írva vagy egy könyvjelzőre kattintva nyitja meg az oldalt, a böngésző elküldi a szervernek az összes cookie-t (azaz a Lax, Strict és None jelzőkkel). Ha a felhasználó egy másik webhelyről származó linken keresztül kattint a webhelyre, a Lax és None jelzőkkel ellátott cookie-k kerülnek átadásra a szervernek. Ha a kérés más módon jön létre, például egy másik webhelyről küldött POST űrlap elküldésével, iframe-en belüli betöltéssel, JavaScript segítségével stb., csak a None jelzővel ellátott cookie-k kerülnek elküldésre.

A Nette alapértelmezés szerint minden cookie-t Lax jelzővel küld.

verzió: 4.0