Protezione dalle vulnerabilità

Ogni tanto viene annunciata o addirittura abusata una grave falla di sicurezza. Sicuramente è un po' spiacevole. Se avete a cuore la sicurezza delle vostre applicazioni web, Nette Framework è francamente la scelta migliore per voi.

Cross-Site Scripting (XSS)

Il Cross-Site Scripting è un metodo di interruzione del sito che utilizza input non inescritti. Un aggressore può iniettare il proprio codice HTML o JavaScript e modificare l'aspetto della pagina o addirittura raccogliere informazioni sensibili sugli utenti. La protezione contro gli XSS è semplice: l'escape coerente e corretto di tutte le stringhe e gli input. Tradizionalmente, bastava che il codificatore commettesse un minimo errore e se ne dimenticasse una volta, per compromettere l'intero sito web.

Un esempio di tale iniezione può essere l'invio all'utente di un URL alterato, che inserisce uno script “maligno”. Se un'applicazione non esegue correttamente l'escape dei suoi input, una richiesta di questo tipo potrebbe eseguire uno script sul lato del client. Questo potrebbe, ad esempio, portare a un furto di identità.

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

Nette Framework propone una nuova tecnologia, il Context-Aware Escaping, che consente di eliminare per sempre i rischi di Cross-Site Scripting. L'escape di tutti gli input avviene automaticamente in base a un determinato contesto, per cui è impossibile che un codificatore dimentichi accidentalmente qualcosa. Considerate il seguente modello come esempio:

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

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

Il comando {$message} stampa una variabile. Altri framework spesso costringono gli sviluppatori a dichiarare esplicitamente l'escape e persino il tipo di escape in base al contesto. In Nette Framework, invece, non è necessario dichiarare nulla. Tutto è automatico, coerente e corretto. Se impostiamo la variabile a $message = 'Width 1/2"', il framework genererà questo codice HTML:

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

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

Falsificazione della richiesta cross-site (CSRF)

Un attacco Cross-Site Request Forgery consiste nel fatto che l'aggressore attira la vittima a visitare una pagina che esegue silenziosamente una richiesta nel browser della vittima al server in cui la vittima è attualmente loggata, e il server crede che la richiesta sia stata fatta dalla vittima a suo piacimento. Il server esegue una determinata azione sotto l'identità della vittima, ma senza che questa se ne renda conto. Può trattarsi della modifica o della cancellazione di dati, dell'invio di un messaggio, ecc.

Nette Framework protegge automaticamente i moduli e i segnali nei presenter da questo tipo di attacco. Ciò avviene impedendo che vengano inviati o richiamati da un altro dominio. Per disattivare la protezione, utilizzare quanto segue per i moduli:

$form->allowCrossOrigin();

o nel caso di un segnale, aggiungere un'annotazione @crossOrigin:

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

In PHP 8, è possibile utilizzare anche gli attributi:

use Nette\Application\Attributes\CrossOrigin;

#[CrossOrigin]
public function handleXyz()
{
}

Attacco URL, Codici di controllo, UTF-8 non validi

Termini diversi, tutti relativi al tentativo dell'attaccante di fornire all'applicazione un input “dannoso”. I risultati possono essere molto diversi, dall'output XML interrotto (ad esempio, un flusso RSS non funzionante) all'ottenimento di informazioni sensibili da un database, fino all'ottenimento delle password degli utenti. La protezione contro questi attacchi consiste in un controllo UTF-8 coerente a livello di byte. E francamente, non lo fareste senza un framework, giusto?

Nette Framework lo fa per voi, automaticamente. Non è necessario configurare nulla e la vostra applicazione sarà al sicuro.

Hijacking di sessione, furto di sessione, fissazione di sessione

La gestione delle sessioni comporta alcuni tipi di attacchi. L'aggressore può rubare l'ID di sessione della vittima o falsificarne uno, ottenendo così l'accesso a un'applicazione Web senza la password effettiva. A quel punto l'aggressore può fare tutto ciò che l'utente ha potuto fare, senza lasciare traccia. La protezione sta nella corretta configurazione di PHP e del server web stesso.

Nette Framework configura PHP automaticamente. Gli sviluppatori non devono quindi preoccuparsi di come rendere una sessione sufficientemente protetta e possono concentrarsi completamente sulle parti chiave dell'applicazione. Ciò richiede l'abilitazione della funzione ini_set().

I cookie SameSite forniscono un meccanismo per riconoscere la causa del caricamento di una pagina. Il che è assolutamente fondamentale per ragioni di sicurezza.

Il flag SameSite può avere tre valori: Lax, Strict e None (richiede HTTPS). Se la richiesta di una pagina proviene direttamente dal web o l'utente apre la pagina inserendola direttamente nella barra degli indirizzi o cliccando su un segnalibro, il browser invia tutti i cookie al server (cioè con i flag Lax, Strict e None). Se un utente giunge al sito web tramite un link proveniente da un altro sito web, i cookie con i flag Lax e None saranno trasmessi al server. Se la richiesta avviene in un altro None modo, come ad esempio l'invio di un modulo POST da un'altra origine, il caricamento all'interno di un iframe, l'utilizzo di JavaScript, ecc.

Per impostazione predefinita, Nette invia tutti i cookie con il flag Lax.

versione: 4.0