Ochrona przed podatnościami
Co jakiś czas na kolejnej znaczącej stronie ogłaszana jest, a nawet wykorzystywana poważna luka bezpieczeństwa. To nieprzyjemne. Jeśli zależy Ci na bezpieczeństwie Twoich aplikacji webowych, Nette Framework jest bez wątpienia najlepszym wyborem.
Cross-Site Scripting (XSS)
Cross-Site Scripting to metoda zakłócania działania stron przez wykorzystanie nieescapowanych wyjść. Atakujący może wtedy wstrzyknąć na stronę własny kod i tym samym zmodyfikować stronę albo nawet uzyskać wrażliwe dane odwiedzających. Ochrona przed XSS wymaga konsekwentnego i poprawnego escapowania wszystkich wypisywanych ciągów. Jeśli Twój programista zapomni o tym choć raz, cała strona może zostać skompromitowana.
Przykładem ataku może być podanie użytkownikowi zmodyfikowanego URL, który wstrzykuje na stronę kod. Jeśli aplikacja nie escapuje poprawnie wyjść, skrypt wykona się w przeglądarce użytkownika. W ten sposób można na przykład ukraść jego tożsamość.
https://example.com/?search=<script>alert('Successful XSS attack.');</script>
Nette Framework wprowadza rewolucyjną technologię Context-Aware Escaping, która trwale eliminuje ryzyko Cross-Site Scriptingu. Automatycznie escapuje wszystkie wyjścia zgodnie z kontekstem, więc programista nie może przypadkiem o niczym zapomnieć. Przykład? Programista tworzy taki szablon:
<p onclick="alert({$message})">{$message}</p>
<script>
document.title = {$message};
</script>
Zapis {$message} oznacza wypisanie zmiennej. W innych frameworkach trzeba jawnie escapować każde wyjście, i to
w każdym miejscu inaczej. W Nette Framework nie trzeba nic escapować, wszystko dzieje się automatycznie, poprawnie
i konsekwentnie. Jeśli ustawimy zmienną $message = 'Width 1/2"', framework wygeneruje poniższy kod HTML:
<p onclick="alert("Width 1\/2\"")">Width 1/2"</p>
<script>
document.title = "Width 1\/2\"";
</script>
Cross-Site Request Forgery (CSRF)
Atak Cross-Site Request Forgery polega na tym, że atakujący zwabia ofiarę na stronę, która niepostrzeżenie wykonuje w przeglądarce ofiary żądanie do serwera, na którym ofiara jest zalogowana. Serwer uznaje, że żądanie zostało wykonane dobrowolnie przez ofiarę. Pod tożsamością ofiary wykonuje więc akcję bez jej wiedzy. Może chodzić o zmianę albo usunięcie danych, wysłanie wiadomości itd.
Nette Framework automatycznie chroni formularze i sygnały w presenterach przed tym typem ataku, uniemożliwiając ich wysłanie albo wywołanie z innej domeny. Jeśli chcesz ochronę wyłączyć, dla formularzy użyj:
$form->allowCrossOrigin();
albo w przypadku sygnału dodaj atrybut:
use Nette\Application\Attributes\Requires;
#[Requires(sameOrigin: false)]
public function handleXyz()
{
}
Ochrona ta opiera się na nagłówku Sec-Fetch-Site (Fetch Metadata), który przeglądarka wysyła automatycznie
i którego nie da się podrobić nawet przy podatności XSS po stronie serwera. Szczegółowo opisuje to artykuł Przeglądarka wreszcie rozwiązuje CSRF.
Atak przez URL, kody sterujące, nieprawidłowe UTF-8
Różne określenia związane z próbą wstrzyknięcia przez atakującego złośliwego wejścia do Twojej aplikacji webowej. Konsekwencje mogą być bardzo różne, od uszkodzenia wyjść XML (np. niedziałających kanałów RSS) po uzyskanie wrażliwych informacji z bazy danych albo haseł. Obroną jest konsekwentna walidacja wszystkich wejść na poziomie bajtów. I powiedzmy sobie szczerze, ilu z was faktycznie to robi?
Nette Framework robi to za Ciebie, automatycznie. Nie musisz niczego konfigurować, a wszystkie wejścia zostaną oczyszczone.
Session Hijacking, Session Stealing, Session Fixation
Z zarządzaniem sesją wiąże się kilka typów ataków. Atakujący albo kradnie, albo podstawia użytkownikowi swoje session ID, uzyskując w ten sposób dostęp do aplikacji webowej bez znajomości hasła użytkownika. Może potem wykonać w aplikacji dowolną akcję bez wiedzy użytkownika. Obrona polega na właściwej konfiguracji serwera i PHP.
Nette Framework konfiguruje PHP automatycznie. Programista nie musi więc myśleć o tym, jak właściwie zabezpieczyć
sesję, i może w pełni skupić się na tworzeniu aplikacji. Wymaga to jednak, żeby funkcja ini_set() była
włączona.
Cookie SameSite
Cookies SameSite dają mechanizm rozpoznawania tego, co doprowadziło do wczytania strony, co ma kluczowe znaczenie dla bezpieczeństwa.
Flaga SameSite może mieć trzy wartości: Lax, Strict i None (ta ostatnia wymaga
HTTPS). Jeśli żądanie strony przychodzi bezpośrednio z witryny albo użytkownik otwiera stronę, wpisując ją bezpośrednio
w pasku adresu czy klikając w zakładkę, przeglądarka wysyła na serwer wszystkie cookies (czyli z flagami Lax,
Strict i None). Jeśli użytkownik przejdzie na witrynę odnośnikiem z innej strony, na serwer
przekazywane są cookies z flagami Lax i None. Jeśli żądanie powstaje w inny sposób, na przykład
przez wysłanie formularza POST z innego origin, wczytanie wewnątrz iframe'a, użycie JavaScriptu itd., wysyłane są tylko
cookies z flagą None.
Nette domyślnie wysyła wszystkie cookies z flagą Lax.