‫Narratore: Benvenuti all'ultimo video di questa sezione.
‫E in
‫questo, preverremo l'inquinamento dei
‫parametri, utilizzando un altro pacchetto NPM.
‫Ma prima di installare quel pacchetto, andiamo
‫avanti e diamo un'occhiata all'errore.
‫Ma prima di farlo, andiamo da Postman e vediamo
‫perché abbiamo davvero
‫bisogno di prevenire l'inquinamento dei parametri in primo luogo.
‫Quindi, per prima cosa, dobbiamo accedere.
‫Ok, allora, con questo utente e questa password.
‫Quindi ora possiamo usare il percorso Ottieni tutti i tour.
‫Va bene, quindi quello che
‫farò ora è aggiungere alcuni parametri alla stringa di query.
‫Quindi vediamo, voglio ordinare per durata e,
‫allo stesso tempo, voglio anche ordinare per prezzo.
‫E in realtà non ha molto senso,
‫perché siamo pronti ad avere un solo parametro di ordinamento.
‫Quindi vediamo cosa otteniamo effettivamente con questo.
‫E infatti otteniamo un errore dicendo che questo. stringa della domanda. ordinare. la divisione non è una funzione.
‫E così sta succedendo in apiFeatures. js nella riga 23.
‫Quindi apriamolo e quindi qui, sulla riga 23 è
‫dove si verifica l'errore.
‫Quindi sta cercando di dividere la proprietà sort qui, che
‫ci aspettiamo sia una stringa.
‫Ma in questo momento poiché l'abbiamo definito
‫due volte, quindi ordina una volta e poi ordina due volte,
‫express creerà effettivamente un array con questi due valori, durata e prezzo.
‫Lascia che te lo mostri davvero.
‫Consolle. tronco d'albero.
‫Ora lo copio.
‫Ok, riprova.
‫Ecco lo stesso errore e,
‫come ho detto, in realtà è un array con durata e prezzo.
‫E quindi, ovviamente, non possiamo dividere perché la divisione
‫funziona solo sulle stringhe, ok?
‫E quindi questo è un problema tipico
‫che gli aggressori possono poi sfruttare.
‫Va bene, quindi in pratica
‫ora useremo un middleware che rimuoverà semplicemente
‫questi campi duplicati, ok?
‫E quello, installiamolo.
‫Si chiama HPP
‫che sta per inquinamento da parametri HTTP.
‫Va bene.
‫Richiediamolo rapidamente qui.
‫Va bene, e quindi, questo è ancora un altro molto semplice.
‫Tutto quello che dobbiamo fare è app. utilizzare e quindi chiamare HPP.
‫Quindi, prevenire l'inquinamento dei parametri.
‫E questo dovrebbe essere usato di nuovo qui alla fine,
‫ok, perché quello che fa è ripulire la
‫stringa di query, ok?
‫Quindi proviamo di nuovo.
‫Ci vuole un po' di tempo, e ci siamo.
‫Quindi l'errore è sparito e quindi ora sta
‫usando solo l'ultimo.
‫Quindi ora sta ordinando il mio prezzo e
‫in effetti iniziamo con quello più basso e poi
‫saliamo di 497, fino a quello più costoso di
‫quasi 3000, va bene?
‫Quindi è un po' risolto, ma in alcuni casi
‫vogliamo alcune proprietà o campi duplicati, giusto?
‫Ad esempio, potremmo voler cercare i tour con la
‫durata di nove e cinque.
‫Quindi ricorda che nella nostra API
‫possiamo farlo, quindi la durata è uguale a cinque
‫e possiamo dire, allo stesso tempo, la durata nove, ok?
‫E vogliamo che funzioni davvero, ma in questo momento non è così.
‫Trova solo il tour con nove giorni, giusto?
‫Ma se non l'avessimo fatto, o il middleware HPP.
‫Quindi disattiviamolo.
‫Quindi se non lo avessimo attivo,
‫allora troveremmo tre tour, uno
‫con durata cinque, poi qui con durata nove e qui un
‫altro con durata cinque.
‫Ok, quindi in questo caso, questo è in
‫realtà il comportamento previsto.
‫Quindi cosa possiamo fare per essere in grado di
‫utilizzare il middleware ma ottenere
‫comunque questo risultato che ci aspettiamo qui,
‫con la durata, possiamo inserire nella whitelist alcuni parametri, ok?
‫Quindi, in questa funzione HPP, possiamo passare ancora
‫una volta un oggetto e quindi specificare la lista bianca, ok?
‫E la lista bianca è semplicemente un array di proprietà per
‫le quali consentiamo effettivamente i duplicati nella stringa di query.
‫Va bene?
‫E la durata è ovviamente uno di questi, va bene?
‫Quindi, proviamo di nuovo.
‫E così, in questo momento otteniamo ancora i nostri tre risultati come prima.
‫Ma se abbiamo provato con sort, creiamo una
‫nuova scheda qui.
‫Quindi, se lo provassimo con
‫questi doppi ordinamenti, non dovremmo nemmeno ricevere errori.
‫Bene, ora non sono stati registrati, quindi prendiamo il
‫nostro token di errore qui.
‫Riprova.
‫E ora funziona davvero, non riceviamo errori.
‫E così il middleware HPP sta facendo il suo lavoro.
‫Va bene?
‫Chiudi anche questo,
‫e ora dovremmo anche specificare alcuni altri campi
‫nella nostra lista bianca, perché ad esempio
‫vogliamo cercare anche questo, o la quantità di valutazioni.
‫E quindi copiamoli tutti qui nella nostra lista bianca.
‫Quindi anche la media.
‫Poi anche la durata
‫che abbiamo già, e diciamo la dimensione massima del gruppo.
‫Potremmo anche volere la difficoltà.
‫E anche il prezzo.
‫E penso che allora dovrebbe bastare.
‫Va bene.
‫E potrebbe sembrare
‫un po' strano inserire manualmente tutti i nomi dei campi qui e in
‫seguito potremmo dover fare la stessa cosa per le altre
‫risorse, e questo renderà questa lista bianca ancora più grande, giusto?
‫E ovviamente potremmo fare alcune cose complesse qui per
‫ottenere questi nomi di campo dal modello
‫stesso, ma ancora una
‫volta, voglio solo mantenerlo semplice qui, ok?
‫E quindi sto solo definendo manualmente questi
‫nomi di campo qui e poi lo chiamerò un giorno, va bene?
‫Ok, e questo in realtà
‫conclude la nostra sezione di autenticazione, autorizzazione e sicurezza.
‫E se vuoi divertirti un po' di più, allora
‫puoi provare a implementare alcune delle cose che ho suggerito
‫in quel video riassuntivo che ti
‫ho mostrato prima con quella diapositiva con tutte
‫queste diverse misure di sicurezza che
‫abbiamo già implementato e alcuni
‫dei quali ti ho detto di sperimentare.
‫Quindi sentiti libero di farlo, o
‫se no, allora passiamo insieme alla sezione
‫successiva che sarà di nuovo davvero eccitante perché inizieremo
‫davvero a modellare i
‫dati e impareremo alcune cose MongoDB più avanzate.
‫Quindi non vedo l'ora di vederti lì.