Sichere Login und Registrierungsmethode

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

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Cell.

    Sichere Login und Registrierungsmethode

    Hallo liebe VB-Community,

    ich wollte euch mal fragen was ihr mir für eine Login und Registrierungsmethode ans Herz legen würdet.
    Ich möchte, dass sich der User einen Account erstellen kann und dieser dann sofort aktiv ist.
    Bei MySQL sehe ich das Problem mit den Zugangsdaten im Code.(Gäbe es hier vielleicht eine Möglichkeit ohne Zugangsdaten im Code?)
    Was könnte ich sonst noch verwenden?

    Schon mal Danke für eure Hilfe :thumbsup:

    Grüße
    Coder9292
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Habe vor kurzem jemandem erst hier geholfen so etwas umzusetzen.
    Android App MySQL Datenbank sicherer Access

    Der Weg ist der selbe, nur das du nicht von Android arbeitest sondern von deiner Anwendung. Prinzip ist aber dasselbe.
    @jmj Danke für deine Antwort.
    Ich bin auf dem Gebiet MySQL leider ein totaler Noob :D könntest du mir das etwas genauer erläutern bzw Beispiele geben wie ich dies mit dieser PHP Api umsetze? Werde aus diesem Android Beispiel nicht ganz schlau xD

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Jo, HTTPS+PHP ist eine gute Lösung.
    Vergiss aber nicht, dass man das umgehen kann und Dein Programm ohne Anmeldung nutzen kann.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Deswegen sollte jede Aktion in Kombination mit dem Nutzeraccount stehen.

    Die GUI kann jeder sehen wie er will, ist nicht schön, aber bringt keinem was, da er ohne Auth nichts machen können sollte.
    Also gesetzt dem Fall, einer umgeht den Login.

    Dann dürfte nur anhand einer Session etwas gezogen/geladen/gespeichert/angelegt werden wenn Sie auch aufm Server nach erfolgreicher Auth existiert.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    @Trade Gäbe es noch eine andere sicherer Möglichkeit? Oder ist MySQL + PHP die beste ?

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Erläutert ist das in dem Link eigentlich schon ganz gut.

    Im Prinzip ist es halt nichts anderes als das du das MySQL Gedöns serverseitig ablaufen lässt (eben über PHP) und dann einfach im Programm diese PHP Schnittstelle steuerst.

    Jenachdem was du für ein Programm anbietest wäre es sogar sinnvoll, falls möglich, die Leistung die das Programm erbringt auch serverseitig zu verrichten und nur mit gültiger Authentifizierung rausgibst.
    Das ist aber meistens nicht so leicht möglich. Aber eine Authentifizierung mit MySQL und PHP als Schnittstelle + HTTPS ist schonmal ganz gut.
    Jetzt kann man natürlich immer noch .NET recht einfach patchen. Um es da etwas schwieriger zu machen gibts dann Obfuskatoren, die es den sogenannten Noobs schonmal etwas schwieriger macht das ganze zu patchen.
    ... und das Programm unnötig verlangsamen und verunstalten.
    Daher: Lieber Obfuskatoren weglassen. Du wirst es so oder so nie 100% sicher machen können, außer Du baust einen Webservice, wie schon gesagt.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ja zum Schutz verwende ich schon einen Obfuscator und noch ein weiteres Tool. Ich denke damit bin ich erstmal auf der sicheren Seite. Pros werden das natürlich trotzdem zerlegen können.
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Vollzitat entfernt. ~Trade
    @Trade Das ist deine persönliche Meinung. Immer dieses Schlechtgerede von Obfuskatoren. Es geht hier aber um Priorisierung.
    Entweder man verzichtet etwas auf Performance, was bei normaler Software nicht unbedingt schlimm ist (anders bei Spielen oder anderen aufwendigen Anwendungen) und hat dadurch etwas mehr Sicherheit, oder aber man braucht die Performance und verzichtet auf die Sicherheit.

    Obfuskatoren sind hier meiner Meinung nach überhaupt kein Problem, da ich 1. nicht glaube das der TE die übertriebenste Performance für seine Anwendung benötigt und 2. mehr clientseitige Sicherheit möchte. Ich sage nicht, dass das Programm damit zu 100% unpatchbar ist, ganz im Gegenteil, es ist nachwievor patchbar, und das wird es immer sein. Aber es ist schwieriger zu patchen und es hält eine gewisse Zielgruppe auf, die es ohne Obfuskator vielleicht doch geschafft hätte.

    Jetzt kann der TE selbst entscheiden, was für ihn wichtiger ist denn nur er ist derjenige der momentan weiß was seine Software für eine Software ist/werden soll und deshalb entscheiden kann was hier jetzt bevorzugt wird und was nicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()

    ich bin immer wieder erstaunt darüber , dass scheinbar alle auf mySQL und PHP setzen.

    Unabhängig von der Datenquelle.... ist ein xml Webservice bei gleicher Sicherheit im VS wesentlich einfacher zu handhaben. Davon abgesehen höre ich immer wieder das ALLE oder annähernd alle mit MySQL und PHP arbeiten.

    Ich kann nicht sagen, wie das in anderen Unternehmensstrukturen oder Privatprojekten gehandhabt wird. Ich persönlich arbeite in der Automobilindustrie. Aus Erfahrung mit einigen Automobilherstellern kann ich sagen das zumindest die alle mit MSSQL und XML Webservices zur Datenübertragung an ihre Zulieferer verwenden.
    @Cell Wie würde man soetwas umsetzen? Also einen XML Webservice? Habe davon noch nie etwas gehört ?(

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    @jmj in dem Fall bringt ihm des Obfuscaten nix... ohne https: ich starte Wireshark, ich starte das Programm -> fertig
    Mit https: ich decompile das Programm, ich suche nach Webrequest, ich setzte einen Breakpoint, ich starte das Programm -> fertig
    mit https2: werden die Parameter mit GET übergeben funktioniert Wireshark genauso.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Das mit dem Webservice ist recht einfach und angenehm.

    Da ich allerdings nicht so gut im schriftlichen erklären bin habe ich 2 Videos erstellt, die zeigen wie ein solcher Webservice erstellt wird der unter Angabe von Benutzername und Passwort die Systemzeit des Servers zurück gibt und wie er aus einer Anwendung heraus ausgeführt wird.

    Hierbei ist bitte zu beachten das im gezeigten Video nur exemplarisch Benutzername und Passwort abgefragt. Sicher ist aber anders.
    Im Normalfall sollte ein solcher Service immer über https aufgerufen werden.

    Der Vorteil ist, dass ich alles in .NET Programmieren kann, dass ich die HTML Ausgabe nicht erst Parsen muss und das ich jeden beliebigen Datentyp übergeben kann ohne groß konvertieren zu müssen.

    Erstellen eines Webservices:
    sl-softwareloesungen.de/Tutori…MeinErsterWebservice.html

    Aufruf des Webservices
    http://www.sl-softwareloesungen.de/Tutorials/WebAufruf/WebAufruf.html

    Ich hoffe, dass die Videos einigermaßen verständlich sind. Ansonsten kannst du ja fragen stellen ;)
    @Cell
    Leider sehe ich in deinen Videos leider keinerlei Sachen zum Thema Session / Session ID?

    Hier fehlen meiner Meinung nach noch viele Schritte..
    Wie man einen "Webservice" erstellt hast du demonstriert, allerdings sehr unglücklich im Thema mit Benutzer-Authentifizierung.
    HTTPS / SSL ist wie oben erwähnt eigentlich Pflicht bei sowas.

    Normale mir bekannte Vorgehensweise wäre:
    - Logindaten an Schnittstelle senden, am besten hier schon gehashed
    - Service guckt ob "login" erfolgreich seitens DB (hier ggf. noch mit nem Salt)
    - Session wird erstellt und Session ID wir ans Programm zurückgegeben (man schaue sich ggf. JSON WebToken an)
    - Programm kennt seine Session nun und verwendet diese um sich bei zukünftigen Anfragen zu authentifizieren.

    Zukünfige Requests geben dann Status-Codes über den Vorgang wieder, welche das Programm (Client) verarbeiten kann.

    Sessions sollten natürlich auch immer nach Zeitraum X ablaufen. Bekannt sind Zeiträume wie 1 Stunde, 3 Stunden, bis zu ner Woche und co. (Ist Geschmackssache wie lange).

    Das ist jedoch nur meine Erfahrung / Ansicht, konstruktive Kritik gerne gewünscht.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Clientseitiges hashen ergibt meiner Meinung nach doch auch schon mehr Sinn. 1. wird das Passwort dann nicht im Klartext durchs Netzwerk transportiert (gut mit SSL sowieso nicht aber geht ums Prinzip) und somit wird schon verhindert, das Passwörter die bei eventuell mehreren Services gleich sind (was ja durchaus viele Leute immer wieder machen), öffentlich werden.

    2. Könnte man das ganze insofern absichern, das der Hash der übers Netzwerk geht nur ein Teil vom eigentlichen Zugang ist. Man kann dann serverseitig mit Salt + Hash nochmal nen Hash drauß machen welcher dann erst den richtigen Zugang zum Benutzer identifiziert.
    @jmj Zu 2.: Kann man nicht nur, sondern muss man sogar.
    Siehe z.B. auch PBKDF2, wo die Daten ganz oft gehasht werden.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Leider sehe ich in deinen Videos leider keinerlei Sachen zum Thema Session / Session ID?

    Hier fehlen meiner Meinung nach noch viele Schritte..
    Wie man einen "Webservice" erstellt hast du demonstriert, allerdings sehr unglücklich im Thema mit Benutzer-Authentifizierung.


    Richtig der in dem Video gezeigte Webservice ist alles andere als sicher. Das habe ich aber auch dazu geschrieben.

    Es war allerdings auch nicht meine Intension eine "fertig funktionierende" Lösung zu präsentieren, sondern zu zeigen wie man einen Webservice generell aufsetzt.

    Wie die korrekte Vorgehensweise in so einem Fall ist wurde hier bereits lang und breit durchgearbeitet. Evtl. ringe ich mich irgendwann mal dazu durch eine komplette Videoreihe zu diesem Thema zu machen inklusive SSL und co. Aber wie gesagt das sollte kein fertiges Tutorial sein sondern zeigen wie einfach es ist einen Webservice aufzusetzen um sich den Umweg über PHP zu sparen