Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
30.09.2002, 17:16
Ornest



Hi,
ich habe in meiner Datenbank users eine Tabelle admin für meine Homepage. Ich habe in der Tabelle zwei Spalten und zwar 'username' & 'password' in denen ich zwei Werte habe, nämlich (wer hätte das gedacht) meinen Usernamen und mein Passwort. Die möchte ich jetzt abfragen und in einer Variable speichern, doch ich weiß nicht genau, wie ich das anstellen soll.

Ich will das für ein kleines Login gebrauchen.

--


Dieser Beitrag wurde am 30.09.2002 um 17:17 von Ornest bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
30.09.2002, 17:27
chriss



Quellcode:
$user_tabelle = mysql_query("SELECT * FROM admin");
$user = mysql_fetch_array($user_tabelle);

so saugt er dir den kompletten inhalt der tabelle admin und speichert es in der var $user

du kannst jetzt also mit
$user[name] den username und mit
$user[pw] das pw ausgeben...
(du musst das kursiv gedruckte durch deinen spalten namen ersetzten)
und

--


Dieser Beitrag wurde am 30.09.2002 um 17:29 von NoX bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
30.09.2002, 17:31
K-Putt



Verbindung
$connection=mysql_connect_db("ip","admin", "passwort");

Datenbank wählen
$db=mysql_select_db("users");

Die Abfrage
$abfrage="SELECT * FROM admin";

Dann query
$query=mysql_query($abfrage);

Die schleife die die Daten von der Tabelle in 2 Variablen schreibt
while($row=mysql_fetch_object($query))
{
$username=$row->username;
$userpass=$row->userpass;
}

Das ganze funktioniert nur, wenn ein Name und ein Passwort in der Tabelle eingetragen sind.

[edit]
Meine Lösung ist zwar nicht so "profesionell" wie die von Nox, sollte aber trotzdem funktionieren. Eben nur solagen nur ein Admin vorhanden ist, bei mehreren gehts anders.

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database


Dieser Beitrag wurde am 30.09.2002 um 17:32 von K-Putt bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
30.09.2002, 17:42
Ornest



Ok, thx erstmal

--

zum Seitenanfang zum Seitenende Profil || Suche
004
30.09.2002, 17:43
chriss



erm, ich bin jetzt davon ausgegangen das die connection zur db schon steht ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
005
30.09.2002, 17:56
Ornest



Klappt wunderbar ... ich danke euch :)

--

zum Seitenanfang zum Seitenende Profil || Suche
006
30.09.2002, 18:10
apfelkorn



das ist ein schlechter ansatz, das ganze in eine Variable zu saugen, weil es überaus einfach ist, das dann zu leechen. Mach es besser so, wie ich im XPortal:

Quellcode:
function adm_login( $sUsername, $sPassword )
{
   global $aDB, $oDB, $sSession;

   $rUserID = $oDB->Query( 'SELECT ID FROM pxp_' . $aDB['key'] . '_adm_user WHERE Name=\'' . $sUsername . '\' && Password=\'' . md5($sPassword) . '\'' );

   if( !$oDB->NumRows( $rUserID ) )
   {
      return false;
   }
   else
   {
      srand( microtime() * 1000000 );
      $iID = $oDB->Result( $rUserID, 0, 0 );
      $sSession = md5( uniqid( rand() ) );
      $iExpire = time() + 60 * 30;
      $sIP = getVar( 'REMOTE_ADDR', 'S' );

      $oDB->Query( 'DELETE FROM pxp_' . $aDB['key'] . '_adm_session WHERE UserID=\'' . $iID . '\'' );
      $oDB->Query( 'INSERT INTO pxp_' . $aDB['key'] . '_adm_session (UserID, Session, Expire, IP) VALUES (\'' . $iID . '\', \'' . $sSession . '\', \'' . $iExpire . '\', \'' . $sIP . '\')' );

      setVar( 'session', $sSession, 'U' );
      return true;
   }
}

Kurze analyse, was dort passiert: $sUsername und $sPassword enthalten die Daten, die der Client zum anmelden angegeben hat. Dann wird über die Datenbank der Datensatz selektiert, bei dem der username übereinstimmt und das gecryptete (md5 sei dank) Passwort mit dem in der Tabelle übereinstimmt. Wenn der keinen selektieren konnte, gibts ein false zurück, was später weiter behandelt werden kann, wenn es richtig war, wird erst alle vorherigen LogIns von diesem Benutzer gelöscht, dann der Benutzer eingeloggt, d.h. in die Tabelle Sessions eingetragen mit IP, Auslaufzeitpunkt und Absolut einzigartiger SessionID, die nur für diese Session gilt. Dann gibt die Funktion true zurück. Im Fall vom Portal wird dann noch die Variable session in den Temporären Speicher (ist immun gegen "register_globals on") gesetzt, die nachher wieder zum Client übertragen wird und der die Variable Session später weiter benutzt. Aber was dann?

Quellcode:
function adm_check_login( $session )
{
   global $aDB, $oDB;

   $oDB->Query( 'DELETE FROM pxp_' . $aDB['key'] . '_adm_session WHERE Expire<\'' . time() . '\'' );
   $rUserID = $oDB->Query( 'SELECT UserID FROM pxp_' . $aDB['key'] . '_adm_session WHERE Session=\'' . $session . '\' && IP=\'' . getVar( 'REMOTE_ADDR', 'S' ) . '\'' );
    
   if( !$oDB->NumRows( $rUserID ) )
   {
      return NULL;
   }
   else
   {
      $iExpire = time() + 60 * 30;
      $iUserID = $oDB->Result( $rUserID, 0, 0 );
      $oDB->Query( 'UPDATE pxp_' . $aDB['key'] . '_adm_session SET Expire=\'' . $iExpire . '\' WHERE UserID=\'' . $iUserID . '\'' );
      $rUser = $oDB->Query( 'SELECT ID, Name, Level FROM pxp_' . $aDB['key'] . '_adm_user WHERE ID=\'' . $iUserID . '\'' );
      return $oDB->FetchArray( $rUser );
   }
}

Zuerst werden alle Datensätze gelöscht, bei denen die Session schon abgelaufen ist. Dann wird nach der SessionID in Verbindung mit der IP gesucht, und sollte dies ein Ergebnis zurück geben, dann wird erst die Expire-Zeit vorgesetzt, dann der Datensatz mit dem Benutzer aus der Tabelle Users (nicht Session) mit der ausgelesenen UserID ausgelesen und in eine Variable gelesen, die zurückgegeben wird, zur Weiterverarbeitung. Eigentlich ganz einfach, oder?

Beim ausloggen musst du nur aus der Tabelle die SessionID löschen und die Variable Session ungültig machen.

--

zum Seitenanfang zum Seitenende Profil || Suche
007
01.10.2002, 13:27
Ornest



O_o
Erstmal danke für die ausführliche Erklärung, aber ganz so weit bin ich nun auch wieder nicht *g*. Spiele halt gerade ein Bisschen mit Logins und Newsscripten usw rum.

--

zum Seitenanfang zum Seitenende Profil || Suche
008
26.11.2002, 06:55
e-freak



@apfelkorn
des is ja aber alles ganz schön, aber was bitte nutzt es dir, das soooo umständlich zu machen? wenn man die pw coded in die tabelle schreibt dann dürfte das ne Zeit dauern bis man die wieder encoded hat! - ich glaub die mühe würde sich keiner machen, der es auf die Seite abgesehen hat, da kann man ja gleich ne bruce machen!-
Ansonsten aber vom Prinzip net schlecht, bloß ist glaub ich etwas zu sicher/anfällig

@k-put
das könnte auch einen fehler geben, weil du liest alle Zeilen der Tabelle aus, und lässt sie dann durch das fetch_objekt dann in ne variable schreiben, aber meiner ansicht nach, ist diese variable nicht eindeutig weil wenn die tabelle vier zeilen schreib er auch alle in die variablen!

naja dann cul8r

--

zum Seitenanfang zum Seitenende Profil || Suche
009
26.11.2002, 10:48
K-Putt



@efreak: Das ist jetzt ne weile her, da war ich noch ziemlich am anfang von php und datenbanken (30.9.).

Mittlerweile hab ich andere Methoden für ein Login-Script, die sicher ist.

btw: Wenn du das Password per md5($password); verschlüsselst und dann in die db schreibst, kann keiner mehr auf das originale passwort schließen.
MD5 kann nicht rückgängig gemacht werden.

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
010
26.11.2002, 15:21
CN



hm ich habs so gemacht:

eingabe felder
pw und name

dann wird das password rausgesucht bei dem der username mit name übereinstimmt (pseudocode: password from where username=$_POST[username])

dann if(md5($_POST[name])==mysqL_query(... pw feld ..))

das feld in der tabelle is dann auchn md5hash

--

zum Seitenanfang zum Seitenende Profil || Suche
011
26.11.2002, 15:40
K-Putt



Quellcode:
$connection=mysql_connect($data->mysqlserver, $data->mysqluser, $data->mysqlpassword);
$db=mysql_select_db($data->mysqldbname);

$abfrage="SELECT * FROM table WHERE username='$username'";
$query=mysql_query($abfrage);

$row=mysql_fetch_object($query);

//Verschlüsseltes Passwort
$password_md5=md5($password);

if($row->password!=$password_md5)
{
      if($row->username=="")
      {
           echo "<font face="verdana" size="2" color="white">";
           die("Der Benutzer "".$username."" existiert nicht!");
           echo "</font>";
      }
      else
      {
           echo "<font face="verdana" size="2" color="white">";
           die("Das Password für den Benutzer "".$row->username."" ist falsch!");
           echo "</font>";
      }
}
        
mysql_close($connection);

So hab ichs jetzt, $password kommt aus ner Input Box, wird in nen md5hash konvertiert, dann mit dem Passwort aus der Db verlichen.

Ob der Username existiert wird vorher irgendwo getestet ;)

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database


Dieser Beitrag wurde am 26.11.2002 um 15:42 von K-Putt bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
26.11.2002, 16:44
e-freak



@k-put
sicher kann es nicht rückgängig gemacht werden! aber es ist auf keinen Fall absolut sicher!!! Weil ne 100% Verschlüsselung gibt es net! Wenn einer viel zu viel Zeit hat und sich 3-4 Jährchen Zeit nimmt, denk ich mal das er dann die Codierung rausfinden kann *g*

--

zum Seitenanfang zum Seitenende Profil || Suche
013
26.11.2002, 17:25
Megge



für einen ottonormal user reicht md5 längstens

--

zum Seitenanfang zum Seitenende Profil || Suche
014
26.11.2002, 17:31
CN



Zitat:
Weil ne 100% Verschlüsselung gibt es net!
nichts is 100% sicher
aber darum gehts ja nicht
ein md5hash kriegt man wenn schon dann nur mit ausprobieren raus
und dafür reichen keine 3-4 jährchen...

--

zum Seitenanfang zum Seitenende Profil || Suche
015
26.11.2002, 17:32
[RMen]OneStone



Es gibt eine 100% verschlüsselung, solange der Key nur einmal benutzt wird: One-Time-Pads.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
016
26.11.2002, 18:38
CN



ein md5hash is auch zu 100% verschlüsselt...

--

zum Seitenanfang zum Seitenende Profil || Suche
017
27.11.2002, 17:07
e-freak



@CN
also, es geht nicht darum ob es 100%tig verschlüsselt ist sondern das es nicht 100% sicher ist weil es nichts 100%tig sicheres gibt (max. 99,99999...%)

--

zum Seitenanfang zum Seitenende Profil || Suche
018
27.11.2002, 21:31
CN



e-freak
ich weiss was onestone meinte
aber damit jeder das versteht soll der herr profi-coder aka herr ich-schreib-tuts-obwohl-ich-keine-ahnung-davon-hab (bezogen auf euer code4me-team und dessen phptuts.. )aka ich-geh-mit-14-zur-uni aka ich-hab-ne-klasse-übersprungen .. etc etc seine gedankengänge mal anständig formulieren
wenns nicht zuviel verlangt ist

und des weiteren gibt es nur eine rein theoretische wahrscheinlichkeit dass man sowas rauskriegt
es dauert viel zu lange.. ausser man schaffts durch zufall direkt beim ersten mal :D

--


Dieser Beitrag wurde am 27.11.2002 um 21:32 von CN bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
019
30.11.2002, 22:51
[HUI]-Tiger-



ich hab das schon versucht, und solange die passwörter länger als 8 Zeichen sind dauert es einfach viel zu lange bis er das richtige gefunden hat. Ich habe nicht alle ASCII-Codes berücksichtigt, sondern nur buchstaben und die wichtigsten sonderzeichen...Alleine bei dreistelligem zeugs lag die berechnungszeit über 30 sek. <--- da hat mein php dann aufgehört. weiss jemand wo man das umstellen kann ?

--

.-.-.-.
cya Tiger

zum Seitenanfang zum Seitenende Profil || Suche
020
30.11.2002, 23:07
Megge



in der php.ini

--

zum Seitenanfang zum Seitenende Profil || Suche
021
01.12.2002, 00:24
Master Pegasus



mit set_time_limit()

--

Was immer auch geschieht: Nie sollt Ihr so tief sinken, von dem Kakao, durch den man Euch zieht, auch noch zu trinken! -- Erich Kästner

zum Seitenanfang zum Seitenende Profil || Suche
022
01.12.2002, 10:22
[RMen]OneStone



CN: ? - da fällt mir dann echt nix mehr zu ein...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche