Login erstellen wie(Visual Basic)?

1 Antwort

Du benötigst einen zentralen Server, zu dem die Anwendung des Nutzer Kontakt aufnimmt (Server-Client-Verbindung).

Auf dem Server sollte eine Datenbank stationiert werden, in der die Nutzerdaten gesichert werden. Zusätzlich sollte dort eine Serveranwendung liegen, die Anfragen der Clients handhabt, und Daten aus der Datenbank holt / in die Datenbank importiert. Sie muss nicht zwingend auf VB basieren.

Eine einfache Variante wäre es also, sich einen Webspace mit MySQL-DB bspw. zu beschaffen und dann die Kommunikation via HTTPS vorzunehmen. Achte in der Hinsicht darauf, dass der Webserver die Sprache unterstützt, die du nutzen möchtest. Ein IIS-Webserver bspw. könnte ASP.NET-Anwendungen (geschrieben in VB.NET) handhaben.


ToniMoto 
Beitragsersteller
 08.03.2019, 18:35

Also kann ich einfach eine Datenbank als Tabelle anlegen wo, ich dann 2Felder auswähle mit folgenden Reitern: benutzername und Passwort?

0
regex9  08.03.2019, 20:06
@ToniMoto

Ja, das würde vollkommen ausreichen.

Wenn du phpMyAdmin allerdings über localhost aufrufst, hast du den Server doch gerade bei dir lokal laufen. Das dient doch sicherlich erst einmal nur zu Testzwecken, oder soll dein Rechner da später auch als Server fungieren (der Tag und Nacht an ist)?

Das Passwort solltest du nicht in Klartext speichern, sondern berechnen lassen. Das heißt, wenn sich ein neuer Nutzer registriert, wird das Passwort mit einem individuellen Salt gehashed und dieses Ergebnis gespeichert. Wenn sich der Nutzer einloggen möchte, wird zu seinem Passwort der gleiche Hash berechnet und mit dem in der Datenbank verglichen. Nutze einen Algorithmus wie AES für die Verschlüsselung, den Salt solltest du übrigens ebenso noch in der Tabelle speichern.

0
ToniMoto 
Beitragsersteller
 09.03.2019, 00:08
@regex9

Ich hab es jetzt geschafft das es über localhost läuft. wenn ich einen namen mit Passwort angebe wird es in einer Tabelle mit php ausgespuckt :D jetzt allerdings will ich es als Server fungieren lassen. Ich habe mir einen Server bei lima-City geholt und eine neue Datenbank (mysql) in lima-City erstellt. nur ich kann sie nicht in Visual Studio einbinden..

0
regex9  09.03.2019, 00:31
@ToniMoto

Ist das notwendig? Bis auf die Verbindungsdaten ändert sich dein PHP-Skript doch nicht.

Da du nun schon so weit bist und ich es oben noch nicht geschrieben hatte: Bau es dir wie eine API auf. Die VB-Anwendung führt bspw. einen Request auf https://yourdomain/?hash=somehash aus (oder sendet den Hash nicht via URL sondern im Request Body) und die PHP-Anwendung nimmt nun die Daten entgegen, macht möglicherweise vorläufige Checks und sucht dann in der Datenbank. Das Ergebnis würde ich mir im JSON-Format zurückgeben lassen (so etwas wie:

{ success: true }

Das lässt sich in der Regel recht gut verarbeiten. Oder du setzt den HTTP Status je nach Antwort (auf 200 / 403 / ...).

0
ToniMoto 
Beitragsersteller
 09.03.2019, 00:34
@regex9

Hier ist mal mein Script (für die Localhost variante) : Imports MySql

Imports MySql.Data

Imports MySql.Data.MySqlClient

Public Class Form1

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim con As New MySqlConnection

       Dim cmd As New MySqlCommand

       Dim reader As MySqlDataReader

       con.ConnectionString = "Data Source=localhost;database=xanaxboost;UID=root;pwd="

       cmd.Connection = con

       cmd.CommandText = "INSERT INTO `users` (`id`,`benutzername`,`passwort`) VALUES (NULL,'" & TextBox1.Text & "','" & TextBox2.Text & "')"

       con.Open()

       reader = cmd.ExecuteReader()

       reader.Close()

       con.Close()

       Form2.Show()

   End Sub

0
ToniMoto 
Beitragsersteller
 09.03.2019, 00:36
@regex9

Wenn ich jetzt nur die con.ConnectionString = "Data Source=localhost;database=xanaxboost;UID=root;pwd=" Daten änder gibt es ein problem mit:  con.Open() es wird folgendes angezeigt: MySql.Data.MySqlClient.MySqlException: "Unable to connect to any of the specified MySQL hosts."

0
regex9  09.03.2019, 00:37
@ToniMoto

Die VB-Anwendung ist in deinem Fall die Client-Anwendung. Diese kommuniziert aber nicht direkt mit der Datenbank. Das wäre auch ein Sicherheitsrisiko. Stell dir vor, jemand deiner Nutzer nimmt einmal die Anwendung auseinander und liest die DB-Credentials ein, die zwingend in der Anwendung stehen müssten.

Dein VB-Anwendung schickt stattdessen HTTPS Requests an deine PHP-Webanwendung und die antwortet auf die Anfragen.

0
ToniMoto 
Beitragsersteller
 09.03.2019, 00:39
@regex9

Ich kenne mich mit dem Thema nicht all zu gut aus.. es wird für ein Schulprojekt, sprich es muss nicht wirklich extrem sicher sein. Ich muss es nur irgendwie online und nicht local hinbekommen :/

0
ToniMoto 
Beitragsersteller
 09.03.2019, 00:43
@regex9

Also sowas in der Art?

using System;

using System.IO;

using System.Net;

using System.Text;

namespace Examples.System.Net

{

    public class WebRequestGetExample

    {

        public static void Main ()

        {

            // Create a request for the URL.

            WebRequest request = WebRequest.Create ("http://www.contoso.com/default.html");

            // If required by the server, set the credentials.

            request.Credentials = CredentialCache.DefaultCredentials;

            // Get the response.

            HttpWebResponse response = (HttpWebResponse)request.GetResponse ();

            // Display the status.

            Console.WriteLine (response.StatusDescription);

            // Get the stream containing content returned by the server.

            Stream dataStream = response.GetResponseStream ();

            // Open the stream using a StreamReader for easy access.

            StreamReader reader = new StreamReader (dataStream);

            // Read the content.

            string responseFromServer = reader.ReadToEnd ();

            // Display the content.

            Console.WriteLine (responseFromServer);

            // Cleanup the streams and the response.

            reader.Close ();

            dataStream.Close ();

            response.Close ();

        }

    }

}

0
regex9  09.03.2019, 00:50
@ToniMoto

Das stimmt, macht es dir aber dennoch einfacher.

Ich kann dir mal ein kurzes Beispiel (nicht getestet) geben:

Dim responseText As String

Try
  Dim request As HttpWebRequest
  Dim requestUri Ashttp://yourdomain/?hash=somehashehashehash")

  request = DirectCast(HttpWebRequest.Create(requestUri), HttpWebRequest)

  If (request.GetResponse().ContentLength > 0) Then
    Dim reader As New StreamReader(request.GetResponse().GetResponseStream())
    responseText = Response.Write(reader.ReadToEnd())
    reader.Close();
  End If
Catch ex As WebException
  responseText = ""
End Try

Und das PHP (http://yourdomain/index.php?hash=somehash):

<?php
  if (empty($_GET["hash"]) {
    return;
  }

  $hash = $_GET["hash"];

  // connect to db and send sql request with prepared statements ...

  print $result; 

In der VB-Variable responseText wird dann das Ergebnis stehen, welches PHP auf die Seite geschrieben hat.

Bezüglich Prepared Statements findest du hier noch ein einfaches Beispiel - entweder für PDO oder für MySQLi. Welche dieser beiden Varianten du wählst, sollte einerlei sein.

0
regex9  09.03.2019, 00:58
@regex9

Ah, wie nett - GF hat mir mal wieder im Code herumgepfuscht. In Zeile 5 sollte ein Uri-Objekt erstellt werden.

Dim requestUri As New Uri("your url")  

Alles ab dem Fragezeichen in der URL ist der Querystring. Dieser besteht aus Wertepaaren, die über die URL transportiert werden. So hat dieser Querystring bspw.:

?firstname=hans&lastname=mueller&age=27

Daten für eine Person. Jedes Wertepaar wird via & getrennt, die Trennung zwischen Key und Value erfolgt mit dem Gleichheitszeichen. In PHP ist es daraufhin möglich, über das superglobale Array $_GET auf diese Daten zuzugreifen. Dafür wird der Key genutzt:

$name = $_GET["firstname"] . " " . $_GET["lastname"]; // hans mueller
$age = $_GET["age"];

Wenn die Daten im Request Body mitgeschickt werden würden, müsstest du sie mittels $_POST-Array erfragen.

0
regex9  09.03.2019, 01:00
@ToniMoto

Ich habe nochmal zwei Kommentare ergänzt, die dir hoffentlich weiterhelfen werden.

0
ToniMoto 
Beitragsersteller
 09.03.2019, 01:08
@regex9

Ich werde mich mal reinfuchsen.. hab mir grad mal die ODBC treiber installiert und im Control Panel meine php mal eingefügt. da steht wo man die Connection testen kann, Connection erfolgreich...

0
ToniMoto 
Beitragsersteller
 09.03.2019, 01:10
@regex9

Ich verstehe das nur mit dem hash nicht. gibt es keine möglichkeit ohne das mit dem hash?

0
ToniMoto 
Beitragsersteller
 09.03.2019, 01:18
@regex9

So ich habe bis jetzt den ersten teil mal eingefügt. bis zum php teil, wo genau soll ich den einfügen?

0
ToniMoto 
Beitragsersteller
 09.03.2019, 01:31
@regex9

Den Teil habe ich ohne Probleme geschafft:

Dim responseText As String

Try

  Dim request As HttpWebRequest

  Dim requestUri As New Uri("your url") 

  request = DirectCast(HttpWebRequest.Create(requestUri), HttpWebRequest)

  If (request.GetResponse().ContentLength > 0) Then

    Dim reader As New StreamReader(request.GetResponse().GetResponseStream())

    responseText = Response.Write(reader.ReadToEnd())

    reader.Close();

  End If

Catch ex As WebException

  responseText = ""

End Try

Nur jetzt komme ich leider nicht weiter!

0
regex9  09.03.2019, 01:52
@ToniMoto

Naja, wenn du einen Login schreibst, sollte dieser auch sicher sein, die Daten also verschlüsseln und sorgfältig behandeln, andernfalls ist er unnütz.

Da du doch aber mit .NET arbeitest, findet sich einiges schon vorimplementiert wieder. Schau hier für eine AES-Verschlüsselung.

Was du nun machen solltest:

  1. Wenn sich ein Nutzer neu registriert, einen Salt generieren (eine Random-Zeichenfolge)
  2. Mitsamt Salt und vom Nutzer eingegebenes Passwort eine verschlüsselte Zeichenfolge, wie du sie erhältst, wenn du die oben verlinkte Lösung wählst, generieren.
  3. Diese Zeichenfolge, den Nutzernamen und den Salt jeweils in der DB speichern.
  4. Bei Login: Mit Nutzernamen Salt und verschlüsselten Wert aus DB lesen und das vom Nutzer eingegebene Passwort verschlüsseln (wie in Punkt 2). Danach die Verschlüsselung mit der Zeichenfolge der DB vergleichen.
0
regex9  09.03.2019, 01:53
@ToniMoto

In eine index.php-Datei, die dann von dir auf deinem Lima-City-Webserver abgelegt wird.

0
regex9  09.03.2019, 02:01
@ToniMoto

Nein. Nochmals: Die Datenbank wird von deiner VB.NET-Anwendung nicht direkt angesprochen, weil das zu unsicher ist. Die Client-Anwendung übersendet weder Verbindungsdaten für die Datenbank noch irgendwelche anderen sensitiven Daten, die nicht verschlüsselt sind.

Die VB.NET-Anwendung ruft im Prinzip eine Webseite auf. Dabei übermittelt sie Informationen, die von der Webanwendung (PHP-Skript), die die Webseite generiert, genutzt werden können, um Nachforschungen anstellen zu können. Das PHP-Skript verbindet sich also mit der Datenbank und schaut nach, ob ein passender Eintrag gefunden werden kann. Dementsprechend gibt sie irgendeinen Text als Ergebnis zurück. Dieses Ergebnis kann durch die VB.NET-Verbindung via StreamReader gelesen werden.

0
regex9  09.03.2019, 02:04
@ToniMoto

Du kannst ja mal zwischenzeitlich testen, ob das schon funktioniert. Leg eine index.php-Datei auf dem Lima-Webspace ab, mit dem Inhalt:

<?php
  print "hello world";

Passe die Adresse für das Uri-Objekt (in VB) an, ergänze eine Konsolenausgabe für responseText und starte einmal deine Anwendung.

0
ToniMoto 
Beitragsersteller
 10.03.2019, 00:58
@regex9

@regex9 hey ich hab mein Programm fertig gestellt. jetzt möchte ich es veröffentlichen... nur ich möchte nicht das jeder mein "Script" sieht von Visual Studio... wie kann ich das Verschlüsseln? Also das Code wo man z.B sieht was auf dem Button gesetzt wurde etc. z.B MsgBox("Beispiel")

0
regex9  10.03.2019, 01:09
@ToniMoto

Du meinst wohl einen Obfuscator? Suche für so etwas mal bei Google nach vb.net obfuscator.

0
ToniMoto 
Beitragsersteller
 08.03.2019, 18:28

Okay ich habe mich mal kurz reingefuchst und habe mir soeben eine erstellt. Wenn ich jetzt im Browser eingebe localhost/phpMyAdmin komme ich auf eine Seite dort kann ich eine Datenbank anlegen. Kannst du mir da vllt. weiterhelfen was ich da jetzt genau machen muss? oder eventuell das ein oder andere Tutorial schicken? lg. Toni

0
ToniMoto 
Beitragsersteller
 08.03.2019, 18:20

Okay vielen dank, ich werde mir direkt mal ein Webspace mit MySQL-DB erstellen :D

0