Ich habe eine einseitige Anwendung mit React und React-Router erstellt und ich kann nicht verstehen, wie diese Anwendungen gesichert werden können.Sichern einer einseitigen Anwendung, die auf react/react-router aufgebaut ist
Ich fand eine schöne klare blog post, die einen Ansatz zeigt, aber es sieht nicht sehr sicher für mich. Der Ansatz, der in diesem Beitrag vorgestellt wird, besteht darin, das Rendering von Komponenten zu beschränken, auf die der Benutzer nicht zugreifen darf. Der Autor schrieb ein paar weitere Posts, die Variationen der Idee sind und sie auf React-Router-Routen und andere Komponenten erweitern, aber im Grunde scheinen sich alle diese Ansätze auf die gleiche fehlerhafte Idee zu verlassen: Der clientseitige Code entscheidet, was zu tun ist basierend auf Daten in dem Geschäft zu dem Zeitpunkt, zu dem die Komponenten zusammengesetzt sind. Und das scheint mir ein Problem zu sein - was soll einen unternehmungslustigen Hacker daran hindern, mit dem Code herumzuhauen, um Zugang zu Sachen zu bekommen?
Ich habe gedacht drei verschiedene Ansätze, von denen keiner bin ich sehr zufrieden mit:
ich sicherlich meinen Autorisierungscode so schreiben könnte, dass der Client-Seite Code ständig überprüft mit dem Server zur Autorisierung, aber das scheint verschwenderisch.
Ich konnte die Anwendung so einrichten, dass Module vom Server auf den Client übertragen werden, nachdem der Server überprüft hat, dass der Client berechtigt ist, auf diesen Code zuzugreifen. Aber das scheint meinen Code in eine Million kleiner Module zu zerlegen anstatt in ein schönes, monolithisches Paket (ich benutze browserify).
Einige Systeme des serverseitigen Renderings funktionieren möglicherweise, wodurch sichergestellt wird, dass der Benutzer nur Seiten sehen kann, für die der Server die Berechtigung zum Anzeigen festgelegt hat. Aber das scheint kompliziert und scheint auch ein Schritt zurück zu sein (ich könnte einfach eine traditionelle Web-App schreiben, wenn ich wollte, dass der Server alles macht).
Also, was ist der beste Ansatz? Wie haben andere Leute dieses Problem gelöst?