"Maltes login" med saltade lösenord

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Nästa
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
brkkjn



Medlem i: 5367 dagar

Status: Offline



#607984
Inlägg Skrivet: 2008-10-29 10:15      Ämne: Byta lösenord Citera

Nu är amatören här igen Crying or Very sad

Jag tänkte jag skulle använda mig av lite säkrare lösenord än klartext i databasen, för det får man ju inte ha har jag förstått.

Så jag har petat lite i den här lösningen och fått till det så det funkar, men sedan skulle jag ju vara lite duktig och låta inloggad användare kunna byta lösenord. Nu händer det grejor ska jag säga.

Det går utmärkt att byta lösenord, det har jag kollat i db. Men sedan när man skall logga in igen så fungerar inte det nya lösenordet ?

Varför??? Jag använder ju samma salt som vid inloggning....förklaring finns säkert och är säkert självklar för den som vet, men jag fattar ingenting.

pass.php
PHP:
1:
 
2:
<?php
3:
session_start(); // Alltid överst på sidan
4:
 
5:
include "../conn.php"// Databasanslutningen
6:
include "../functions.php"// Funktioner
7:
 
8:
$a $_SESSION['sess_user'];
9:
 
10:
if (isset($_POST['submit'])){
11:
 
12:
  $_POST db_escape($_POST);
13:
 
14:
  // Tag bort eventuella blanksteg i början eller slutet
15:
  foreach($_POST as $key => $val){
16:
    $_POST[$key] = trim($val);
17:
  }
18:
 
19:
  //Kolla efter tomma fält
20:
  if (empty($_POST['passwd']))
21:
 {
22:
    $reg_error[] = 0;
23:
  }
24:
 
25:
  // Kolla så att lösenorden stämmer överrens
26:
  if ($_POST['passwd'] != $_POST['passwd2']) 
27:
  {
28:
    $reg_error[] = 1;
29:
  }
30:
 
31:
  // Inga fel? Spara och logga in samt skicka till välkomstsida
32:
  if (!isset($reg_error)) {
33:
 
34:
      // Salta lösenordet
35:
    $passwd safepass($_POST['passwd']);
36:
    $sql "UPDATE members SET pass='$passwd' WHERE user='$a'";
37:
    mysql_query($sql) or die("Det gick inte att byta lösenord !");
38:
 
39:
    header("Location: logout.php");
40:
    exit;
41:
 
42:
  }
43:
 
44:
} else {
45:
 
46:
  // Sätt variabler för tomt formulär
47:
  for ($i=0$i<1$i++) {
48:
    $back[$i] = "";
49:
  }
50:
 
51:
}
52:
$error_list[0] = "Alla fält är inte infyllda";
53:
$error_list[1] = "Lösenorden stämmer inte överrens";
54:
 
55:
?>
56:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
57:
<html>
58:
<head>
59:
<meta http-equiv="Content-Type"
60:
  content="text/html; charset=iso-8859-1">
61:
<title>Byta lösenord</title>
62:
</head>
63:
<body>
64:
<h3>Byta Lösenord</h3>
65:
<?php
66:
if (isset($reg_error)){
67:
 
68:
  echo "Något blev fel:<br>\n";
69:
  echo "<ul>\n";
70:
  for ($i=0$i<sizeof($reg_error); $i++) {
71:
    echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
72:
  }
73:
  echo "</ul>\n";
74:
 
75:
  $back[0] = stripslashes($_POST['user']);
76:
  $back[1] = stripslashes($_POST['name']);
77:
}
78:
?>
79:
 
80:
<form action="pass.php" method="post">
81:
<table cellspacing="3">
82:
 
83:
<tr>
84:
 
85:
<tr>
86:
<td>Lösenord:</td>
87:
<td><input type="password" name="passwd" value=""></td>
88:
</tr>
89:
 
90:
<tr>
91:
<td>Repetera lösenord:</td>
92:
<td><input type="password" name="passwd2" value=""></td>
93:
</tr>
94:
 
95:
<tr>
96:
<td colspan="2" align="center">
97:
  <input type="submit" name="submit" value="Byt Lösenord">
98:
</td>
99:
</tr>
100:
 
101:
</table>
102:
</form>
103:
 
104:
</body>
105:
</html>
106:
 
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Azreal
Administratör



Medlem i: 5159 dagar
Från: Uppsala, bor i Göteborg
Status: Offline



#607998
Inlägg Skrivet: 2008-10-29 11:48      Ämne: Citera

Kikade lite hur skriptet fungerade och den använder sig utav användarnamnet tillsammans i saltningen.

Ser inte att du gör det i pass.php.
 

_________________
Konsultation via PM, inte gratis.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
brkkjn



Medlem i: 5367 dagar

Status: Offline



#608014
Inlägg Skrivet: 2008-10-29 13:28      Ämne: Citera

Det trodde jag fanns med i filen functions.php som includas i början?
Det är ju samma fil som används när användaren registrerar sig.

functions.php
PHP:
1:
 
2:
<?php
3:
 
4:
// Sätt variabeln $password till $_POST['passwd']
5:
$password mysql_real_escape_string($_POST['passwd']);
6:
 
7:
function safepass($password)
8:
{
9:
    $username strtolower($_POST['user']);
10:
    // Sätt variabeln $username till $_POST['user']
11:
    $username mysql_real_escape_string($username);
12:
 
13:
 
14:
    // Statiskt salt som innehåller
15:
    // krångliga tecken
16:
    $salt "%&/#¤%/()=??`@";
17:
 
18:
    // Kryptera användarnamn+salt till
19:
    // ett dynamiskt lösenord som är
20:
    // olika för varje användare även
21:
    // om flera har samma lösenord
22:
    $dynSalt sha1($username.$password.$salt);
23:
 
24:
    // Kryptera den dynamiska salten
25:
    // en extra gång med sha1
26:
    return sha1($dynSalt);
27:
 
28:
 
29:
}
30:
?>
31:
 


Eller det kanske måste skickas med igen?
Blir lite osäker där nu, strtolower har jag inte använt tidigare.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Azreal
Administratör



Medlem i: 5159 dagar
Från: Uppsala, bor i Göteborg
Status: Offline



#608017
Inlägg Skrivet: 2008-10-29 13:35      Ämne: Citera

Titta i ditt formulär, där finns inget som heter 'user'.
Därför existerar inte $_POST['user'] därför blir det olika resultat.

Sen tycker jag inte den där funktionen verkar vara speciellt smart gjord.
 

_________________
Konsultation via PM, inte gratis.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
brkkjn



Medlem i: 5367 dagar

Status: Offline



#608020
Inlägg Skrivet: 2008-10-29 13:44      Ämne: Citera

Så rätt så rätt, men jag sa ju att jag var amatör, tack ska du ha Laughing

nya pass.php
PHP:
1:
 
2:
<?php
3:
session_start(); // Alltid överst på sidan
4:
 
5:
include "../conn.php"// Databasanslutningen
6:
include "../functions.php"// Funktioner
7:
 
8:
$a $_SESSION['sess_user'];
9:
 
10:
if (isset($_POST['submit'])){
11:
 
12:
  $_POST db_escape($_POST);
13:
 
14:
  // Tag bort eventuella blanksteg i början eller slutet
15:
  foreach($_POST as $key => $val){
16:
    $_POST[$key] = trim($val);
17:
  }
18:
 
19:
  //Kolla efter tomma fält
20:
  if (empty($_POST['passwd']))
21:
 {
22:
    $reg_error[] = 0;
23:
  }
24:
 
25:
  // Kolla så att lösenorden stämmer överrens
26:
  if ($_POST['passwd'] != $_POST['passwd2']) 
27:
  {
28:
    $reg_error[] = 1;
29:
  }
30:
 
31:
  // Inga fel? Spara och logga in samt skicka till välkomstsida
32:
  if (!isset($reg_error)) {
33:
 
34:
      // Salta lösenordet
35:
    $passwd safepass($_POST['passwd']);
36:
    $sql "UPDATE members SET pass='$passwd' WHERE user='$a'";
37:
    mysql_query($sql) or die("Det gick inte att byta lösenord !");
38:
 
39:
    header("Location: logout.php");
40:
    exit;
41:
 
42:
  }
43:
 
44:
} else {
45:
 
46:
  // Sätt variabler för tomt formulär
47:
  for ($i=0$i<1$i++) {
48:
    $back[$i] = "";
49:
  }
50:
 
51:
}
52:
$error_list[0] = "Alla fält är inte infyllda";
53:
$error_list[1] = "Lösenorden stämmer inte överrens";
54:
 
55:
?>
56:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
57:
<html>
58:
<head>
59:
<meta http-equiv="Content-Type"
60:
  content="text/html; charset=iso-8859-1">
61:
<title>Byta lösenord</title>
62:
</head>
63:
<body>
64:
<h3>Byta Lösenord</h3>
65:
<?php
66:
if (isset($reg_error)){
67:
 
68:
  echo "Något blev fel:<br>\n";
69:
  echo "<ul>\n";
70:
  for ($i=0$i<sizeof($reg_error); $i++) {
71:
    echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
72:
  }
73:
  echo "</ul>\n";
74:
 
75:
  $back[0] = stripslashes($_POST['user']);
76:
  $back[1] = stripslashes($_POST['name']);
77:
}
78:
?>
79:
 
80:
<form action="pass.php" method="post">
81:
<table cellspacing="3">
82:
 
83:
<tr>
84:
<td><input name="user" type="hidden" value="<?php echo $a;?>"></td>
85:
</tr>
86:
 
87:
<tr>
88:
<td>Lösenord:</td>
89:
<td><input type="password" name="passwd" value=""></td>
90:
</tr>
91:
 
92:
<tr>
93:
<td>Repetera lösenord:</td>
94:
<td><input type="password" name="passwd2" value=""></td>
95:
</tr>
96:
 
97:
<tr>
98:
<td colspan="2" align="center">
99:
  <input type="submit" name="submit" value="Byt Lösenord">
100:
</td>
101:
</tr>
102:
 
103:
</table>
104:
</form>
105:
 
106:
</body>
107:
</html>
108:
 


Men funktionen är det inte jag som gjort utan det är ju den som finns i den här tråden, vad är det för fel på den då?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
smekfis



Medlem i: 4192 dagar

Status: Offline



#609295
Inlägg Skrivet: 2008-11-05 12:27      Ämne: Thumbs up! Citera

Säkert och fint, tack!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
KeTonic



Medlem i: 3986 dagar

Status: Offline



#616267
Inlägg Skrivet: 2008-12-21 18:49      Ämne: Citera

WizKid skrev:
beepbeep: Det beror på att $_POST['passwd'] inte finns


Vad är det som orsakar detta? själva passwd ska väl användas för att man ska kunna logga in?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Novocain



Medlem i: 5472 dagar
Från: Sundsvall
Status: Offline



#617147
Inlägg Skrivet: 2008-12-29 23:55      Ämne: Citera

har kopierat alla filer från början av scriptet: men får dessa fel:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/web/domains/domains/public_html/register.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at /home/web/domains/domain/public_html/register.php:25) in /home/web/domains/domain/public_html/register.php on line 50


line 21-26:
KOD:
1:
// Kolla om användarnamnet är upptaget
2:
  $sql = "SELECT COUNT(*) FROM members WHERE user='{$_POST['user']}'";
3:
  $result = mysql_query($sql);
4:
  if (mysql_result($result, 0) > 0) {
5:
    $reg_error[] = 1;
6:
  }
7:
 
8:
 

rad 48-51
KOD:
1:
  $_SESSION['sess_id'] = mysql_insert_id();
2:
    $_SESSION['sess_user'] = $_POST['user'];
3:
    header("Location: welcome.php");
4:
    exit;
5:
 
6:
 



Någon som kan se ett omdelbart fel?
 

_________________
Domainz.se äntligen lanserad!!
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
bds



Medlem i: 4523 dagar
Från: Vallentuna
Status: Offline



#617149
Inlägg Skrivet: 2008-12-30 00:17      Ämne: Citera

or die (mysql_error()); efter din query, du får inga fel då?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
gothenburg



Medlem i: 4625 dagar
Från: Sverige
Status: Offline



#617181
Inlägg Skrivet: 2008-12-30 11:21      Ämne: Citera

du kan inte köra en 'redirect' efter HTML-kod.
header("Location: welcome.php");

Novocain skrev:
har kopierat alla filer från början av scriptet: men får dessa fel:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/web/domains/domains/public_html/register.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at /home/web/domains/domain/public_html/register.php:25) in /home/web/domains/domain/public_html/register.php on line 50
[/code]


Någon som kan se ett omdelbart fel?
 

_________________
Vem får din röst i höst? | Enkelt loginsystem | Enkelt paging-system
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Jirendi



Medlem i: 4108 dagar
Från: Sweden, Stockholm
Status: Offline



#620929
Inlägg Skrivet: 2009-01-22 21:22      Ämne: Citera

Prövade detta och använder koden helt orginal men jag får detta felmeddelande överst på sidan.

Notice: Undefined index: passwd in C:\Wampserver\www\wtest\functions.php on line 4

hur fixar jag det?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
PhpGrabben



Medlem i: 4998 dagar
Från: Västerås
Status: Offline



#621185
Inlägg Skrivet: 2009-01-24 14:36      Ämne: Citera

Jag har nu fått det och fungera efter 10 minuters tweakande och undrar hur säkert det egentligen är? Har en väldigt lång saltning och det ser onekligen säkert ut, men hur säkert är det?
Går det att dekryptera om man har koden?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Peppe L-G



Medlem i: 4643 dagar
Från: Mullsjö
Status: Offline



#621188
Inlägg Skrivet: 2009-01-24 14:55      Ämne: Citera

sha1 krypterar inte en sträng, så jag skulle bli väldigt förvånad ifall någon lyckas dekrypterar den. Dessutom så spelar det nog ingen större roll ifall den statiska saltningen är 10 eller 100 tecken lång, bara den inte består utav några få tecken.

Du kan läsa tråden Vanliga säkerhetshål och lösningar om du vill ha mer information.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
PhpGrabben



Medlem i: 4998 dagar
Från: Västerås
Status: Offline



#621189
Inlägg Skrivet: 2009-01-24 15:00      Ämne: Citera

Om någon vet vad min $salt är för något, kan dom då få ut mitt lösenord osaltat?

KOD:
1:
dd3411589d6a611dadd508e820866dc4f0df6ee7
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Peppe L-G



Medlem i: 4643 dagar
Från: Mullsjö
Status: Offline



#621191
Inlägg Skrivet: 2009-01-24 15:17      Ämne: Citera

Man kan inte dekryptera en hashad sträng, vilket betyder att man inte kan räkna ut orginalsträngen ifrån en hashad sträng, men man kan alltid gissa/testa sig fram.

Ifall du vill veta varför man saltar lösenorden så får du läsa tråden som jag länkade till.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Nästa
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic