Rückgabewerte TCP

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Rückgabewerte TCP

BeitragDi, Okt 18, 2016 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hi leute ich programmiere ein login soweit so gut.

ich benutze zudem das vertex.Bnet modul

nun übermittel ich z.b. username und auch passwort am server.
wenn es den benutzer gibt und er ein account besitzt bekommt der client eine 1 zurück gesendet.

soweit so gut funktioniert fabelhaft. aber es wurde mir gesagt das man den ausgabe wert vom server her fälschen kann / können würde.

dies würde bedeuten auf dem server gibt es den account der sich versucht einzuloggen nicht. und es würde
die antwort 0 in 1 gefälscht werden.

so nun mein problem ist es ... wie kann ich es machen das der endnutzer nun nicht mehr den rückgabewert verändern kann?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Midimaster

BeitragMi, Okt 19, 2016 7:39
Antworten mit Zitat
Benutzer-Profile anzeigen
....verschoben
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Mi, Okt 19, 2016 8:51, insgesamt einmal bearbeitet
 

ohaz

BeitragMi, Okt 19, 2016 7:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war wohl der falsche Thread Midimaster.

@ eigentlicher Inhalt:

Es gibt nur Methoden um das ganze "sicherer" zu machen. Absolut wirst du das nie hin kriegen. Nutzer werden im Client immer alles ändern können. Falls du weitere Server/Client Interaktion machen willst, würde ich dir deshalb eher empfehlen beim Login auf dem Server ein unique Token aus zufälligen buchstaben und zahlenkombinationen (wie ein temporäres passwort) zu erstellen, das dem client beim erfolgreichen login zu geben und das bei server/client interaktion vom client aus immer zur authentifizierung mitschicken.

Wenn du nur auf Clientseite bist, und nur verifizieren willst ob der user eingeloggt ist kannst du da leider nichts machen. Das kann immer gefälscht werden.

Midimaster

BeitragMi, Okt 19, 2016 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
upps, brings gleich in Ordnung
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

DAK

BeitragMi, Okt 19, 2016 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich dich verstehe hast du aktuell ein folgendes Setup:

Client schickt Logindaten an Server
Server überprüft die Logindaten, und schickt dann 1 (Login geglückt) oder 0 (Login nicht geglückt) zurück.

Stimmt das ungefähr?

Willst du Sicherheit haben, dann musst du das schon vom Design des Ganzen her aufziehen. Übliche Varianten sind Folgendes:

-) Wichtige Änderungen und Eingaben gehen immer über den Server, der Client bedient nur. Der Server muss jede Eingabe auf Richtigkeit überprüfen und darf sich nicht darauf verlassen, dass der Client "gut" ist. Es kann ja jeder den Client durch einen Anderen ersetzen.
-) Geh weg von einem reinen Login sondern verwende Sessions.
Will heißen, wenn du dich einloggst, startet der Server mit dem Client eine Session. Dabei vergibt er an den Client einen Session Key, der bei jeder Anfrage mitgeschickt wird. Fehlt der Session Key oder ist er falsch, dann wird die Anfrage ignoriert.
Das behebt dein aktuelles Problem. Da würde in deinem aktuellen Fall der Client zwar glauben, dass der Login selbst durchgegangen ist, aber keine weitere Anfrage an den Server durchgehen. Damit wüsste der Client wieder, dass er ausgeloggt ist.
-) Verschlüssel die Verbindung. Ich weiß allerdings nicht, ob es für BMax ein gutes Kryptomodul gibt.
Gewinner der 6. und der 68. BlitzCodeCompo

Mathias-Kwiatkowski

BeitragMi, Okt 19, 2016 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
das klingt interessant was du erklärst, soweit is auch alles logisch nur bei einem punkt muss ich nachfragen

->Will heißen, wenn du dich einloggst, startet der Server mit dem Client eine Session.<-

das würde bedeuten das der server ein string mit keiner ahnung einer session id ect sendet und zwar am client, aber wenn man nun ein auslese tool haben würde hätte man die session id fix raus und sendet sie mit.

oder habe ich es falsch verstanden?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Jolinah

BeitragMi, Okt 19, 2016 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das kann man immer, wenn die Verbindung nicht verschlüsselt ist (entweder nur lauschen, oder den Datenverkehr sogar manipulieren, siehe https://de.wikipedia.org/wiki/...le-Angriff).

Eine Verschlüsselung ist jedoch - wie bereits erwähnt - auch nicht ein 100-prozentiger Schutz, aber - je nach Verschlüsselungsverfahren - zumindest ziemlich bis sehr sicher Wink

Wenn die Public-Keys bei einem asymmetrischen Verschlüsselungsverfahren jedoch einfach so ausgetauscht werden, besteht immer noch die Gefahr eines Man in the middle-Angriffs. Der Angreifer in der Mitte könnte für die beiden anderen Kommunikations-Partner jeweils eigene Key-Paare generieren und somit die Pakete entschlüsseln, im Klartext lesen und für den anderen Partner wieder mit dem zweiten Key-Paar verschlüsseln. Daher werden im Web-Bereich meistens Zertifikate eingesetzt, die bestätigen dass ein bestimmter Key auch zu der Zielperson gehört (oder zu einer bestimmten Domain). Und wenn so ein Zertifikat eben ungültig ist, sollte man der Verbindung nicht trauen (d.h. es könnte jemand anderes mitlauschen).

Thunder

BeitragMi, Okt 19, 2016 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Es kommt einfach komplett darauf an, was du programmierst.
Du kannst dann entsprechende Gegenmaßnahmen setzen.

Es geht nicht darum, wie du dem Client signalisierst, dass der Login korrekt war, sondern wie dein Server
z.B. auf Clients reagiert, die eigentlich nicht eingeloggt sind, aber die gleichen befehle schicken, wie eingeloggte
Clients.
Das ist eigentlich das, was DAK gesagt hat: der Server checkt an wichtigen Punkten in der Unterhaltung mit
dem Client, ob da etwas nicht stimmt. Ein Spielserver kann z.B. checken, ob sich eine Spielfigur seit dem Empfang
des letzten Datenpakets überhaupt so weit bewegt haben kann, wie der Client das angibt.

Dein Server wird also zumindest eine Tabelle über alle eingeloggten User führen müssen. Normalerweise
gibt man jedem Nutzer eine zufällige Session ID, die nur solange gültig ist, bis er sich ausloggt, oder nach einer
gewissen Zeit (in der kein Request bzgl. der Session kam) automatisch ungültig wird (z.B. 1 Stunde, = Timeout).

Und bei einem Request an den Server musst du checken, ob der User eingeloggt ist (je nach Art des Programms
kannst du dich dazu entscheiden, zu checken ob die IP gleich blieb).

Wenn irgendwas nicht passt, muss der Server den Client auffordern, sich erneut einzuloggen und darf nicht
antworten, als wäre der Client eingeloggt.

Weil du von "auslese tools" sprichst: Wenn du in einem Internet Café sitzt und dich gerade mit deinem Server
unverschlüsselt verbindest, und jemand der meinung ist, er muss den WLAN Traffic dumpen, kann er natürlich
die Session ID rauslesen. Aber dein Passwort auch.
Die Session ID ist das geringere Übel, weil sie nur ein paar Mal funktioniert (bis zum Ausloggen oder Timeout
des Users). Mit dem Passwort kann man sich immer einloggen.
Dagegen hilft nur Verschlüsselung. Am besten plus Checksumme.
Wichtig: Es reicht nicht, das Passwort vorher zu hashen und den Hash zu übertragen. Das verhindert
zwar, dass jemand den Klartext kennt, aber nicht, dass sich jemand mit diesem abgefangenen Hash einloggt.

Netzwerkprogrammierung ist leicht. Sichere Netzwerkprogrammierung nicht.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

CO2

ehemals "SirMO"

BeitragMo, Okt 24, 2016 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht noch ein kleiner Denkanstoß: Zertifikate. Verbindung via TLS (ehemals SSL), wenn es wirklich so wichtig ist, dass die Daten schwer ausgelesen bzw. bearbeitet werden können. Zertifikate kannst du meines Wissens nach für lau selbst erzeugen, wenn es darum geht, dass du zertifizierter Endpunkt wirst, musst du dich eintragen lassen. Für C gibt es da die kostenlose Library https://tls.mbed.org/. Habe damit noch nicht allzuviel zu tun gehabt, habe es mir lediglich mal angeschaut. Vielleicht hilft's.

EDIT: Was mir gerade noch einfällt: Wenn du Passworter überträgst und dich dazu entscheidest, diese vor der Übertragung zu hashen, salte sie. Andernfalls ist es relativ einfach über Rainbowtabellen den Klartext zu erhalten. Was das ist und wie das funktioniert, siehe hier: https://de.wikipedia.org/wiki/Salt_(Kryptologie).
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

DAK

BeitragDi, Okt 25, 2016 9:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau programmierst du da eigentlich? Je nach dem, was du da tust (Onlinespiel vs Banksoftware), sind verschiedene Arten von Sicherung sinnvoll. TLS/SSL ist eventuell ein Overkill, wenn du nur ein Spiel machst. Es ist hald doch viel Arbeit sowas aufzusetzen.
Gewinner der 6. und der 68. BlitzCodeCompo

Mathias-Kwiatkowski

BeitragDi, Nov 01, 2016 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry das ich zu spät antworte.

ja wenn für online game. aber für mich ist es einfach nur das wissen was ich gern erlang würde bzw durch euch habe.
wie man in gewissen situationen mit was umzugehen hat.
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

DAK

BeitragMi, Nov 02, 2016 10:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Aso, also geht's dir grad erst um Basteln und hast keinen konkreten Anwendungsfall, das ist auch ok.

Grad bei Sicherheit kommt es arg auf den konkreten Anwendungsfall an. Man kann irre viel tun, in diesem Bereich, und je nach dem, was man braucht, tut man dann. Es gibt eigene Studiengänge dazu, was man denn alles zur Sicherheit tun kann und alles davon hat Nachteile. Die größten Nachteile sind üblicherweise Performance und Arbeitszeit zum Einbauen.

Die ersten Schritte wären zuerst eine Passwortabfrage und Sessions. Beides ist recht leicht gemacht und kostet nur wenig Performance. Danach kommt Verschlüsselung. Je nach dem, was dir die Sprache oder fertige Bibliotheken bieten, ist das irgendwo zwischen trivial und schon echt komplex. In BMax rennt es tendenziell zu eher komplex.

Darüber gibt es noch dutzende verschiedene Sachen, die man machen kann, um den Verkehr sicherer, abhörsicherer und unsichtbarer zu machen. Das ist dann aber eine Wissenschaft für sich.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group