Som besökare på Hamsterpaj samtycker du till användandet av s.k. cookies för att förbättra din upplevelse hos oss. Jag förstår, ta bort denna ruta!
Annons

Bekymmer att logga in med saltat lösenord

Skapad av luggen, 2008-08-11 23:49 i Webbutveckling & Programmering

654
27 inlägg
2 poäng
luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
2
Hallojs.
Nu är det följande att jag håller på uppdaterar en hemsida för att senare ev komma upp om det blir aktuellt.
På sidan kan man registrera sig och då krypteras lösenordet, här kan ni se hela kodstycket för registreringen:
Ett stycke php-kod:

<?php
session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen
include "functions.php"; // Funktioner

if (isset($_POST['submit'])){

$_POST = db_escape($_POST);

// Tag bort eventuella blanksteg i början eller slutet
foreach($_POST as $key => $val){
$_POST[$key] = trim($val);
}

//Kolla efter tomma fält
if (empty($_POST['user']) || empty($_POST['passwd']) ||
empty($_POST['name']) || empty($_POST['email'])) {
$reg_error[] = 0;
}

// Kolla om användarnamnet är upptaget
$sql = "SELECT COUNT(*) FROM members WHERE user='{$_POST['user']}'";
$result = mysql_query($sql);
if (mysql_result($result, 0) > 0) {
$reg_error[] = 1;
}

// Kolla om e-post kan tänkas vara ok
if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,6}$/', $_POST['email'])) {
$reg_error[] = 2;
}

// Kolla så att lösenorden stämmer överrens
if ($_POST['passwd'] != $_POST['passwd2']) {
$reg_error[] = 3;
}

// Inga fel? Spara och logga in samt skicka till välkomstsida
if (!isset($reg_error)) {

// Salta lösenordet
$passwd = safepass($_POST['passwd']);
$sql = "INSERT INTO members(user, pass, name, email)
VALUES('{$_POST['user']}', '$passwd', '{$_POST['name']}', '{$_POST['email']}')";
mysql_query($sql);

$_SESSION['sess_id'] = mysql_insert_id();
$_SESSION['sess_user'] = $_POST['user'];
header("Location: welcome.php");
exit;

}

} else {

// Sätt variabler för tomt formulär
for ($i=0; $i<4; $i++) {
$back[$i] = "";
}

}

$error_list[0] = "Alla fält är inte infyllda";
$error_list[1] = "Användarnamnet är upptaget";
$error_list[2] = "Felaktig e-postadress";
$error_list[3] = "Lösenorden stämmer inte överrens";

?>


I databasen så blir lösenordet krypterat och personen blir inloggad och allt är frid och fröjd.
Trodde jag då.
För när man ska logga in så får sidan för sig att användarnamnet eller lösenordet är fel, men det finns ju i databasen.

Kodstycket för inloggningen ser ut följande:
Ett stycke php-kod:

<?php
session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen
include "functions.php"; // Funktioner

// Inloggning
if (isset($_POST['submit'])){

$_POST = db_escape($_POST);

$passwd = safepass($_POST['passwd']);
$sql = "SELECT id FROM members
WHERE user='{$_POST['user']}'
AND pass='$passwd'";
$result = mysql_query($sql);

// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: inlogga.php?badlogin=");
exit;
}

// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['user'];
header("Location: welcome.php");
exit;
}

// Utloggning
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: inlogga.php");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>
<body>
<?php

// Om inte inloggad visa formulär, annars logga ut-länk
if (!isset($_SESSION['sess_user'])){

echo "<h3>Logga in</h3>\n";

// Visa felmeddelande vid felaktig inloggning
if (isset($_GET['badlogin'])){
echo "Fel användarnamn eller lösenord!<br>\n";
echo "Försök igen!\n";
}

?>


Functions.php ser ut följande:
Ett stycke php-kod:

<?php

// Sätt variabeln $password till $_POST['passwd']
$password = mysql_real_escape_string($_POST['passwd']);

function safepass($password)
{
// Sätt variabeln $username till $_POST['user']
$username = mysql_real_escape_string($_POST['user']);


// Statiskt salt som innehåller
// krångliga tecken
$salt = "aöC;Ma.ca0920´xc+aaa_:AX>LZO>JZF/*-+";

// Kryptera användarnamn+salt till
// ett dynamiskt lösenord som är
// olika för varje användare även
// om flera har samma lösenord
$dynSalt = sha1($username.$password.$salt);

// Kryptera den dynamiska salten
// en extra gång med sha1
return sha1($dynSalt);

}
?>


Är det någon som kan förklara för mig varför den säger att användaren inte finns?
Jag antar att det är något med att den inte okrypterar lösenordet eller något sånt, är osäker då det känns som att jag håller på stirra mig bild på en massa tecken bara.

Alla som besöker mig kan räkna med att bli attackerad!

Är reklamen ivägen? Logga in eller registrera dig så försvinner den!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till Nattefrost [Gå till post]:
Lösenordet som krypteras när användaren logga in blir inte samma som det var när det sparades.

Men användaren kommer ju inte in alls för att den antagligen inte hämtar lösenordet som är krypterat i databasen på rätt sätt och det är det jag vill komma underfund med vad som är fel.

Eller har jag helt och hållet missförstått vad du menar nu?


Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till indiepop [Gå till post]:

Vart ser du tecken som ö?

Databasen är rätt då användarna blir registrerade i den och lösenordet är rätt då jag gjorde 4 olika användare och försökte logga in. Alla hade i databasen olika krypteringar för lösenorden.

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till Nattefrost [Gå till post]:

Men det är liksom det jag vill komma underfund med, vad är det jag måste ändra för att den ska hämta lösenordet och vart är det jag ska ändra, jag är inte helt hundra på detta område. Jag har suttit och försökt jämföra med det inloggningssystem jag hade förut men det ser inte alls ut som detta så jag blir bara förvirrad när jag försöker jämföra 5 olika filer, två från det gamla systemet och 3 för det nya.


Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till indiepop [Gå till post]:

Aha där, hmm, bra fråga, tror det inte ska spela någon roll.


Någon annan kanske kan svara på om det är felet?

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till Nattefrost [Gå till post]:

Vart skulle du rekommendera att det skulle in i så fall?

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0
Svar till _datan_ [Gå till post]:

Tackar så mycket =)
Ska testa på en gång =)

Edit: Det statiska saltet, det kan se ut hur som helst eller?

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till _datan_ [Gå till post]:

Okej, tackar för hjälpen, får se hur det går nu =)

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till miniyou [Gå till post]:
Det har jag bytt redan.
Dock så håller just nu en massa headers varning på att spökar så jag vet inte riktigt om det funkar som det ska.

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0
Svar till miniyou [Gå till post]:

Det den klagar på är headern i denna om man använt rätt användarnamn:
Ett stycke PHP-kod:

// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['user'];
header("Location: welcome.php");
exit;

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\conn.php:1) in C:\xampp\htdocs\inlogga.php on line 29

Och den här headern om det är fel användernamn eller lösenord:
Ett stycke php-kod:

// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0)
{
header("Location: inlogga.php?badlogin=");
exit;
}

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\conn.php:1) in C:\xampp\htdocs\inlogga.php on line 22

Koden som ska skriva ut om det är fel lösenord eller användarnamn ser ut så här:
Ett stycke php-kod:
// Om inte inloggad visa formulär, annars logga ut-länk
if (!isset($_SESSION['sess_user']))
{
echo "<h3>Logga in</h3>\n";

// Visa felmeddelande vid felaktig inloggning
if (isset($_GET['badlogin']))
{
echo "Fel användarnamn eller lösenord!<br>\n";
echo "Försök igen!\n";
}
}


Och allt detta ligger i samma php-fil.

Alla som besöker mig kan räkna med att bli attackerad!

luggen
Visningsbild
P 35 Alnö Hjälte 1 399 inlägg
Trådskapare
0

Svar till Kottizen [Gå till post]:

Kan bero på att det är den som det har framkommit tidigare eller om jag fick det per GB kanske, men ja det är det.

Alla som besöker mig kan räkna med att bli attackerad!


Forum » Datorer & IT » Webbutveckling & Programmering » Bekymmer att logga in med saltat lösenord

Ansvariga ordningsvakter:

Användare som läser i den här tråden just nu

1 utloggad

Skriv ett nytt inlägg

Hej! Innan du skriver om ett potentiellt problem så vill vi påminna dig om att du faktiskt inte är ensam. Du är inte onormal och världen kommer inte att gå under, vi lovar! Så slappna av och gilla livet i några minuter - känns det fortfarande hemskt? Skriv gärna ner dina tankar och frågor, vi älskar att hjälpa just dig!

Den här tråden är äldre än Rojks drömtjej!

Det senaste inlägget i den här tråden skrevs för över tre månader sedan. Är du säker på att du vill återuppliva diskussionen? Har du något vettigt att tillföra eller passar din fråga i en ny tråd? Onödiga återupplivningar kommer att låsas så tänk efter en extra gång!

Hjälp

Det här är en hjälpruta

Här får du korta tips och förklaringar om forumet. Välj kapitel i rullningslisten här ovanför.

Rutan uppdateras automagiskt

När du använder funktioner i forumet så visas bra tips här.


Annons
Annons
Annons
Annons