webForumDet fria alternativet

enkel men säker inloggning

PHPur PHP

10 svar · 1 169 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Hej!

Ska göra en enkel inloggnings-funktion åt en kund.

Jag vill att när användaren har loggat in så skall nånå sorts "bevis" lagras i ett session-objekt så att personen kan navigera runt på sidan utan att hela tiden behöva logga in sig på vissa sidor.

Det ska finnas två olika typer av inloggade medlemmar:

  1. vanliga användare som bara kan läsa informationen

och

  1. admins som har rättighet till att lägga till/ändra/ta bort produkter.

Hur enkelt är det att kapa en session-objekt och luska ut innehåller ur den?
Jag hade tänkt mig att enbart lagra användarid, användar-typen(admin eller user) i session-objektet.

Om dessa två objekt hittas i sessionen så är medlemmen inloggad.

Jag är dock inte säker på att detta är ett bra sätt. Bör jag även lagra lösenordet i session-objektet och varje gång användaren besöker en skyddad sida så skall den sidan kontrollera att både lösenord och userid stämmer. Givetvis skall lödenordet vara krypterat.

Följdfråga blir då att hur krypterar jag lösenordet? Hur skall kontrollen dekryptera lösenordet för att kontrollera det mot databasens innehåll?

Kan man på nåt sätt skapa fake-sessions som då innehåller userid och på så sätt kringgå kontrollen ifall jag enbart kör med userid i session-objektet?

Tack för ordet.

Medlem sedan dec. 2002258 inlägg
#2

Ett enkelt sätt kan vara att spara användarens IP-nummer i sessionen och matcha det hela tiden som en check.
Byts IP:et men det är samma session så har sessionen mot all förmodan blivit kapad...

Medlem sedan juni 20006 031 inlägg
#3

Det är ju bara adminsidorna som du behöver kolla rättigheterna på och då är ju sessions ett utmärkt val.
Man fyller i namn och lösen, dessa kollas och om de stämmer så sätts en session. Tycker inte att du behöver spara lösenordet i en session och kolla så det stämmer hela tiden. Risken för en sessionkapning är ju inte så stor.

När du sparar ett lösenord i databasen så kör du md5() på det först.
Innan du kontrollerar ett lösenord så måste du köra md5.
t.ex

if (isset($_POST['submit'])){ 
  $pass = md5($_POST['passwd']);
  $sql = "SELECT id FROM members WHERE user='{$_POST['user']}' AND pass='$pass'"; 
  $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: login.php?badlogin="); 
    exit; 
  } 
  
  // Sätt sessionen med unikt index 
  $_SESSION['sess_id'] = mysql_result($result, 0); 
  $_SESSION['sess_user'] = $_POST['user']; 
  header("Location: welcome.php"); 
  exit; 
}
Medlem sedan nov. 2001274 inlägg
#4

...och om man vill göra det ännu finare så använder man mysql:s inbyggda funktion password() istället för md5(). :)

Medlem sedan maj 20012 237 inlägg
#5

Tack!

Det där med md5() kanske är en bra idé.
Fats det vore nog kanske roligare om MySql sköter det själv, men båda sätten är nog bra.

Medlem sedan aug. 20002 975 inlägg
#6

Bäckman skrev:

...och om man vill göra det ännu finare så använder man mysql:s inbyggda funktion password() istället för md5(). :)

MySQL skrev:

Note: The PASSWORD() function is used by the authentication system in MySQL Server, you should not use it in your own applications. For that purpose, use MD5() or SHA1() instead.

http://dev.mysql.com/doc/mysql/en/Encryption_functions.html

Medlem sedan maj 20012 237 inlägg
#7

ok!

Medlem sedan nov. 2001274 inlägg
#8

Där lärde man sig något nytt. Tack Matte. :stud

Medlem sedan juni 2000162 inlägg
#9

Läste era mycket intressanta inlägg angående bra inloggning och säkerhetskontroll. Jag har hitintills kört med cookies som sätts vid inloggning och för varje sida kontrolleras att kakorna är identiska med uppgifterna i databasen. Är det bättre/säkrare/snabbare att använda sessions? Går sessions att kapa lättare än mina kontroller mot databasen kanske???

Medlem sedan mars 20034 471 inlägg
#10

Kosse skrev:

... Jag har hitintills kört med cookies som sätts vid inloggning och för varje sida kontrolleras att kakorna är identiska med uppgifterna i databasen. Är det bättre/säkrare/snabbare att använda sessions? Går sessions att kapa lättare än mina kontroller mot databasen kanske???

Om jag har förstått det rätt är sessioner mycket lättare att få säkert. Innehållet i en cookie kan läsas från klientens sida, medan en session inte kan läsas annat än av servern. Således är det lättare att bygga en säker inloggning mha av sessions än cookies.

tydal gav ett väldigt utförligt svar angående vad som krävs för säker inloggning med cookies för ett tag sedan. Jag ska se om jag hittar det... Se detta och framförallt detta inlägg. Dessutom står det en del om jämförelsen mellan cookies & databas kontra sessioner i Inloggning - bra och dåligt med olika idéer.

En del att läsa, men bra och pedagogiska svar.

Medlem sedan juni 2000162 inlägg
#11

Tack, nu känner jag att jag fått mer kött på benen!

139 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)