‫-: In questa lezione
‫utilizzeremo altri due pacchetti per migliorare la sicurezza delle nostre applicazioni e
‫questa volta per eseguire la sanificazione dei dati.
‫Quindi, la sanificazione dei dati significa
‫fondamentalmente pulire tutti i
‫dati che entrano nell'applicazione da codice dannoso.
‫Quindi, codice che sta cercando di attaccare la nostra applicazione.
‫In questo caso, stiamo cercando di difenderci da due attacchi.
‫Quindi, scriviamolo e lo faremo, diciamo,
‫proprio qui dopo il parser del corpo.
‫Questo middleware qui legge i dati
‫nella richiesta. corpo, e solo
‫dopo possiamo effettivamente pulire quei dati, giusto?
‫Questo è un posto perfetto per fare la sanificazione dei dati.
‫Quindi, effettueremo la sanificazione dei dati contro l'iniezione di
‫query NoSQL e anche la sanificazione dei dati contro
‫gli attacchi di scripting tra siti.
‫E ora, prima di fare
‫qualsiasi altra cosa, lascia che ti mostri perché
‫è così importante difendersi da questo tipo di attacco.
‫Ora simuleremo un'iniezione di query NoSQL e spero che
‫rimarrete scioccati come lo ero io quando ho scoperto per
‫la prima volta quanto possa essere potente.
‫Ora andiamo su Postman qui e proviamo
‫ad accedere come qualcuno, anche
‫senza conoscere il loro indirizzo email.
‫Va bene, quindi in pratica, semplicemente fornendo una password,
‫diciamo questa qui, potremo accedere, ma anche
‫senza conoscere l'indirizzo email.
‫Di nuovo, lo
‫faremo simulando un'iniezione di query NoSQL e
‫il modo più semplice per farlo è questo.
‫Invece di specificare un'e-mail
‫reale, in pratica specifichiamo questa query.
‫Usiamo l'operatore MongoDB maggiore di
‫e lo impostiamo uguale a niente, ok?
‫E ora, cosa succede?
‫In effetti, ora abbiamo effettuato l'accesso come amministratore.
‫Quindi vedi che abbiamo persino ottenuto il nostro token di accesso.
‫Sì, ora abbiamo davvero effettuato l'accesso e questo
‫mi fa impazzire completamente, ok?
‫Ancora una volta, senza conoscere l'indirizzo
‫e-mail, solo la password, siamo stati in grado di accedere.
‫E credimi, non è davvero difficile
‫trovare un mucchio di password molto popolari che vengono
‫utilizzate su ogni applicazione.
‫Quindi, questo tipo di attacco è ciò da cui dobbiamo proteggerci.
‫Questo funziona fondamentalmente perché sarà sempre vero, quindi è in realtà
‫- lo vedi anche in Compass.
‫Quindi lo sto copiando, o meglio, copiamo tutto questo.
‫Quindi prova a filtrare in base a questa stessa identica cosa.
‫Ora ci mancano solo le parentesi
‫graffe, ma ora otteniamo effettivamente una query valida.
‫Premiamo Trova, e in effetti, questo restituisce tutti gli utenti.
‫Quindi, in pratica, tutti gli utenti corrispondono a questa query.
‫Di nuovo, è perché questo qui è sempre vero.
‫Questo selezionerà quindi tutti i nomi utente.
‫Quella query injection dannosa qui ci
‫ha permesso di accedere solo conoscendo questa password, va bene?
‫Quindi, per proteggerci da questo, installiamo
‫un altro middleware,
‫e questo si chiama express-mongo-sanitize, e visto che siamo qui,
‫andiamo avanti e installiamo anche l'altro
‫che ci servirà, ma più
‫tardi in questo video, che si chiama semplicemente XSS.
‫In realtà, non era corretto; si chiama XSS_clean.
‫Dobbiamo andare avanti e disinstallare l'altro.
‫NPM disinstalla XSS.
‫Diamo un'occhiata al nostro pacchetto. json, e infatti non c'è più.
‫Ancora una volta, XSS_clean è quello che vogliamo usare.
‫Ad ogni modo, per prima
‫cosa, parliamo di nuovo dell'iniezione di query NoSQL.
‫Tutto ciò che useremo è -
‫e, naturalmente, dobbiamo
‫prima richiederlo, quindi const mongoSanitize uguale richiede express-mongo-sanitize.
‫Di nuovo, VS Code qui mi aiuta, e visto che ci
‫siamo, richiediamo anche il prossimo.
‫La variabile che sto richiedendo si
‫chiama XSS, quindi il nome del modulo è XSS_clean.
‫Quindi, ora usiamo questo mongoSanitize qui - proprio qui.
‫MongoSanitize è una funzione che chiameremo, che restituirà
‫quindi una funzione middleware, che
‫possiamo quindi utilizzare.
‫Questo è sufficiente per prevenirci contro il
‫tipo di attacco che abbiamo appena visto prima.
‫Quindi, ciò che fa questo middleware
‫è guardare il corpo della richiesta, la stringa di query della
‫richiesta e anche Request. Params, e quindi
‫fondamentalmente filtrerà tutti i
‫simboli e i punti del dollaro,
‫perché è così che vengono scritti gli operatori MongoDB.
‫Rimuovendolo, beh, questi operatori non
‫funzioneranno più.
‫Quindi, proviamo di nuovo.
‫Ancora una volta, rimuoverà tutti questi simboli del dollaro.
‫Quindi, se lo faccio ora, allora
‫effettivamente otteniamo questo errore
‫e non possiamo più usare questo
‫trucco qui, questo attacco di iniezione di query, per accedere.
‫Quindi, questo risolve il primo problema,
‫ma ora usiamo quell'altro
‫middleware che abbiamo appena richiesto prima.
‫Quindi, app. usa e XSS, va bene?
‫Questo pulirà quindi qualsiasi input
‫dell'utente da codice HTML dannoso, in pratica.
‫Immagina che un utente malintenzionato tenti
‫di inserire del codice HTML
‫dannoso con del codice JavaScript allegato.
‫Se questo venisse poi iniettato nel nostro sito HTML,
‫potrebbe davvero creare dei danni.
‫Usando questo middleware, lo
‫impediamo fondamentalmente convertendo tutti questi simboli HTML.
‫Come ho detto prima, la stessa convalida di
‫Mongoose è in realtà già un'ottima protezione contro XSS, perché non
‫consentirà a nessuna roba pazzesca
‫di entrare nel nostro database, a patto
‫che la usiamo correttamente.
‫Ogni volta che puoi, aggiungi semplicemente un po'
‫di convalida ai tuoi schemi Mongoose,
‫e questo dovrebbe principalmente proteggerti dallo scripting cross-site, almeno sul lato server.
‫Testiamo molto rapidamente anche questo middleware qui.
‫Quello che farò è semplicemente creare un nuovo
‫utente e chiamiamolo qui "tester" o qualcosa del genere.
‫La password è giusta, e
‫qui, nel nome, aggiungiamo del codice HTML.
‫Quindi, div con l'id di bad-code.
‫Va bene, ora proviamo.
‫Vedete che il modulo XSS che abbiamo
‫usato ha effettivamente convertito questi
‫simboli HTML qui, principalmente questo, in questa entità HTML qui.
‫Cancelliamo velocemente questo tizio.
‫Non abbiamo affatto bisogno di lui. (Ride) Questa è la
‫nostra protezione rapida e semplice contro alcuni di questi
‫attacchi che utilizzano la sanificazione dei dati.
‫Ricorda anche che la libreria di funzioni di validazione
‫che abbiamo usato prima contiene anche
‫un paio di fantastiche funzioni di sanificazione.
‫Potremmo anche creare manualmente del middleware usando questi, ma
‫ancora una volta, non
‫è realmente necessario, perché Mongoose applica già uno schema rigoroso.
‫Quindi, se incontra qualcosa
‫di strano, genererà un errore e sì,
‫è già una protezione abbastanza buona.
‫Quindi, abbiamo quasi finito con la parte di sicurezza.
‫Tutto ciò che dobbiamo
‫fare nel prossimo video è prevenire l'inquinamento da parametri.