---
title: "kryptering osv..säkerhetmässig hjlp behövs"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/155646-kryptering-osv-säkerhetmässig-hjlp-behövs"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Tulork"
published: "2007-01-07T13:38:33.000Z"
updated: "2007-01-11T21:19:39.000Z"
replies: 25
views: 1401
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/155646-kryptering-osv-säkerhetmässig-hjlp-behövs"
---

# kryptering osv..säkerhetmässig hjlp behövs

_Sida 1 av 2._

## #1 — Tulork, 2007-01-07T13:38Z

Jag har skrivit ihop ett litet login skript med en admin sida, allting är väldigt rått än så länge, men jag behöver lite hjälp med säkerheten, vill att ni påpekar vad jag kan göra bättre!

Framförallt vill jag skydda lösenorden, så en md5 kryptering hade varit super vid överföring utav lösenord osv..

så här ser koden ut idag.

**index.php**

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

include "conn.php"; // Databasanslutningen

// Inloggning
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);
  
  // Hittades inte användarnamn och lösenord
  // skicka till formulär med felmeddelande
  if (mysql_num_rows($result) == 0){
    header("Location: index.php?badlogin=");
    exit;
  }
  
  // Sätt sessionen med unikt index
  $_SESSION['sess_id'] = mysql_result($result, 0, 'id');
  $_SESSION['sess_user'] = $_POST['user'];
  header("Location: admin.php");
  exit;
}

// Utloggning
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>
<?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";
  }
  
?>
<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>

<?php

} else {

  echo "<a href=\"index.php?logout=\">Logga ut</a>\n";

}

?>
</body>
</html>
```

**Admin.php**

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

// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
?>

<html>
<head>
<!--
.style4{
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 9px;
}
.style6{
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 9px; font-weight:bold;
}
-->
</style>
</head>

<body>
<span class="style6">Administrations funktioner</span><br>

<span class="style4"><a href="welcome.php">Lägg till en användare</a><br>
<a href="remove.php">Ta bort en användare</a></span>
</body>
</html>
```

**welcome.php**

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

// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
?>
<?php
session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen

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)
            VALUES('{$_POST['user']}', '{$_POST['passwd']}', '{$_POST['name']}')";
    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";

?>
<!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="<?=$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="<?=$back[2] ?>"></td>
</tr>

<tr>
<td>E-postadress</td>
<td><input type="text" name="email" value="<?=$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>
```

**remove.php**

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

// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
?>

<?php

include "conn.php";

// Performing SQL query
$query = 'SELECT * FROM members';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<table>\n";
echo "<p>ID User Pass Name<p>";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";

// Free resultset
mysql_free_result($result);

if (isset ($_POST ['submit'])){
$delete = $_POST['delete'];
$sql = mysql_query("DELETE  FROM members WHERE id = '$delete'");
}
?>

<br><form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="delete"> Vilket id vill du ta bort</label>
<input type="text" name="delete" />
<input type="submit" name="submit" value="skicka"/>

</form>
```

conn.php är databaskopplingen.

Permalänk: https://www.webforum.nu/p/155646

## #2 — spango, 2007-01-07T14:08Z

Vill du skydda lösenorden är SSL det enda raka.

Permalänk: https://www.webforum.nu/p/1918550

## #3 — Tulork, 2007-01-07T15:08Z

ok, men jag tror det blir md5..men jag vet inte riktigt hur md5() ska ligga, var de ska ligga osv...

Permalänk: https://www.webforum.nu/p/1918572

## #4 — Pedda, 2007-01-07T15:14Z

index.php
AND pass='{md5($\_POST\['passwd'\])}'";

Kom ihåg att du måste lägga in lösenordet med md5 när det registreras också.

Sen ska du kontrollera alla fält så dom innehåller tillåtna tecken för att minska risken för sql injections.
Om servern inte har magic_quotes_gpc påslagen bör du även köra addslashes på indata och stripslashes på utdata.

/red
Att skaffa certifikat och köra ssl känns som överkurs om det inte handlar om mycket känslig information som lagras i databasen.

Permalänk: https://www.webforum.nu/p/1918573

## #5 — GunnarD, 2007-01-07T15:22Z

Detta skyddar inte lösenordet vid överföring mellan webläsaren och webservern.

Antingen får du göra det mha javascript innan webläsaren skickar lösenordet eller använda SSL, SSL är att föredra.

Permalänk: https://www.webforum.nu/p/1918577

## #6 — Tulork, 2007-01-07T15:35Z

> **Pedda skrev:**
>
> index.php
> AND pass='{md5($\_POST\['passwd'\])}'";
> 
> Kom ihåg att du måste lägga in lösenordet med md5 när det registreras också.
> 
> Sen ska du kontrollera alla fält så dom innehåller tillåtna tecken för att minska risken för sql injections.
> Om servern inte har magic_quotes_gpc påslagen bör du även köra addslashes på indata och stripslashes på utdata.
> 
> /red
> Att skaffa certifikat och köra ssl känns som överkurs om det inte handlar om mycket känslig information som lagras i databasen.

testade lägga till det du skrev, fick som innan när jag provade 

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/local/www/apache22/data/Grej/index.php on line 13

Permalänk: https://www.webforum.nu/p/1918582

## #7 — spango, 2007-01-07T17:00Z

Jag och oskob diskuterade hashning av lösenord innan de skickas över nätet i [en annan tråd](http://www.webforum.nu/showthread.php?t=151728), och där kom vi fram till att det faktiskt inte höjer säkerheten på applikationen nämnvärt. Har man att göra med någon som paketsniffar kommer de ändå kunna använda hashen de sniffar upp för att logga in.

Permalänk: https://www.webforum.nu/p/1918599

## #8 — Tulork, 2007-01-07T17:29Z

jo jag inser det, och har själv testat sniffa upp lösen med och utan md5..inte så stor skillnad, men det är åt den kunden jag utvecklar detta  till jag vill göra det åt..även om det inte hjälper, så är det en sak man laggt extra tid på, låter bra med kryptering och det skadar inte koden, dessutom visar man att man laggt ner tid och sådant, vilket kan löna sig vid framtida jobb..

Permalänk: https://www.webforum.nu/p/1918607

## #9 — Pedda, 2007-01-07T17:30Z

Tulork - Ser ingen orsak till att du får parse error. Ligger funktion db_escape i conn.php?

Spango och GunnarD - Självklart är det bättre att köra SSL. Beror ju helt på hur publik inloggningen är om det är någon överhängande risk för sniffare.

Permalänk: https://www.webforum.nu/p/1918609

## #10 — Tulork, 2007-01-07T17:58Z

> **Pedda skrev:**
>
> Tulork - Ser ingen orsak till att du får parse error. Ligger funktion db_escape i conn.php?
> 
> Spango och GunnarD - Självklart är det bättre att köra SSL. Beror ju helt på hur publik inloggningen är om det är någon överhängande risk för sniffare.

aa det gör den

```

function db_escape ($post)
{
   if (is_string($post)) {
     if (get_magic_quotes_gpc()) {
        $post = stripslashes($post);
     }
     return mysql_real_escape_string($post);
   }
   
   foreach ($post as $key => $val) {
      $post[$key] = db_escape($val);
   }
   
   return $post;
}
```

Permalänk: https://www.webforum.nu/p/1918621

## #11 — GunnarD, 2007-01-07T18:07Z

> **Pedda skrev:**
>
> Spango och GunnarD - Självklart är det bättre att köra SSL. Beror ju helt på hur publik inloggningen är om det är någon överhängande risk för sniffare.

Bara så att du är medveten om att om du genererar MD5 hash i php innan du lägger in lösenordet i databasen eller när du kontrollerar lösenordet mot ett som redan finns så transporteras lösenordet i klartext mellan webläsaren och webservern.

Så det skyddar mot att någon kan läsa lösenorden från databasen men skyddar inte mot sniffning av lösenorden eller att lösenorden lagras i klartext i ex. en proxy på vägen.

Permalänk: https://www.webforum.nu/p/1918625

## #12 — Tulork, 2007-01-07T19:24Z

men hur får jag rätt på md5 nu då, får fortfarande det felmeddelandet..har testat på massa olika sätt.

Permalänk: https://www.webforum.nu/p/1918648

## #13 — Pedda, 2007-01-07T20:43Z

Testade koden till index.php fast utan att köra include på conn.php och det funkade.
När får du felkoden? Kontrollera även conn.php

Permalänk: https://www.webforum.nu/p/1918664

## #14 — Tulork, 2007-01-07T20:57Z

får felet på line 13 i index..dvs där md5 är skrivet..samma fel får jag även på registrerings sidan...

Permalänk: https://www.webforum.nu/p/1918668

## #15 — Pedda, 2007-01-07T21:34Z

Testa att ta bort ' i sql-satsen

```php
$sql = "SELECT id FROM members
         WHERE user={$_POST['user']}
         AND pass={md5($_POST['passwd'])}";
```

Permalänk: https://www.webforum.nu/p/1918679

## #16 — spango, 2007-01-08T08:39Z

> **Tulork skrev:**
>
> även om det inte hjälper, så är det en sak man laggt extra tid på, låter bra med kryptering och det skadar inte koden, dessutom visar man att man laggt ner tid och sådant, vilket kan löna sig vid framtida jobb..

Som potentiell kund skulle jag nog snarare känna mig en aning tveksam över att anlita någon som lägger ner tid på att göra något som inte löser problemet, men men.

Permalänk: https://www.webforum.nu/p/1918732

## #17 — Tulork, 2007-01-08T09:22Z

nej, det löser inte problemet, och det är lätt att hitta informationen om man vet vart man ska leta..men md5 är bättre än ingenting i mina ögon då det skyddar åt ena hållet och det är dessutom inte något som tar så speciellt lång tid eller är krångligt..det är bara det att det spökar lite för mig nu av någon anledning...att använda ssh är både dyrt och knepigt.

Permalänk: https://www.webforum.nu/p/1918752

## #18 — tydal, 2007-01-08T09:37Z

Att använda ssl är inte dyrt, det finns gratis precis som det mesta annat. Att använda det är heller inte knepigt, man bara gör allt som vanligt. Däremot behöver det ju installeras på servern och konfigureras, men när det är fixat behöver man inte göra något mer.

Permalänk: https://www.webforum.nu/p/1918756

## #19 — Tulork, 2007-01-08T09:51Z

det är just server confen jag e orolig för..men vi släpper shh så länge, vill få igång md5 först o testa lite random hakkning på det... igår sniffa jag upp lösen o användare från en inloggning...5min tog det att hitta...om man vet vart man ska leta. vill kolla lite på md5 igen, va ett tag sen jag gjorde det sist.

Permalänk: https://www.webforum.nu/p/1918760

## #20 — tydal, 2007-01-08T10:04Z

Du kommer kunna sniffa upp lösen och användare lika snabbt om du kör MD5. Som redan nämnts några gånger ingår det inte i MD5:s arbetsuppgifter utan det är SSL:s funktionalitet du efterlyser.

Permalänk: https://www.webforum.nu/p/1918773

---

Tråden på webben: https://www.webforum.nu/amne/php/155646-kryptering-osv-säkerhetmässig-hjlp-behövs  
Nästa sida: https://www.webforum.nu/amne/php/155646-kryptering-osv-säkerhetmässig-hjlp-behövs/page2.md
