Protezione dalle vulnerabilità
Ogni tanto viene segnalata una falla di sicurezza su un altro sito importante o la falla viene sfruttata. Questo è spiacevole. Se vi preoccupate della sicurezza delle vostre applicazioni web, Nette Framework è sicuramente la scelta migliore.
Cross-Site Scripting (XSS)
Cross-Site Scripting è un metodo di violazione dei siti web che sfrutta output non trattati. L'attaccante può quindi inserire il proprio codice nella pagina e quindi modificarla o addirittura ottenere dati sensibili sui visitatori. Ci si può difendere da XSS solo trattando in modo coerente e corretto tutte le stringhe. Eppure basta che il vostro codificatore lo dimentichi una sola volta, e l'intero sito può essere immediatamente compromesso.
Un esempio di attacco può essere l'invio di un URL modificato all'utente, tramite il quale iniettiamo il nostro codice nella pagina. Se l'applicazione non tratta correttamente gli output, eseguirà lo script nel browser dell'utente. In questo modo possiamo, ad esempio, rubargli l'identità.
https://example.com/?search=<script>alert('Attacco XSS riuscito.');</script>
Nette Framework introduce una tecnologia rivoluzionaria Context-Aware Escaping, che vi libererà per sempre dal rischio di Cross-Site Scripting. Tratta automaticamente tutti gli output, quindi non può succedere che il codificatore dimentichi qualcosa. Esempio? Il codificatore crea questo template:
<p onclick="alert({$message})">{$message}</p>
<script>
document.title = {$message};
</script>
La notazione {$message}
significa stampare la variabile. In altri framework è necessario trattare esplicitamente
ogni stampa e persino in modo diverso in ogni punto. In Nette Framework non è necessario trattare nulla, tutto viene fatto
automaticamente, correttamente e coerentemente. Se assegniamo alla variabile $message = 'Larghezza 1/2"'
, il
framework genererà il codice HTML:
<p onclick="alert("Larghezza 1\/2\"")">Larghezza 1/2"</p>
<script>
document.title = "Larghezza 1\/2\"";
</script>
Cross-Site Request Forgery (CSRF)
L'attacco Cross-Site Request Forgery consiste nel fatto che l'attaccante attira la vittima su una pagina che esegue discretamente nel browser della vittima una richiesta al server su cui la vittima è loggata, e il server crede che la richiesta sia stata eseguita dalla vittima di sua spontanea volontà. E così, sotto l'identità della vittima, esegue una determinata azione senza che questa ne sia a conoscenza. Può trattarsi di modifica o cancellazione di dati, invio di un messaggio, ecc.
Nette Framework protegge automaticamente i form e i segnali nei presenter da questo tipo di attacco. E lo fa impedendo il loro invio o attivazione da un altro dominio. Se volete disattivare la protezione, usate per i form:
$form->allowCrossOrigin();
o nel caso di un segnale aggiungete l'annotazione @crossOrigin
:
/**
* @crossOrigin
*/
public function handleXyz()
{
}
In Nette Application 3.2 potete usare anche gli attributi:
use Nette\Application\Attributes\Requires;
#[Requires(sameOrigin: false)]
public function handleXyz()
{
}
Attacco URL, codici di controllo, UTF-8 non valido
Vari termini legati al tentativo dell'attaccante di inviare alla vostra applicazione web input dannosi. Le conseguenze possono essere molto diverse, dal danneggiamento degli output XML (ad es. feed RSS non funzionanti) all'ottenimento di informazioni sensibili dal database o password. La difesa consiste nel trattare coerentemente tutti gli input a livello dei singoli byte. E mano sul cuore, chi di voi lo fa?
Nette Framework lo fa per voi e inoltre automaticamente. Non dovete configurare assolutamente nulla e tutti gli input saranno trattati.
Session hijacking, session stealing, session fixation
Alla gestione delle sessioni sono associati diversi tipi di attacchi. L'attaccante ruba o invia all'utente il proprio ID di sessione e grazie a ciò ottiene l'accesso all'applicazione web senza conoscere la password dell'utente. Successivamente può fare qualsiasi cosa nell'applicazione senza che l'utente lo sappia. La difesa consiste nella corretta configurazione del server e di PHP.
Nette Framework configura PHP automaticamente. Il programmatore non deve quindi pensare a come proteggere correttamente la
sessione e può concentrarsi completamente sulla creazione dell'applicazione. Richiede tuttavia la funzione ini_set()
abilitata.
Cookie SameSite
I cookie SameSite forniscono un meccanismo per riconoscere cosa ha portato al caricamento della pagina. Il che è assolutamente fondamentale per la sicurezza.
Il flag SameSite può avere tre valori: Lax
, Strict
e None
(quest'ultimo richiede
HTTPS). Se la richiesta per la pagina proviene direttamente dal sito o l'utente apre la pagina inserendola direttamente nella
barra degli indirizzi o cliccando su un segnalibro, il browser invia al server tutti i cookie (cioè con flag Lax
,
Strict
e None
). Se l'utente arriva al sito cliccando su un link da un altro sito, vengono trasmessi al
server i cookie con flag Lax
e None
. Se la richiesta viene generata in altro modo, come l'invio di un
form POST da un altro sito, il caricamento all'interno di un iframe, tramite JavaScript, ecc., vengono inviati solo i cookie con
flag None
.
Nette invia di default tutti i cookie con il flag Lax
.