php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.03.2009, 18:31  
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 523
fulltilt ist in Verruf geratenfulltilt ist in Verruf geraten
Standard [Erledigt] User Registrierung Pass mit Salt

Habe hier ein Loginscript für das ich eine User Registrierung erstellen muss.
Hierbei wird das Passwort mit einer Salt Funktion abgefragt und nun stehe ich auf dem Schlauch ...
Wie kann ich das beim register Script einfügen das es mit den untenstehenden Funktionen passt?

Anmeldepasswort vorbereiten
$zusatz = $datensatz['passwort_zusatz'];
$anmeldepw = md5( $passwort.$zusatz );

register.php
PHP-Code:
<form id="loginForm" name="loginForm" method="post" action="register-exec2.php">
<
h1>add new user</h1>

  <
table width="300" border="0" align="left" cellpadding="2" cellspacing="0">

    <
tr>

      <
td>Login Name </td>

      <
td><input name="benutzername" type="text" class="textfield" id="benutzername" /></td>

    </
tr>

    <
tr>

      <
td>Password</td>

      <
td><input name="passwort " type="password" class="textfield" id="passwort " /></td>

    </
tr>

    <
tr>

      <
td>Confirm Password </td>

      <
td><input name="cpassword" type="password" class="textfield" id="cpassword" /></td>

    </
tr>

    <
tr>

      <
td>&nbsp;</td>

      <
td><input type="submit" name="Submit" value="Register" /></td>

    </
tr>

  </
table>

</
form
Hier die Funktionen vom Login Script:
PHP-Code:
   1.
      
function loginUser$benutzer$passwort$conid )
   
2.
      
{
   
3.
      
// Anweisung zusammenstellen
   
4.
      $sql 
"SELECT
   5.
      `passwort_zusatz`
   6.
      FROM
   7.
      `login_profi`
   8.
      WHERE
   9.
      LOWER(`benutzername`) = '" 
.mysql_real_escape_string$benutzer ). "' AND
  10.
      `aktiviert` = 1"
;
  
11.
      
// Anweisung an DB schicken
  
12.
      $ergebnis 
mysql_query$sql$conid );
  
13.
      
// Wurde ein Datensatz gefunden, existiert dieser Benutzername, also
  
14.
      
// prüfen wir ob die Anmeldedaten korrekt ist
  
15.
      
if (mysql_num_rows($ergebnis) == 1)
  
16.
      
{
  
17.
      $datensatz 
mysql_fetch_array$ergebnis );
  
18.
      
// Resourcen freigeben
  
19.
      mysql_free_result
$ergebnis );
  
20.
      
// Anmeldepasswort vorbereiten
  
21.
      $zusatz 
$datensatz['passwort_zusatz'];
  
22.
      $anmeldepw 
md5$passwort.$zusatz );
  
23.
      
// Anweisung zusammenstellen
  
24.
      $sql 
"SELECT
  25.
      `id`, `fehlversuche`
  26.
      FROM
  27.
      `login_profi`
  28.
      WHERE
  29.
      LOWER(`benutzername`) = '" 
.mysql_real_escape_string$benutzer ). "' AND
  30.
      `passwort` = '" 
.mysql_real_escape_string$anmeldepw ). "' AND
  31.
      `aktiviert` = 1"
;
  
32.
      
// Anweisung an DB schicken
  
33.
      $ergebnis 
mysql_query$sql$conid );
  
34.
      
// Prüfen ob ein Datensatz gefunden wurde. In dem Fall stimmen die Anmeldedaten
  
35.
      
if (mysql_num_rows$ergebnis ) == 1)
  
36.
      
{
  
37.
      
// Counter für Fehlversuche resetten
  
38.
      $angriff 
mysql_fetch_array$ergebnis );
  
39.
      
if ($angriff['fehlversuche'] != 0)
  
40.
      
{
  
41.
      $sql 
"UPDATE
  42.
      `login_profi`
  43.
      SET
  44.
      `fehlversuche` = 0
  45.
      WHERE
  46.
      LOWER(`benutzername`) = '" 
.mysql_real_escape_string$benutzer ). "'
  47.
      LIMIT
  48.
      1"
;
  
49.
      mysql_query
$sql$conid );
  
50.
      
}
  
51.
      
// Resourcen freigeben
  
52.
      mysql_free_result
$ergebnis );
  
53.
      
// Korrekte Anmeldung zurückgeben
  
54.
      
return true;
  
55.
      
}
  
56.
      
else
  
57.
      
{
  
58.
      
// Das angegebene Passwort war nicht korrekt, also gehen wir von einem Angriffsversuch aus
  
59.
      
// und erhöhen den Counter der fehlerhaften Anmeldeversuche
  
60.
      $sql 
"UPDATE
  61.
      `login_profi`
  62.
      SET
  63.
      `fehlversuche` = `fehlversuche` + 1
  64.
      WHERE
  65.
      LOWER(`benutzername`) = '" 
.mysql_real_escape_string$benutzer ). "'
  66.
      LIMIT
  67.
      1"
;
  
68.
      mysql_query
$sql$conid );
  
69.
      
// Abfragen ob das Limit von 10 Fehlversuche erreicht wurde und in diesem Fall ...
  
70.
      $sql 
"SELECT
  71.
      `fehlversuche`
  72.
      FROM
  73.
      `login_profi`
  74.
      WHERE
  75.
      LOWER(`benutzername`) = '" 
.mysql_real_escape_string$benutzer ). "'";
  
76.
      $ergebnis 
mysql_query$sql$conid );
  
77.
      $anzahl 
mysql_fetch_array$ergebnis );
  
78.
      mysql_free_result
$ergebnis );
  
79.
      
// ... das Konto deaktivieren
  
80.
      
if ($anzahl['fehlversuche'] > 9)
  
81.
      
{
  
82.
      $sql 
"UPDATE
  83.
      `login_profi`
  84.
      SET
  85.
      `fehlversuche` = 0,
  86.
      `aktiviert` = 0
  87.
      WHERE
  88.
      LOWER(`benutzername`) = '" 
.mysql_real_escape_string$benutzer ). "'
  89.
      LIMIT
  90.
      1"
;
  
91.
      mysql_query
$sql$conid );
  
92.
      
}
  
93.
      
}
  
94.
      
}
  
95.
      

fulltilt ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.03.2009, 18:39  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Der Salt oder der "Passwort Zusatz" kann im Prinzip ein beliebiger zufälliger oder vom Benutzername abhängiger String sein.

Beim Registrieren erzeugst du also diesen Salt und speicherst ihn in das entsprechende Feld. Wie sich das Passwort zusammensetzt steht ja im Prinzip schon da: Dem Klartext-Passwort wird der Salt angehängt und das ganze wird mit md5 gehasht.

Wo genau liegt denn da nun dein Problem - also wo hängst du?
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 26.03.2009, 18:53  
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 523
fulltilt ist in Verruf geratenfulltilt ist in Verruf geraten
Standard

Zitat:
Zitat von agrajag Beitrag anzeigen
Wo genau liegt denn da nun dein Problem - also wo hängst du?
#edit#

habs jetzt so hinbekommen:

PHP-Code:
$login clean($_POST['benutzername']);
$password clean($_POST['passwort']);
$cpassword clean($_POST['cpassword']);
function 
generate_salt()
{
     
// Declare $salt
     
$salt '';
     for (
$i 0$i 3$i++)
     {
          
$salt .= chr(rand(35126));
     }
          return 
$salt;
}

     
$salt generate_salt();
     
$encrypted md5(md5($password).$salt);
     
$qry "INSERT INTO members(benutzername, passwort, passwort_zusatz, aktiviert ) VALUES('$login', '$encrypted', '$salt', 1)";

    
$result = @mysql_query($qry);



    
//Check whether the query was successful or not

    
if($result) {

        
header("location: register-success.php");

        exit();

    }else {

        die(
"Query failed");

    }


?> 

Geändert von fulltilt (26.03.2009 um 19:16 Uhr).
fulltilt ist offline  
Alt 26.03.2009, 19:23  
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 523
fulltilt ist in Verruf geratenfulltilt ist in Verruf geraten
Standard

Hm - der insert klappt, jedoch der Login nicht ...

der salt sieht jetzt so aus in der DB:
zY$.eOPs5W

wo kann hier der Fehler liegen?
fulltilt ist offline  
Alt 27.03.2009, 00:34  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Was macht den deine Funktion clean() ?

Im Prinzip musst du mit dem eingegebenen Usernamen Passwort und Salt aus der Tabelle ziehen, dann das eingegebene Passwort mit dem ausgelesenem Salt behandeln und dies dann mit dem gespeicherten Passwort vergleichen.
Wolla ist offline  
Alt 27.03.2009, 00:42  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

In der login-Routine steht.
Code:
$anmeldepw = md5( $passwort.$zusatz );
in deinem Registrierungs-Script steht:
Code:
$encrypted = md5(md5($password).$salt);
Es kann jetzt natürlich sein, dass die Login-Funktion nicht das Klartext-Passwort sondern schon einen md5-Hash davon übergeben wird - dann ist dein script richtig. Ansonsten muss das innere md5 weg.
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 27.03.2009, 00:45  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ein md5 vom md5 macht imho das Passwort auch nicht sicherer.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 27.03.2009, 01:26  
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 523
fulltilt ist in Verruf geratenfulltilt ist in Verruf geraten
Standard

Zitat:
Zitat von Wolla Beitrag anzeigen
Was macht den deine Funktion clean() ?
Im Prinzip musst du mit dem eingegebenen Usernamen Passwort und Salt aus der Tabelle ziehen, dann das eingegebene Passwort mit dem ausgelesenem Salt behandeln und dies dann mit dem gespeicherten Passwort vergleichen.
auch wenn ich den salt statisch setze, klappt der Login nicht:
PHP-Code:
$salt 'bBgdt5386w';
$qry "INSERT INTO members(benutzername, passwort, passwort_zusatz, aktiviert ) VALUES('$login', ' ".md5($salt.$_POST['password'])."', '$salt', 1)";

    
$result = @mysql_query($qry); 
der salt wird doch unverschlüsselt in der Tabelle abgespeichert?
fulltilt ist offline  
Alt 27.03.2009, 01:54  
Erfahrener Benutzer
 
Registriert seit: 02.02.2009
Beiträge: 523
fulltilt ist in Verruf geratenfulltilt ist in Verruf geraten
Standard

also den salt speichere ich unverschlüsselt in die Spalte passwort_zusatz ...

PHP-Code:
$salt 'bBgdt5386w';
$pass md5($password.$salt);
$qry "INSERT INTO members(benutzername, passwort, passwort_zusatz, aktiviert ) VALUES('$login', '$pass', '$salt', 1)";
$result = @mysql_query($qry); 
funktionen.php um den Login zu checken
PHP-Code:
$zusatz $datensatz['passwort_zusatz'];

$anmeldepw md5$passwort.$zusatz ); 
hat niemand mehr eine Idee ?
fulltilt ist offline  
Alt 27.03.2009, 01:55  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Fragst Du jetzt jede halbe Stunde?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Registrierte User sollen ihre Daten ändern können 54ch4 PHP Tipps 2009 17 14.03.2009 14:29
User mit PHP aus DB löschen MistaJ PHP Tipps 2008 10 01.12.2008 19:38
User erkennen (ohne session + ohne cookies + prob mit IP) PHP Tipps 2007 8 30.12.2007 23:35
Registrierung eines neuen Users über schon vorhandene PHP Tipps 2006 9 12.02.2006 15:27
mysql_connect verbindet nicht wenn user passwort hat PHP Tipps 2005-2 3 28.10.2005 15:53
Session: Untersch. Seiten f. eingeloggte User und norm. User PHP Tipps 2005-2 2 20.07.2005 12:46
[Erledigt] MySQL user rausfinden Datenbanken 4 26.05.2005 12:15
[Erledigt] PHP linux user wechseln PHP-Fortgeschrittene 12 05.12.2004 16:11
Aktuelle Anzahl eingeloggter User ermitteln? PHP Tipps 2004-2 6 02.12.2004 13:03
User intenfication ohne Cookies und User hat temporale IP fender PHP Tipps 2004-2 1 15.11.2004 17:13
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
User ID TRW PHP Tipps 2004 3 25.10.2004 22:26
User identifizieren TRW PHP Tipps 2004 1 21.10.2004 21:36
user registrierung mit leerzeichen PHP-Fortgeschrittene 8 15.10.2004 02:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php password salt, salt funktion, php passwort salt, password salt php, password salt, php salt, md5($passwort.$salt), salt-funktionen, login salt erstellen, passwort salt php, php login form salt, mysql_query where lower, login form $pass = md5($pass.$salt);, php salt nutzen, php passwort mit salt, php user mit salt, login salt, $anmelde pw = md5( $passwort.$pw zusatz );, passwort passwort_zusatz anmeldung, php passwortschutz salt

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum