‫Sprecher: Willkommen zum letzten Video dieses Abschnitts.
‫Und in
‫diesem Fall werden wir Parameterverschmutzung
‫verhindern, indem wir ein weiteres NPM-Paket verwenden.
‫Aber bevor wir dieses Paket installieren, schauen
‫wir uns den Fehler an.
‫Aber bevor wir das tun, gehen wir
‫zu Postman und
‫sehen, warum wir die Parameterverschmutzung überhaupt verhindern müssen.
‫Zuerst müssen wir uns also einloggen.
‫Okay, mit diesem Benutzer und diesem Passwort.
‫Jetzt können wir also die Get All Tours-Route verwenden.
‫In Ordnung, und jetzt
‫werde ich hier einige Parameter zum Abfragestring hinzufügen.
‫Mal sehen, ich möchte nach
‫Dauer und gleichzeitig auch nach Preis sortieren.
‫Und es macht nicht wirklich viel
‫Sinn, weil wir bereit sind, nur einen Sortierparameter zu haben.
‫Schauen wir uns also an, was wir damit tatsächlich herausbekommen.
‫Und tatsächlich erhalten wir eine Fehlermeldung, die dies sagt. Abfragezeichenfolge. Sortieren. split ist keine Funktion.
‫Und das passiert in den apiFeatures. js in Zeile 23.
‫Also lass uns das öffnen und hier, in Zeile 23,
‫tritt dieser Fehler auf.
‫Es wird also versucht, die sort-Eigenschaft hier aufzuteilen, von der wir
‫erwarten, dass sie eine Zeichenfolge ist.
‫Aber im Moment, da wir es
‫zweimal definiert haben, also einmal sortieren und dann zweimal sortieren, erstellt
‫Express tatsächlich ein Array mit diesen beiden Werten, Dauer und Preis.
‫Lass mich dir das tatsächlich zeigen.
‫Konsole. Protokoll.
‫Jetzt kopiere ich es.
‫Okay, versuche es noch einmal.
‫Hier ist der gleiche Fehler
‫und wie gesagt, es ist tatsächlich ein Array mit Dauer und Preis.
‫Und damit können wir natürlich nicht splitten, da Split
‫nur bei Saiten funktioniert, okay?
‫Dies ist also ein typisches Problem, das
‫sich Angreifer dann zunutze machen können.
‫In Ordnung, und im Grunde werden
‫wir jetzt eine Middleware verwenden, die diese doppelten
‫Felder einfach entfernt, okay?
‫Und das installieren wir.
‫Es wird
‫HPP genannt, was für HTTP-Parameter-Verschmutzung steht.
‫Gut.
‫Lassen Sie es uns hier schnell anfordern.
‫In Ordnung, und so ist dies noch eine sehr einfache.
‫Alles, was wir tun müssen, ist eine App. verwenden und dann HPP aufrufen.
‫Verhindern Sie daher eine Parameterverschmutzung.
‫Und dieser hier sollte am Ende wieder verwendet werden,
‫okay, denn was er bewirkt, ist die
‫Abfragezeichenfolge aufzuräumen, in Ordnung?
‫Versuchen wir es also noch einmal.
‫Es dauert ein bisschen, und los geht's.
‫Der Fehler ist also weg und es wird jetzt
‫nur der letzte verwendet.
‫Also sortiert es jetzt meinen Preis,
‫und tatsächlich beginnen wir mit dem niedrigsten Preis und
‫steigen dann um 497 auf bis zum teuersten von
‫fast 3000, in Ordnung?
‫Das ist also irgendwie behoben, aber in einigen Fällen möchten
‫wir tatsächlich einige doppelte Eigenschaften oder Felder, oder?
‫Zum Beispiel möchten wir vielleicht nach Touren mit der Dauer
‫von neun und fünf suchen.
‫Denken Sie also daran, dass wir
‫dies in unserer API tun können, sodass die Dauer fünf
‫beträgt und wir gleichzeitig die Dauer neun sagen können, okay?
‫Und wir wollen, dass dies tatsächlich funktioniert, aber im Moment funktioniert es nicht.
‫Es findet doch nur die Tour mit neun Tagen, oder?
‫Aber wenn nicht, oder HPP-Middleware.
‫Also deaktivieren wir es.
‫Wenn wir es also nicht aktiv hätten,
‫würden wir drei Touren finden, eine
‫mit der Dauer fünf, dann hier mit der Dauer neun und hier eine
‫weitere mit der Dauer fünf.
‫Okay, und in diesem Fall ist dies
‫tatsächlich das erwartete Verhalten.
‫Was können wir also tun, um die Middleware verwenden zu
‫können und trotzdem das Ergebnis
‫zu erhalten, das wir hier erwarten, mit der
‫Dauer können wir einige Parameter auf die Whitelist setzen, okay?
‫In diese HPP-Funktion können wir also noch einmal
‫ein Objekt übergeben und dann dort die Whitelist angeben, okay?
‫Und die weiße Liste ist einfach ein Array von Eigenschaften,
‫für die wir tatsächlich Duplikate in der Abfragezeichenfolge zulassen.
‫Okay?
‫Und Dauer gehört natürlich dazu, ja?
‫Versuchen wir es also noch einmal.
‫Und so erhalten wir im Moment immer noch unsere drei Ergebnisse wie zuvor.
‫Aber wenn wir es mit sort versucht haben, erstellen
‫wir hier eine neue Registerkarte.
‫Wenn wir es also mit diesen doppelten
‫Sortierungen versucht haben, sollten wir auch keinen Fehler bekommen.
‫Nun waren wir nicht eingeloggt, also holen wir uns
‫hier einfach unser Fehlertoken.
‫Versuchen Sie das noch einmal.
‫Und jetzt funktioniert es tatsächlich, wir erhalten keine Fehlermeldung.
‫Und damit die HPP-Middleware ihren Job macht.
‫Gut?
‫Schließen Sie auch
‫dieses, und jetzt sollten wir auch noch einige andere
‫Felder in unserer Whitelist angeben, da wir beispielsweise auch
‫nach diesem suchen möchten, oder nach der Anzahl der Bewertungen.
‫Also kopieren wir sie einfach alle hier in unsere Whitelist.
‫Also auch der Durchschnitt.
‫Dann auch die Dauer,
‫die wir schon haben, und sagen wir die maximale Gruppengröße.
‫Vielleicht wollen wir auch die Schwierigkeit.
‫Und auch der Preis.
‫Und ich denke, das sollte dann reichen.
‫Gut.
‫Und es
‫mag ein bisschen seltsam erscheinen, alle Feldnamen hier manuell einzugeben, und später
‫müssen wir möglicherweise dasselbe für die anderen Ressourcen tun,
‫und das wird diese weiße Liste dann noch größer machen, oder?
‫Und natürlich könnten wir hier einige komplexe Dinge tun,
‫um diese Feldnamen aus dem Modell selbst zu
‫erhalten, aber noch einmal
‫möchte ich es hier einfach halten, okay?
‫Und so definiere ich diese Feldnamen
‫hier einfach manuell und nenne dann einen Tag, in Ordnung?
‫Okay, und damit ist unser
‫Abschnitt zur Authentifizierung, Autorisierung und Sicherheit abgeschlossen.
‫Und wenn Sie noch mehr Spaß damit haben möchten, können
‫Sie natürlich versuchen, einige der Dinge umzusetzen, die ich in
‫dem zusammenfassenden Video vorgeschlagen habe, das ich
‫Ihnen zuvor mit dieser Folie gezeigt habe, mit
‫all diesen verschiedenen Sicherheitsmaßnahmen, die wir bereits
‫implementiert haben und mit einigen
‫habe ich dir gesagt, du sollst damit experimentieren.
‫Also zögern Sie nicht, das zu tun, oder
‫wenn nicht, dann lassen Sie uns einfach gemeinsam
‫zum nächsten Abschnitt übergehen, der wieder sehr spannend wird, weil wir
‫dann wirklich mit der Modellierung der
‫Daten beginnen und einige wirklich fortgeschrittene MongoDB-Sachen lernen werden.
‫Ich kann es kaum erwarten, dich dort zu sehen.