Ich erstelle eine Anwendung, die ich gerne mit meiner Website kommunizieren möchte. Die App muss Daten für einen bestimmten App-Benutzer aus der Datenbank der Website abrufen. Ich bin mir nicht sicher, wie ich das am besten machen kann.
Ich habe gesehen, dass eine Möglichkeit, dies zu tun, darin besteht, eine Anmeldeseite in der App zu erstellen, die dann auf eine login.php-Logik auf meiner Website trifft. Dies ist praktisch, da ich eine Codebasis verwenden kann, um die Anmeldung sowohl für die Website als auch für die App zu verwalten.
Eine andere Lösung, die ich gesehen habe, ist die Verwendung von JSON-Anforderungen für die Kommunikation zwischen App und Website. Dies ist praktisch, da JSON-Objekte einfach erstellt und analysiert werden können.
Grundsätzlich würde ich gerne wissen, wie diese Kommunikation am besten / allgemeinsten abläuft, welche Vor- und Nachteile es hat, wenn man übereinander steht, und welche anderen Sicherheitsprobleme zu berücksichtigen sind.
Besteht beispielsweise das Risiko, dass vertrauliche Benutzerdaten offengelegt werden, wenn eine Methode über der anderen verwendet wird? Wenn ja, wie kann dies verhindert werden? Wie und wo kommen hier Verschlüsselung und Benutzervalidierungen ins Spiel?
quelle
Antworten:
Ich würde empfehlen, eine REST-API für Ihre Anwendung und Ihre Website zu erstellen.
Das Erstellen eines Webdienstes ist mehr Arbeit, aber ich denke, es ist viel sauberer. Wenn Sie dies auf diese Weise tun, müssen sich weder Ihre Website noch Ihre Anwendung Gedanken darüber machen, wie eine Verbindung zur Datenbank hergestellt und diese abgefragt werden soll, da all diese Details von der API abstrahiert werden. Ein weiterer Vorteil ist die Sicherheit: Wenn Ihre Website jemals gehackt wird, haben sie nicht unbedingt Zugriff auf Ihre Datenbank, da die Website nur API-Aufrufe (und keine Datenbankaufrufe) ausführt. Natürlich gibt es eine Menge zu beachten Sicherheit, aber das ist eine Sache weniger, über die Sie sich Sorgen machen müssen.
Hier ist eine großartige Anleitung zum Erstellen einer REST-API in PHP:
http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
quelle
Abhängig von der Komplexität Ihrer Anforderungen entweder REST / JSON- oder SOAP-Webdienste.
Für einfache Anforderungen ist REST einfacher zu verstehen und zu implementieren, insbesondere wenn Sie JSON gegenüber XML bevorzugen.
Wenn Ihre Anforderungen jedoch Authentifizierung, Nachrichtenüberprüfung, Ermittlung, Nicht-Zurückweisung oder ein komplexes Nachrichtenschema umfassen, sollten Sie sich besser mit der Komplexität von SOAP befassen, da nahezu jedes Problem behandelt wird. Obwohl SOAP komplexer und schwerer zu verstehen ist, behandelt es nahezu jede in einem Messaging-System mögliche Permutation und Variation der Architektur. Außerdem verfügt es über eine sehr ausgereifte und umfassende Reihe von Tools, die Sie durch das Labyrinth der APIs führen. Wenn Sie dieses Niveau nicht benötigen, bleiben Sie bei REST.
quelle
Der größte Nachteil einer API besteht darin, dass Sie die Verantwortung dafür übernehmen, JSON-Anforderungen zu stellen, die Antworten zu konvertieren und sie auf der Seite anzuzeigen, für die der Browser verantwortlich ist. Möglicherweise sind nicht alle Browser dazu in der Lage, entweder von sich aus oder weil Benutzer das Java-Skript deaktiviert haben.
Diese Bedenken haben jedoch im Laufe der Zeit abgenommen und betreffen jetzt relativ wenige Kunden. Es kann sich jedoch lohnen, zusätzliche Arbeit zu leisten, um alle Kunden zu unterstützen.
Die Vorteile einer API bestehen darin, dass es viel einfacher ist, die API-Logik von den Details der Anzeige zu trennen und mit anderen Mitteln als einem Browser (z. B. von einer anderen Anwendung) direkt auf die API zuzugreifen. Dadurch wird das Testen der API automatisch vom Testen des Clients getrennt, was gut ist.
Es ist auch etwas sicherer gegen Seiteninjektionsangriffe (wie z. B. Cross-Site-Scripting-Angriffe), da es einfacher ist, JSON richtig zu analysieren und zu entkommen als für ein HTML-Dokument (das Skript-Tags enthalten kann, die Java-Skript enthalten). Dies setzt voraus, dass Sie auf dem Client JSON mit einem JSON-Parser analysieren und nicht nur eine Form von eval () verwenden, die überhaupt nicht sicher ist.
Ein weiterer möglicher Vorteil besteht darin, dass Sie die Ebene "Web Framework" so gut wie eliminieren können. Anstelle von ASP, JSP, Django, Zend oder was auch immer benötigen Sie wirklich nur eine dünne Schicht, um JSON von Ihrem Client auf Ihren Server zu übertragen. Zumindest könnten Sie dieses Teil auf trivial einfache Weise zwischen Frameworks portieren, wenn Sie möchten. Dadurch kann ein großes bewegliches Teil aus Ihrer Anwendung entfernt werden.
Ich denke, Verschlüsselung und Validierung funktionieren in beiden Fällen grundsätzlich genauso. Ich denke, wenn Sie eine API haben, werden Sie sich eher daran erinnern, dem Client nicht zu vertrauen, als wenn Sie eine Webseite haben, da Sie möglicherweise vergessen, dass Angreifer keinen Browser als Client verwenden müssen, sondern Ihnen Header senden können , Parameter abfragen und Daten veröffentlichen, die sie möchten. Dies ist jedoch eher ein psychologisches als ein technisches Problem und trifft möglicherweise nicht auf Sie zu.
quelle