‫-: In diesem
‫Vortrag werden wir zwei weitere Pakete verwenden, um unsere Anwendungssicherheit
‫zu verbessern, und diesmal um eine Datenbereinigung durchzuführen.
‫Datenbereinigung bedeutet also im Grunde, alle
‫Daten, die in die
‫Anwendung gelangen, von bösartigem Code zu bereinigen.
‫Also Code, der versucht, unsere Anwendung anzugreifen.
‫In diesem Fall versuchen wir uns gegen zwei Angriffe zu verteidigen.
‫Also, schreiben wir es auf, und wir
‫machen es, sagen wir, gleich hier nach dem Body-Parser.
‫Diese Middleware liest hier die Daten in
‫die Anfrage ein. Körper, und erst
‫danach können wir diese Daten tatsächlich bereinigen, oder?
‫Dies ist ein perfekter Ort für die Datenbereinigung.
‫Daher werden wir eine Datenbereinigung gegen
‫NoSQL-Abfrageinjektion und auch eine Datenbereinigung
‫gegen Cross-Site-Scripting-Angriffe durchführen.
‫Und bevor Sie etwas anderes
‫tun, möchte ich Ihnen zeigen, warum es so extrem
‫wichtig ist, sich gegen diese Art von Angriff zu verteidigen.
‫Wir simulieren jetzt eine NoSQL-Abfrageinjektion und ich hoffe, dass
‫Sie genauso schockiert sind wie ich, als ich zum ersten
‫Mal entdeckte, wie mächtig das sein kann.
‫Lassen Sie uns nun hier zu Postman gehen
‫und versuchen, uns als jemand
‫anzumelden, auch ohne seine E-Mail-Adresse zu kennen.
‫Alles klar, also im Grunde geben wir einfach ein Passwort ein, sagen
‫wir dieses hier, wir können uns einloggen, aber
‫auch ohne die E-Mail-Adresse zu kennen.
‫Auch dies werden
‫wir tun, indem wir eine NoSQL-Abfrageinjektion simulieren, und
‫der einfachste Weg, dies zu tun, geht so.
‫Anstatt eine echte E-Mail
‫anzugeben, spezifizieren wir im Grunde diese Abfrage.
‫Wir verwenden den MongoDB-größer-als-Operator
‫und setzen ihn auf nichts, okay?
‫Und jetzt, was passiert?
‫Tatsächlich sind wir jetzt als Admin eingeloggt.
‫Sie sehen also, wir haben sogar unser Zugriffstoken bekommen.
‫Ja, wir sind jetzt wirklich eingeloggt und das
‫macht mich total fertig, okay?
‫Auch hier konnten wir uns,
‫ohne die E-Mail-Adresse, nur das Passwort zu kennen, einloggen.
‫Und glauben Sie mir, es ist nicht
‫wirklich schwer, eine Reihe wirklich beliebter Passwörter zu finden, die
‫in jeder Anwendung verwendet werden.
‫Vor dieser Art von Angriff müssen wir uns also schützen.
‫Dies funktioniert im Grunde, weil dies immer so sein wird, also das ist
‫tatsächlich - das sehen Sie auch in Compass.
‫Also kopiere ich es, oder eigentlich, lasst uns das alles kopieren.
‫Versuchen Sie dann, genau nach diesem Filter zu filtern.
‫Jetzt fehlen uns nur noch die geschweiften
‫Klammern, aber jetzt erhalten wir tatsächlich eine gültige Abfrage.
‫Lassen Sie uns auf Suchen klicken, und tatsächlich werden alle Benutzer zurückgegeben.
‫Im Grunde stimmen also alle Benutzer mit dieser Abfrage überein.
‫Auch hier liegt es daran, dass dies hier immer wahr ist.
‫Dadurch werden dann alle Benutzernamen ausgewählt.
‫Diese bösartige Abfrageinjektion hier hat es
‫uns ermöglicht, uns nur mit diesem Passwort anzumelden, in Ordnung?
‫Also, um uns davor zu schützen,
‫installieren wir eine
‫weitere Middleware, und diese heißt express-mongo-sanitize, und da wir hier
‫sind, installieren wir auch die andere,
‫die wir brauchen werden, aber
‫später in diesem Video, das einfach XSS heißt.
‫Eigentlich war das nicht richtig; es heißt XSS_clean.
‫Wir müssen fortfahren und das andere deinstallieren.
‫NPM deinstalliert XSS.
‫Werfen wir einen Blick auf unser Paket. json, und tatsächlich ist es weg.
‫Auch hier ist XSS_clean diejenige, die wir verwenden möchten.
‫Wie auch immer, lassen Sie
‫uns zunächst noch einmal über die NoSQL-Abfrageinjektion sprechen.
‫Alles, was wir verwenden werden, ist -
‫und natürlich müssen wir
‫es zuerst anfordern, daher ist const mongoSanitize gleich express-mongo-sanitize.
‫Auch hier hilft mir VS Code hier, und da wir hier sind,
‫benötigen wir auch den nächsten.
‫Die Variable, die ich benötige,
‫heißt XSS, und dann heißt das Modul XSS_clean.
‫Also, lass uns jetzt dieses MongoSanitize hier verwenden - genau hier.
‫MongoSanitize ist eine Funktion, die wir aufrufen, die
‫dann eine Middleware-Funktion zurückgibt, die wir
‫dann verwenden können.
‫Dies reicht aus, um uns vor der Art
‫von Angriffen zu schützen, die wir gerade gesehen haben.
‫Diese Middleware sieht sich
‫also den Anforderungstext, die Anforderungsabfragezeichenfolge und auch
‫Request an. Params, und
‫dann werden im
‫Grunde alle Dollarzeichen und
‫Punkte herausgefiltert, weil MongoDB-Operatoren so geschrieben sind.
‫Wenn Sie das entfernen, werden diese Operatoren
‫dann nicht mehr funktionieren.
‫Versuchen wir es also noch einmal.
‫Auch hier werden alle diese Dollarzeichen entfernt.
‫Wenn ich das also jetzt mache,
‫dann bekommen wir tatsächlich
‫diesen Fehler, und wir können diesen
‫Trick hier, diesen Query-Injection-Angriff, nicht mehr verwenden, um uns einzuloggen.
‫Das behebt also das erste Problem, aber
‫jetzt verwenden wir die andere
‫Middleware, die wir ebenfalls gerade benötigt haben.
‫Also App. verwenden und XSS, in Ordnung?
‫Dadurch werden im Grunde
‫alle Benutzereingaben von bösartigem HTML-Code befreit.
‫Stellen Sie sich vor, ein
‫Angreifer würde versuchen, bösartigen
‫HTML-Code mit angehängtem JavaScript-Code einzufügen.
‫Wenn das dann später in unsere HTML-Site eingefügt würde,
‫könnte es dann wirklich Schaden anrichten.
‫Mit dieser Middleware verhindern wir
‫das im Grunde durch die Konvertierung all dieser HTML-Symbole.
‫Wie ich schon sagte, die Mongoose-Validierung selbst
‫ist eigentlich schon ein sehr guter Schutz gegen XSS, weil sie
‫nicht wirklich zulässt, dass irgendwelche
‫verrückten Sachen in unsere Datenbank gelangen, solange
‫wir sie richtig verwenden.
‫Wenn Sie können, fügen Sie Ihren Mongoose-Schemas einfach
‫eine gewisse Validierung hinzu, und das
‫sollte Sie vor allem vor Cross-Site-Scripting schützen, zumindest auf der Serverseite.
‫Lassen Sie uns diese Middleware auch hier ganz schnell testen.
‫Was ich tun werde, ist, einfach einen neuen Benutzer
‫zu erstellen, und nennen wir ihn hier "Tester" oder so ähnlich.
‫Das Passwort ist richtig, und hier,
‫im Namen, fügen wir etwas HTML-Code hinzu.
‫Also div mit der ID von Bad-Code.
‫Gut, versuchen wir es jetzt.
‫Sie sehen, dass das von uns
‫verwendete XSS-Modul diese HTML-Symbole hier,
‫meistens dieses, tatsächlich in diese HTML-Entität hier konvertiert hat.
‫Lass uns diesen Typen einfach schnell löschen.
‫Wir brauchen ihn überhaupt nicht. (lacht) Das
‫ist unser schneller und einfacher Schutz vor
‫einigen dieser Angriffe durch Datenbereinigung.
‫Denken Sie auch daran, dass die
‫zuvor verwendete Validierungsfunktionsbibliothek
‫auch einige coole Bereinigungsfunktionen enthält.
‫Wir könnten damit auch manuell Middleware erstellen, aber
‫auch das ist nicht
‫wirklich notwendig, da Mongoose bereits ein strenges Schema erzwingt.
‫Wenn es dann auf etwas
‫Seltsames stößt, wird ein Fehler ausgegeben, und ja,
‫das ist bereits ein ziemlich guter Schutz.
‫Also, wir sind wirklich fast fertig mit dem Sicherheitsteil.
‫Alles, was wir im
‫nächsten Video tun müssen, ist, Parameter Pollution zu verhindern.