Benutzer authentifizieren ohne Passwort

Hookah

Erfahrenes Mitglied
Guten Morgen,

Ich möchte einen kleinen Chat Service anbieten.
Dazu haben ich einen NodeJs Server geschrieben
welcher die Nachrichten an die richtigen Personen weiterleitet.

Der Webseitenbetreiber hat die Möglichkeit 'Channel' anzulegen.
Auf der Webseite muss ein Javascript eingebunden werden
das ein Objekt bereitstellt:

Code:
function myChat()
{
	var host = window.location.host; 
	var devId = null; 

	...

	this.init = function(did)
	{
		if(!devId)
			devId = did;
	};

	this.sendMessage = function(channelName,msg)
	{
		send(channelName,msg,host,devId);
	};

}

Jetz prüfe ich auf der Serverseite ob der bei send() angegebene Channel
auch dem Webseitenbetreiber mit User ID devId gehört und ob
die beim Channel erstellen angegebene Webseiten URL
gleich dem Host window.location.host ist.

(myChat.init() soll bei window.onload ausgeführt werden.)

Ist das der Fall geht die Message durch und wird an alle Clients im selben
Channel verschickt.

Damit möchte ich unterbinden das man sich von fremden Seiten
in den Chat einklinken und mitlesen kann.

Jetzt frage ich mich ob das so überhaupt sicher ist.

Ich habe mal aufgegriffen, dass Variablen in einem Objekt, wenn sie das Muster var x = x;
haben, nicht von ausserhalb des Objektes geändert werden können.

Stimmt das ?

Man kann ja auch eigene Script per Adresszeile ausführen und
ich bin mir da nicht sicher ob das eine gute Lösung für mein Problem ist.

Gibt es eine andere/bessere/sichere Lösung?
Gibt es überhaupt eine sichere Lösung?

Ich habe die Befürchtung das man die variablen host und devId
so ändern kann das man auch von fremden Seiten aus
schreiben und lesen kann.

Warum eine Passwortabfrage nicht möglich ist, ist denk ich klar -
man könnte das Passwort aus dem Javascript entnehmen.


Ich danke schonmal im Vorraus für Vor- und Ratschläge
und wünsche einen guten Morgen.
 
Ohne serverseitigen Code seitens der Betreiber der anderen Webseiten wird das nicht funktionieren. Diese müssten einen geheimen Schlüssel haben, um damit das Skript zu signieren. Wie genau das dann laufen würde, müsste man prüfen.

Hier ein proof of concept, um deinen jetzigen Mechanismus auszuhebeln:

Javascript:
Object.prototype.__defineGetter__.call(window.location, 'host', function() {
    return 'www.google.de';
});

console.log(window.location.host);
 
Zuletzt bearbeitet:
Wenn du ein kleinen Chat einbinden willst, würde ich das über XMPP realisieren.

Weither geholt ist das so ähnlich wie IRC. Wenn du ein Server hast, kannst du so ein XMPP Server installieren und privatisieren und auch Online nutzen.

Als Server empfehle ich dir den XMPP eJabberd Server. Ich habe eJabberd privat auf einer Linux-Maschine laufen.

Der Chat von Facebook ist mit einen XMPP-Server realisiert.

Mit private meine ich den XMPP Server, damit keiner in meine ChatLobby kann und nicht das ich es lokal laufen habe.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück