webForumDet fria alternativet

Kryptering

3 svar · 627 visningar · startad av emton

emtonMedlem sedan juni 200589 inlägg
#1

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&auml;ndarnamn eller l&ouml;senord!<br>\n";
    echo "F&ouml;rs&ouml;k igen!\n";
  }
  
?>
<br>
<br>
<form action="index.php" method="post">
Anv&auml;ndarnamn:<br>
<input type="text" name="user"><br>
L&ouml;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
#2

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
#3

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&auml;lt &auml;r inte infyllda";
$error_list[1] = "Användarnamnet &auml;r upptaget";
$error_list[2] = "Felaktig e-postadress";
$error_list[3] = "L&ouml;senorden st&auml;mmer inte &ouml;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&auml;ndarnamn:</td>
<td><input type="text" name="user" value="<?php echo $back[0]; ?>"></td>
</tr>
 
<tr>
<td>L&ouml;senord:</td>
<td><input type="password" name="passwd" value=""></td>
</tr>
 
<tr>
<td>Repetera l&ouml;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
#4

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 :)

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb