Il cross-site scripting (XSS) è un tipo di exploit di sicurezza che consente agli aggressori di iniettare script dannosi nei siti Web utilizzando il codice client. Rappresenta una minaccia significativa in quanto gli aggressori possono utilizzarlo per impersonare utenti, accedere a dati sensibili o persino modificare i contenuti della pagina del sito Web.
È così pericoloso che nel 2021 era il numero due nell'elenco di enumerazione delle debolezze comuni delle prime 25 debolezze più pericolose. Ciò significa che se stai creando siti Web, devi conoscere lo scripting tra siti e come prevenirlo.
Come funziona lo scripting tra siti?
Prima di comprendere come funziona il cross-site scripting, è importante sapere cosa significa la policy della stessa origine (SOP). SOP è una politica del meccanismo di sicurezza che limita un sito Web (un'origine) dalla lettura o dalla scrittura su un altro sito Web (un'origine diversa). Impedisce ai siti Web dannosi di inviare codice dannoso a siti Web affidabili.
Gli attacchi di cross-site scripting tentano di aggirare questa politica sfruttando l'incapacità del browser di distinguere tra codice HTML legittimo e codice dannoso. Ad esempio, un utente malintenzionato può iniettare codice JavaScript nel sito Web di destinazione. Si supponga che il browser esegua il codice e che l'autore dell'attacco ottenga l'accesso a token di sessione, cookie e altri dati sensibili.
Ci sono tre tipi di scripting cross-site che gli hacker utilizzano per violare i siti web: riflesso, memorizzato e DOM XSS.
Come prevenire lo scripting tra siti in Node
Di seguito sono riportati alcuni passaggi che puoi eseguire per impedire lo scripting tra siti in Node.
Disinfetta ingresso
Gli aggressori devono essere in grado di inviare dati alla tua applicazione web e mostrarli a un utente per eseguire un attacco XSS. Pertanto, la prima misura preventiva che devi adottare è sanificare tutti gli input che la tua applicazione riceve dai suoi utenti. Questo è fondamentale perché rileva i dati fasulli prima che il server li esegua. Potresti farlo manualmente o usare uno strumento come validatore che rende il processo più veloce.
Ad esempio, puoi usare il validatore per sfuggire ai tag HTML nell'input dell'utente come di seguito.
importare validatore da "validatore";
let userInput = `Jane <caricamento dello script="mettere in guardia('hack XSS');"></script>`;
permettere sanitizedInput = validator.escape (userInput);
Se dovessi eseguire il codice sopra, l'output disinfettato sarebbe questo.
Giovanna < caricamento dello script=&citazione; mettere in guardia('Hackeraggio XSS');&citazione;></ sceneggiatura>
Limita input utente
Limita il tipo di input che un utente può inviare nel modulo tramite la convalida. Ad esempio, se hai un campo di input per un'e-mail, consenti l'input solo con il formato dell'e-mail. In questo modo, riduci al minimo le possibilità che gli aggressori inviino dati errati. Puoi anche usare il pacchetto validator per questo.
Implementa la politica sui cookie solo HTTP
I cookie memorizzano i dati in una cache locale e rispedirlo al server tramite HTTP. Ma gli aggressori possono anche utilizzare JavaScript per accedervi tramite il browser, quindi sono facili bersagli.
Il cookie solo HTTP è una politica che impedisce agli script lato client di accedere ai dati dei cookie. Ciò significa che anche se la tua applicazione contiene una vulnerabilità e un utente malintenzionato la sfrutta, non sarà in grado di accedere al cookie.
Ecco un esempio di come è possibile implementare la politica dei cookie solo HTTP in Node.js utilizzando Express:
app.uso(esprimere.sessione({
segreto: "segreto",
biscotto: {
solo http: VERO,
sicuro: VERO
}
}))
Se un utente malintenzionato ha tentato di accedere al cookie con il solo http tag impostato su true come mostrato sopra, riceverebbero una stringa vuota.
Lo scripting cross-site è un obiettivo facile per gli hacker
Sebbene garantire la sicurezza della tua applicazione sia fondamentale, implementarla può diventare complicata. In questo post, hai appreso degli attacchi di scripting tra siti e come puoi prevenirli in Node. Poiché gli aggressori sfruttano le vulnerabilità della tua applicazione per iniettare codice dannoso nel tuo server, assicurati sempre di disinfettare l'input dell'utente. In questo modo, rimuovi il codice dannoso prima che l'applicazione lo memorizzi o lo esegua.