emtonMedlem sedan juni 200589 inlägg
Jag ska försöka få till en kryptering på min sida. Jag vet att det finns jättemånga bra inlägg här på sidan jag har läst de flesta. Men hur jag än provar och fixar så får jag inte till det.
På min första sida kommer man till en inloggning. Det finns även möjlighet att registrera sig på en sida. Jag använder MySQL databas. Jag begriper helt enkelt inte var i koden jag ska stoppa in alla md5 och så strö lite salt här och där :e. Skulle tro att jag strör lite vid sidan om. Kan någon hjälpa mig? Här är startsidan. Ska man lägga kod även i registreringssidan där användaren kan välja lösenord?
<?php
session_start();
include "conn.php";
require_once ("header_start.inc");
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
$sql = "SELECT id FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 0){
header("Location: index.php?badlogin=");
exit;
}
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['user'];
header("Location: andra.php");
exit;
}
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.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>
<p><h2>Titel kommer.</h2></p>
<?php
if (!isset($_SESSION['sess_user'])){
echo "<h3>Logga in</h3>\n";
if (isset($_GET['badlogin'])){
echo "Fel användarnamn eller lösenord!<br>\n";
echo "Försök igen!\n";
}
?>
<br>
<br>
<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
Inte medlem ?<br>
<a href="register.php">Registera dig</a>
<?php
} else {
echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
}
?>
</body>
</html>
The_HulkMedlem sedan juni 20031 937 inlägg
Var du ska stoppa in md5 och salt vid kontroll vid inloggning beror på var du stoppat in dem vid registreringen. om du inte använder MD5 och salt vid registreringen så kan du inte heller använda det vid inloggningen.
Hur ser koden ut för registreringen?
PS. Glöm inte att markera den andra tråden som löst. DS.
emtonMedlem sedan juni 200589 inlägg
The_Hulk skrev:
Var du ska stoppa in md5 och salt vid kontroll vid inloggning beror på var du stoppat in dem vid registreringen. om du inte använder MD5 och salt vid registreringen så kan du inte heller använda det vid inloggningen.
Hur ser koden ut för registreringen?
PS. Glöm inte att markera den andra tråden som löst. DS.
Tack för senast, har satt tråden som löst (y)
Här kommer registreringskoden
<?php
session_start();
require_once ("header.inc");
include "conn.php";
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)) {
$sql = "INSERT INTO members(user, pass, name, email)
VALUES('{$_POST['user']}', '{$_POST['passwd']}', '{$_POST['name']}', '{$_POST['email']}')";
mysql_query($sql);
$_SESSION['sess_id'] = mysql_insert_id();
$_SESSION['sess_user'] = $_POST['user'];
header("Location: andra.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";
?>
<!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>Registrera dig</title>
</head>
<body>
<h3>Registrera dig</h3>
<?php
if (isset($reg_error)){
echo "Något blev fel:<br>\n";
echo "<ul>\n";
for ($i=0; $i<sizeof($reg_error); $i++) {
echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
}
echo "</ul>\n";
$back[0] = stripslashes($_POST['user']);
$back[2] = stripslashes($_POST['name']);
$back[3] = stripslashes($_POST['email']);
}
?>
<form action="register.php" method="post">
<table cellspacing="3">
<tr>
<td>Användarnamn:</td>
<td><input type="text" name="user" value="<?php echo $back[0]; ?>"></td>
</tr>
<tr>
<td>Lösenord:</td>
<td><input type="password" name="passwd" value=""></td>
</tr>
<tr>
<td>Repetera lösenord:</td>
<td><input type="password" name="passwd2" value=""></td>
</tr>
<tr>
<td>Ditt namn:</td>
<td><input type="text" name="name" value="<?php echo $back[2]; ?>"></td>
</tr>
<tr>
<td>E-postadress</td>
<td><input type="text" name="email" value="<?php echo $back[3]; ?>"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="Spara dina uppgifter">
</td>
</tr>
</table>
</form>
</body>
</html>
swejedMedlem sedan mars 20101 inlägg
Jag antar att du bara vill kryptera användarens lösenord och inte hela sidan? Och sen använda det krypterade lösenordet för att dom ska kunna logga in?
Har du kollat på pear::auth? http://pear.php.net/package/Auth
Den har allt du behöver, är väldigt enkel att använda och stödjer alla databaser som du kan tänkas använda och några till...
Annars så ska du byta ut följande i registreringskoden (mina ändringar i fetstil):
$sql = "INSERT INTO members(user, pass, name, email)
VALUES('{$_POST['user']}', '{$_POST['passwd']}', '{$_POST['name']}', '{$_POST['email']}')";
mot
$sql = "INSERT INTO members(user, pass, name, email)
VALUES('{$_POST['user']}', '[B]md5([/B]{$_POST['passwd']}[B])[/B]', '{$_POST['name']}', '{$_POST['email']}')";
Då kommer lösenordet att sparas krypterat i databasen.
Sen måste du använda md5 när du ska testa lösenordet också, ändra följande i din inloggningssida:
$sql = "SELECT id FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
mot
$sql = "SELECT id FROM members
WHERE user='{$_POST['user']}'
AND pass='[B]md5([/B]{$_POST['passwd']}[B])[/B]'";
Sen gillar jag mysql_fetch_object bättre än mysql_result: http://se2.php.net/mysql_fetch_object
Jag tycker att det är mycket smidigare att jobba med, både enklare att läsa och mindre att skriva :)