webForumDet fria alternativet

Inloggningsscript

13 svar · 964 visningar · startad av SoulGod

SoulGodMedlem sedan aug. 20051 395 inlägg
#1

Jobbar på att säkra upp mitt inloggningsscript,
och i min login_check så körs följande längst ner:

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
setcookie("inloggad", "true", time()+900);  /* expire in 15 minutes */
header("location:index.php");
}

Koden är i grunden från en tutorial ( hittar tyvärr inte originalet ),
och jag undrar, jag kan förstå varför man sparar "myusername",
eftersom man kan skicka med det för att spara vem som gjort vad...

....

1. Varför sparar man lösenordet?
2. Finns det en säkerhetsrisk med den lösningen?
3. Det sparas i sessionen , men min cookie sparas ju tidsmässigt ...
När man klickar logga ut, så körs både session_destroy och reset cookie ...
Vilket av dom 2 är bäst?
4. Finns det någon fördel med att köra den ena eller båda?

GunnarDMedlem sedan juni 20014 250 inlägg
#2
  1. Finns ingen anledning att spara ett lösenord i sessionen, om det är i klartext så läggs det i klartext på disken på servern. Behöver man komma åt lösenordet så finns det i databasen.

  2. Ja, lösenorden är i klartext i sessionsvariablerna.

  3. Sessionen har ju en cookie, varför skapa en ny cookie, enklare då att spara senast inloggad i en session variabel som du sedan kollar mot, Ett säkrare sätt eftersom infon då ligger på servern och inte i klientens webläsare.

SoulGodMedlem sedan aug. 20051 395 inlägg
#3

Okej ...
1. Lösenordet är inte i klartext, då det ligger en kryptering på det.

3. Okej , då missförstod jag det hela, då ska jag ta bort min egen cookie.

Hur bekräftar jag att session är "satt"?
För min egen cookie kör jag ju följande

if ($_COOKIE["inloggad"] == "true") {......
GunnarDMedlem sedan juni 20014 250 inlägg
#4

SoulGod skrev:

1. Lösenordet är inte i klartext, då det ligger en kryptering på det.

Ok, men det krypterade finns ju också i databasen (eller vad du nu sparar användarna någonstans), och kan hämtas därifrån vid behov.

SoulGod skrev:

Hur bekräftar jag att session är "satt"?

Bara att kontroller om session variabeln finns, finns den är man inloggad.

Jag kör denna lilla kod för att kolla om någon är inloggad (ligger först i alla filer);

session_start();
if(!isset($_SESSION['myusername'])) {
        header("location:/login.phtml");
}
SoulGodMedlem sedan aug. 20051 395 inlägg
#5

Tack för din hjälp...

Koden blev såhär till slut

<?PHP
 if(isset($_SESSION['myusername']))
    { echo "Inloggad som >> ".$_SESSION['myusername']." << <a href='login_kill.php'>[ Logga Ut ]</a>"; }
else
    { echo "<a href='login_main.php'>[ Logga In ]</a>"; }
echo "<h1>Välkommen till förstasidan</h1>";
?>

Finns det något mer jag kan göra för att säkra upp mitt loginscript så mycket som möjligt?

SjodahlMedlem sedan maj 20033 137 inlägg
#6

Det är väl aldrig fel att skydda sig emot sql injection heller om du inte redan gjort det.
(men det har väl kanske inte direkt att göra med ditt inloggningsscript)

SoulGodMedlem sedan aug. 20051 395 inlägg
#7

Finns det ett behov för SQL-injection i just inloggningsscriptet?

Även om det inte gör det, så om du har någon länk att tipsa om,
så tittar jag gärna på den ändå...

Ska bygga ut mitt login till ett mer omfattande script,
men började med själva inloggningen.

GunnarDMedlem sedan juni 20014 250 inlägg
#8

SoulGod skrev:

Finns det ett behov för SQL-injection i just inloggningsscriptet?

Beror på var du har dina användare definierade och hur du kontrollerar att det är rätt användare/lösenord.

SoulGodMedlem sedan aug. 20051 395 inlägg
#9

Mina användare ligger i databasen enligt anv / pass / ulvl ....
Jag har en stripslashes i koden, det borde väl räcka mot SQLInjc?

Koden där jag bekräftar anv / lösen ser ut såhär

<?php
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$mypassw = md5($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassw'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
header("location:index.php");
}
else {
echo "Wrong Username or Password";
}
?>

*** EDIT ***
Insåg nu att min $_SESSION['myusername'] inte är tidsbaserad...
Räcker det med session_cache_expire(10); ?

Förlåt - men lägger till ytterligare en fråga ...
Är det nödvändigt att lägga in capta ( eller liknande ) för att säkra upp ännu mer?

SoulGodMedlem sedan aug. 20051 395 inlägg
#10

Det blir en dubbelpost nu , men av någon anledning kan inte jag redigera mitt föregående inlägg...

Jag har 2 filer ( index & login_success ) som ska visa olika saker beroende på om man är inloggad ...
Men något är fel, för jag kan "alltid" komma in på login_success ...

Så jag postar all kod här, så kanske någon kan hitta felet, för jag lyckas inte =(
Index.php > http://www.copypastecode.com/54214/
Login_Check.php > http://www.copypastecode.com/54218/
Login_success.php > http://www.copypastecode.com/54222/

GunnarDMedlem sedan juni 20014 250 inlägg
#11
  1. Du har ett rätt bra skydd mot sqlinjecton.

  2. I ditt login_success.php skript så har du en } för mycket, antagligen från det bort kommenterade raden "/*if(!session_is_registered(myusername)){ */"

  3. Efter header() raden lägg in ett exit();

 if(!isset($_SESSION['myusername']))
{ header("location:login_main.php"); exit(); }

Då kommer ingen kod att köras som kommer efter om man inte är inloggad.

  1. När det gäller livslängden på en session läs här, speciellt kommentarerna: http://se.php.net/session_cache_expire
SoulGodMedlem sedan aug. 20051 395 inlägg
#12

Tackar för svaret Gunnar.
2. Tog bort denna, och ja , det kom nog från den raden.
3. Problemet kvarstår dock, jag kan gå direkt till login_sucess vilket som ..
Pröva själv > 90.230.42.13:443/functions/login_success.php <
4. Skall omedelbart bege mig dit

GunnarDMedlem sedan juni 20014 250 inlägg
#13

SoulGod skrev:

3. Problemet kvarstår dock, jag kan gå direkt till login_sucess vilket som ..
Pröva själv > 90.230.42.13:443/functions/login_success.php <

Beror på att php koden inte körs, gör man "visa källa" på den sidan så ser man din php kod vilket man inte skall göra om php koden körs.

Whoops, du hittade felet, för nu när jag kollade igen så hamnade jag på en inloggningssida. :)

SoulGodMedlem sedan aug. 20051 395 inlägg
#14

Lagomt klantigt .. det stod <? ..... kod .... ?> istället för <?PHP ... haha

Så problemet är löst. Ska nu testa session-timer grejen, så återkommer jag med svar på den också! :)

*** EDIT ***

När jag är inloggad, och väntar 15 minuter ( har satt timer till 10 minuter ) , och uppdaterar sidan (F5 på index.php),
så är jag fortfarande inloggad .... :(

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