Ich richte einen socket.io-Server ein, um Socket-Anfragen zu bearbeiten. Dies läuft auf Port 1234. Dies läuft entlang einer Laravel 5.1-Anwendung. Laravel verwendet redis, um Sitzungen zu behandeln.
Ich habe viele Tutorials, um Laravel mit socket.io zu verbinden, es ist alles ziemlich geradlinig. Ich kann Nachrichten verbinden, antworten und weiterleiten, zurück in den Socket und zur Laravel-Anwendung.
Jedoch vermeidet jedes Tutorial den Auth-Teil dieses Setups. Sobald die Nachricht im Socket 1234 empfangen wurde, wie kann ich diese Nachricht an Laravel weiterleiten, während ich sicherstelle, dass die Anfrage autorisiert ist.
Idealerweise würde ich einfach die Sitzung teilen und das XSRF-Token verifizieren. Da sich die beiden Anwendungen auf unterschiedlichen Ports befinden, kann ich die Sitzung nicht direkt aufnehmen.
Gegenwärtig verwende ich einen alternativen Ansatz, der Folgendes beinhaltet:
Es funktioniert, aber ich glaube, dass es möglicherweise ein Sicherheitsloch sein könnte, weil ich nicht eigentlich _token verwende, um den Ursprung zu verifizieren.
Ich denke, Ihr Code ist richtig und vielleicht der einzige Weg, dies zu tun. Eine Session-ID wird normalerweise im Cookie gespeichert und muss irgendwann an den Server gesendet werden. Da Knoten und PHP verschiedene Sprachen sind, können sie eine Sitzung nicht direkt teilen. Sie benötigen immer einen Zwischenspeicher wie redis, mysql oder filesystem. Und natürlich eine Möglichkeit, die Sitzung abzurufen. Der Schlüssel zum Abrufen einer Sitzung ist natürlich die Session-ID.
Ein interessanter Beitrag über das Sichern von Websockets:
Er schlägt vor, einen zufällig generierten Schlüssel zu Ihrer Sitzung hinzuzufügen, den Sie überprüfen können, wenn Sie die Websocket-Verbindung herstellen.
Die Session-ID selbst ist bereits zufällig, aber diese Session-IDs sind normalerweise langlebig, so dass eine kurzlebige zufällige ID die Sicherheit erhöhen könnte. Kurzlebige sollten so kurz wie möglich sein: Lassen Sie PHP zur Datenbank hinzufügen, und sobald die Verbindung im Knoten verifiziert ist, entfernen Sie sie aus der Datenbank, damit Sie sie nicht erneut verwenden können.
Es gibt viele zusätzliche Techniken zur Sitzungsüberprüfung, wie das Überprüfen der Browserzeichenfolge oder das Fixieren einer Sitzung an einer IP-Adresse:
Ich würde diese Art von Prüfungen nicht empfehlen, da sie nicht wirklich viel zusätzliche Sicherheit bieten, sondern nur Ärger mit dem Endbenutzer.
Am wichtigsten finde ich das:
Ich hatte vor etwa einem Jahr eine gute Lösung dafür gefunden. Ich entschied mich dafür, es zu einem Modul zu machen, es ist wirklich einfach zu benutzen. hilft Ihnen, den Cookie zu bekommen, ohne ihn hart zu codieren. hilft Ihnen, diese Sitzungs-ID zu erhalten und sie von mysql und redis zu erhalten
Tags und Links php laravel laravel-5.1