Login form ip

  • C#
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von tom2000.

    Login form ip

    hi leute
    ich habe eine einfache login form die via mysql verbindet und aus der datenbank username und pw abgleicht und dann zu form2 weiterleitet
    das prob ein username gleichzeitig von mehreren personen benutzt werden , ich will das ein user nur einmal gleichzeitig mit einer ip verbinden kann



    C#-Quellcode

    1. string myConnection = "datasource=db4free.net;port=3306;username=xxxxxx;password=xxxxxxxx";
    2. MySqlConnection myConn = new MySqlConnection(myConnection);
    3. MySqlCommand SelectCommand = new MySqlCommand("select * from xxxxx.accounts where username='" + this.textBox1.Text + "' and password='" + this.textBox2.Text + "';", myConn);
    4. MySqlDataReader myReader;
    5. myConn.Open();
    6. myReader = SelectCommand.ExecuteReader();
    7. int count = 0;
    8. while (myReader.Read())
    9. {
    10. count = count + 1;
    11. }
    12. if (count == 1)
    13. {
    14. this.Hide();
    15. form2 f2 = new form2();
    16. f2.ShowDialog();
    17. }
    18. else if (count > 1)
    19. {
    20. MessageBox.Show("Access denied");
    21. }
    22. else
    23. {
    24. MessageBox.Show("wrong username and password");
    25. }
    26. myConn.Close();


    ps. ja ich weiss der login ist nicht der sicherste :D
    Stimmt, sicher ist das nicht, dass schreit schon nach vielen Problemen...
    Nicht nur wie du den SQL zusammenbaust, sondern auch dass du auf diese Art (sprich hart gecodet in deinem Programm) deine Zugangsdaten für die DB einbindest.. komm nie auf die Idee, das zu veröffentlichen;

    Es gibt viele Möglichkeiten, dass zu testen... Du kannst eine Session machen, solange eine Session noch aktiv ist, verbietest du stumpf das Anmelden des Nutzers..
    Die Session sollte aber nach XY Minuten/Stunden/Tagen von selber ablaufen, sonst kann er sich ggf. nie wieder anmelden;


    Es gibt sicherlich welche im Internet.
    Ansatzbeispiel:
    Login -> DateTime.Now (Aktuelle Zeit);
    Dieser Wert aktuallisiert sich, sofern die Session lokal aktiv ist (dh. angemeldet ist), alle 4 - 10 Minuten.
    Wenn beim Login, die Zeitspanne demzufolge >= 10 ist -> Anmeldung erlaubt, da Session abgelaufen ist.
    Wenn < 10 dann Anmelden verbieten, da jemand angemeldet ist.

    Aber ich muss dir dazu sagen, ich habe damit nicht gearbeitet, dh. wie es in der Praxis aussieht weiß ich nicht, ob es umsetzbar ist (auf dieser art)
    Ansonsten schau dir das mal an(ist jedoch für PHP):
    aktuell.de.selfhtml.org/artikel/php/loginsystem/
    ich benutze jetzt dieses script , ich habe gelesen das soll recht sicher sein oder was meint ihr
    php:

    PHP-Quellcode

    1. <?php
    2. $host="localhost"; // Der Hostname
    3. $username="root"; // Euer MySQL Username
    4. $password=""; // Euer MySQL Passwort
    5. $db_name="login"; // Der Datenbankname
    6. $tbl_name="members"; // Der Name des Tables
    7. if (!isset($_POST['usernametosend']) or !isset($_POST['passwordtosend'])) die("The username or password is missing!");
    8. // Hier verbinden wir uns mit dem Datenbankserver und selektieren die Datenbank
    9. mysql_connect("$host", "$username", "$password")or die("cannot connect");
    10. mysql_select_db("$db_name")or die("Cannot select Database");
    11. $usernametosend=$_POST['usernametosend'];
    12. $passwordtosend=$_POST['passwordtosend'];
    13. // Dies ist ein Schutz gegen allgemeine SQL Injektionen
    14. if (@get_magic_quotes_gpc())
    15. {
    16. $usernametosend = stripslashes($usernametosend);
    17. $passwordtosend = stripslashes($passwordtosend);
    18. }
    19. $usernametosend = @mysql_real_escape_string($usernametosend);
    20. $passwordtosend = @mysql_real_escape_string($passwordtosend);
    21. $sql="SELECT * FROM $tbl_name WHERE username='$usernametosend' and password='$passwordtosend'";
    22. $result=mysql_query($sql);
    23. $count=mysql_num_rows($result);
    24. @mysql_free_result($result);
    25. if($count==1)
    26. {
    27. // Hier wird unsere Session registriert und accepted
    28. $_SESSION['usernametosend'] = $usernametosend;
    29. $_SESSION['passwordtosend'] = $passwordtosend;
    30. echo("accepted");
    31. }
    32. else echo("Wrong username or password"); //Der Login ist fehlgeschlagen
    33. @mysql_close();
    34. ?>


    c:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. using System.Net;
    10. using System.IO;
    11. namespace LoginForm
    12. {
    13. public partial class Form1 : Form
    14. {
    15. public Form1()
    16. {
    17. InitializeComponent();
    18. }
    19. private void button1_Click(object sender, EventArgs e)
    20. {
    21. var request = (HttpWebRequest)WebRequest.Create("http://localhost/login/index.php");
    22. var postData = "usernametosend="+textBox1.Text;
    23. postData += "&passwordtosend=" + textBox2.Text;
    24. var data = Encoding.ASCII.GetBytes(postData);
    25. request.Method = "POST";
    26. request.ContentType = "application/x-www-form-urlencoded";
    27. request.ContentLength = data.Length;
    28. using (var stream = request.GetRequestStream())
    29. {
    30. stream.Write(data, 0, data.Length);
    31. }
    32. var response = (HttpWebResponse)request.GetResponse();
    33. var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    34. MessageBox.Show(responseString);
    35. }
    36. private void button2_Click(object sender, EventArgs e)
    37. {
    38. this.Close();
    39. }
    40. }
    41. }


    leider fehlt mir nach wie vor noch die sache das ein user nur 1x connecten kann , habe das schon mit diversen sachen versucht leider mit wenig erfolg , vll kann das ein findiger php tüftler mit einbauen

    irgendwie so müss das gehen

    PHP-Quellcode

    1. # Nun prüfen, ob Benutzer in den letzten 2 Minuten eingeloggt war
    2. $sql = "SELECT Benutzername FROM accounts_logged_in WHERE Benutzername='".mysql_real_escape_string($u, $dbcon)."' AND Passwort='".mysql_real_escape_string($pw, $dbcon)."' AND TIME_TO_SEC(TIMEDIFF(NOW(), Einloggzeit)) < 10";
    3. $result = mysql_query($sql, $dbcon);
    4. if (!$result) { die('SELECT Error in Abfrage '.$sql.':<br />' . mysql_error()); }
    5. if (mysql_num_rows($result) == 0) {
    6. # War noch nicht eingeloggt -> Nun einloggen (Alten Eintrag löschen und dann neu einfügen)
    7. $sql = "DELETE FROM accounts_logged_in WHERE Benutzername='".mysql_real_escape_string($u, $dbcon)."'";
    8. if (!mysql_query($sql, $dbcon)) { die('Delete Table Error in Abfrage '.$sql.':<br />' . mysql_error()); }
    9. $sql = "INSERT INTO accounts_logged_in(Benutzername, Passwort, Einloggzeit) VALUES('".mysql_real_escape_string($u, $dbcon)."', '".mysql_real_escape_string($pw, $dbcon)."', NOW())";
    10. if (!mysql_query($sql, $dbcon)) { die('Insert Table Error in Abfrage '.$sql.':<br />' . mysql_error()); }
    11. echo('1');return;
    12. } else {
    13. # Ist bereits eingeloggt...
    14. echo ('0');return;
    15. }