Welche Verschlüsselung, Datenbankverbindung unsicher?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Rootbob91.

    Welche Verschlüsselung, Datenbankverbindung unsicher?

    Guten Tag,

    ich bin momentan dran mir einen WebService für mein Programm zu bauen, da ich nicht mehr möchte (da es scheinbar unsicher ist) die Datenbank-Verbindung direkt vom Client (VB Programm) aus starten zu lassen.
    Wenn der User die exe dekompiliert, sieht er wenn ich Pech habe die Zugangsdaten zur DB (auch wenn ich diese nur mit lese-Rechten ausgestattet habe). Der Connection String befindet sich in den My.Settings als Verbindungszeichenfolge.

    Ich habe eine DB die mit Daten versorgt wird sowie eine laufende TCP Verbindung zum Hauptserver sozusagen.
    Die DB Verbindung werde ich dann über den Webservice realisieren, aber dann bereitet mir die TCP Verbindung noch Bauchschmerzen.

    Die übermittelten Werte sind momentan AES mit 256 bit und Key gesichert, aber wenn jmd, das Programm dekompiliert sieht er ja auch eben diese Werte.

    Ich fühle mich irgendwie nie sicher bei solchen Sachen..

    Habt ihr Tipps oder Argumente?

    Vielen Dank!

    PS: In dem WebService..
    Wie verifizierre ich, dass die Pakete über php/Post auch tatsächlich von dem jeweiligen Nutzer/Clienten kommen.
    Wer durch diverse Programme rausfindet, an welche Datei/Server die Befehle gesendet werden, könnte diese auch spaßeshalber ohne Sie zu verstehen nachmachen.

    Ein weiteres Problem wäre, dass ich mit VB verschlüsseln kann in AES... aber die Geschichte in php nicht hinbekomme.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Rootbob91“ ()

    Ja das war ich. Wie warum brauch ich ne Verschlüsselung ? Manipulation ? Daten die da durcheinander fliegen etc ?
    Oder was meinst du bitte?

    Rootbob91 schrieb:

    PS: In dem WebService..
    Wie verifizierre ich, dass die Pakete über php/Post auch tatsächlich von dem jeweiligen Nutzer/Clienten kommen.
    Wer durch diverse Programme rausfindet, an welche Datei/Server die Befehle gesendet werden, könnte diese auch spaßeshalber ohne Sie zu verstehen nachmachen.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Der TCP Server nimmt letztendlich die Befehle der Clients entgegen und kommuniziert dann mit Adminrechten mit der DB. Da könnte ich ja noch was einbauen..

    Für Aktionen wie "mit welchem Spieler bin ich befreundet" hat der Client n eigenes DB Konto was nur Lese-Rechte hat. Aber das muss ich dann nun sowieso umbauen, da ich ja jetzt den Web-Service benutze.

    Ich habe einmal die Möglichkeit die DB meines Hosters zu nehmen, oder die Lokale MS-DB Installation.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    dann lass doch den TCP-Server das auch machen. dann brauchst du keine DB-Daten im Programm und der SQL-Server muss nicht drölfzilliarden Verbindungen bedienen ;)

    Und zum Thema Verschlüsselung. Ließ dich mal in asymmetrische Verschlüselung (z.B. RSA) ein. Dieses Verfahren benutzt du um den Schlüssel der symmetrischen Verschlüsselung (z.B. AES) zu verschicken.
    Hmm.. Vlt verstehe ich dich falsch, aber Beispiel:
    3 Clients loggen sich ein - 3 Verbindungen zur DB - Beantworten - Fertig :)..

    Beim Beispiel über den TCP Kram:
    3 Clients loggen sich ein - (sind ja sowieso dann zum TCP Server verbunden) Anfrage an TCP Server - Beantworten - Fertig

    Sind doch dann eigentlich gleich viele Connections^^..?

    Von RSA habe ich schonmal gehört, aber von asymmetrischen Verschlüsselungen noch nicht^^, ich schaus mir mal an.
    Ps: Dann sollte das Problem mit dem herauskriegen wo die Scripte liegen und Fake-Anfragen gemindert sein, denn dann weiß ja nur der Server wohin es geht gelle :)!?

    Also bist du der Meinung, dass alles erstmal über den TCP Server gehen sollte und der dann weiteres macht?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Mal abgesehen davon, dass dein Spiel vermutlich nicht keine große Verbreitung finden wird, ist halt die Frage wie viele Verbindungen zur Hardware eingehen. Liegen TCP-Server und Datenbank auf dem selben System, sind halt 6 verbindungen mehr als 3. es brauch doppelt so viel "kapazität" um damit umgehen zu können. Wird aber erst ab mehreren hundert oder tausend Verbindungen interessant. Man muss sich halt sehr gut mit Threading auskennen, und dessen möglichkeiten ;)

    Und dazu das andere eben, so kennt niemand deine DB oder wo sie liegt, du kannst sie sogar vom Internet abschotten. nur der Server auf dem Selben Rechner oder im Netzwerk greift darauf zu.
    Nicht keine ;)!?

    Das kann schon sein, dass es keine große Verbreitung finden wird, aber damit lebt immerhin jeder Entwickler in jeder Hinsicht und dennoch ist es Mutmaßung ;)!

    Mit Werbung etc. kann man da schon einiges machen und n paar Stammleute habe ich schonmal.

    Im Endeffekt geht's mir ja auch um die Weiterbildung, die diversen Systeme darin mehr zu verstehen und sogar mal gemacht zu haben:
    - Friend-System
    - Spiel an sich + viele Funktionen etc.
    - Verbindungen
    - Sicherheit
    - etc...

    Ja das stimmt schon :)!

    Über die RSA-Verschlüsselung habe ich jetzt schon ein bisschen gefunden, was ich mir gleich erstmal geben werde.

    Damit das auch alles richtig in meinen Schädel kommt und die Vorteile bzw. die "Why-To-Use"-Argumente davon verstanden werden :D!
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Der Client sendet seine Authentifizierungsdaten an den Server (Hash aus Username & PW), der Server vergleicht die Daten mit dem hinterlegten Wert, wenn alles Ok ist handeln beide ein Sessiontoken aus mit dessen Hilfe sich der Client bei jedem Request verifiziert. Dazu könntest du zB eine hoch zählende Variable nehmen (jeder verifizierte Request erhöht die Zahl) oder ein Random Wert (10 Zeichen lanng) die mit dem Sessiontoken verschlüsselt und bei jedem Request mitgesendet wird.

    x Clients - y TCP Connections - 1 Datenbankverbindung (auf dem Server)
    Oh okay, daran hatte ich auch noch nicht gedacht, die Geschichte nennt sich glaube ich Handshake oder :)!?

    Müsste ich dann mal schauen wie ich das gebacken bekomme^^..

    Mit Authentifizierungsdaten meinst du aber nicht die User-spezifischen, sondern eigene die den Client authentifizieren die Anfrage an den Server senden zu dürfen?

    Ps: Dadurch das alles dann immer abgehandelt wird, also praktisch immer erst Verbindung zum TCP, dann zur DB und anschließend wieder zurück zum Client fliegt, statt zb. durch lese-Zugriff direkt auf die DB, meint ihr ggf. das ist dadurch sehr viel mehr auslastend.

    Ich meine gut, mein Testsystem hat jetzt 16GB RAM und ne 50K DSL anner Schnur, naja mal sehen wanns anfängt zu hängen xD..
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rootbob91“ ()

    Keine Ahnung wie die technisch korrekte Bezeichnung ist, hab sowas ähnliches mal implementiert um ein Webservice zu sichern und die Konsumenten zu verifizieren (hab dabei den serialisierten Payload symmetrisch Verschlüsselt und den Token dafür mit einem Pre-Shared Key ausgetauscht). Die gesamte Kommunikation asymmetrisch zu verschlüsseln halte ich jedoch für unfug, das frisst nur unnötig Ressourcen. Kannst dich aber auch an TLS (früher SSL) orientieren.
    Okay also bist du der Meinung das ich die Befehle an den Server gar nicht verschlüsseln müsste, sondern nur sichergehen müsste, dass diese von einem authentifizierten Client kommen?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Ob du die Daten verschlüsselst oder nicht ist dir überlassen, ich pers. würde mit einer symmetrischen Verschlüsselung arbeiten. Du musst den Client verifizieren und die gesendeten Daten (solltest du diese in Plaintext übertragen), sonst kann man einfach die Anfrage abfangen und eigene Werte im Namen des anderen Abschicken.
    Genau das war dann mein Bedenken, habe ja selber schon mit Wireshark und wie se nicht alle heißen gearbeitet, sowas würde ich dann meinen Usern und mir selber ziemlich ungerne antun, dass da zb. so einer ankommt der die ganze Zeit das Datenpaket "Du hast verloren" schickt und sich auf der Rangliste nach oben ballert^^..

    Dann müsste ich mir anschauen wie dieser Handshake/Verifizierung des Clienten gebaut werden könnte.

    Noch sitz ich da relativ auf dem Schlauch und müsste was überlegen.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..