webForumDet fria alternativet

Felaktigt användarnamn eller lösenord.

PHP

6 svar · 426 visningar · startad av Zir Tiger

Medlem sedan maj 200256 inlägg
Frågan#1

Om jag har ett inloggningsscript som ser ut på följande sätt:

<?php
	
	if(isset($mail) && isset($pass)){
		$sql="SELECT mail, pass, id, active FROM register";
	$result=mysql_query($sql);
		while($row = mysql_fetch_array($result)){
		$tom = $row["mail"];
		$ma = $row["pass"];
			if(strtolower($mail) == strtolower($tom) && strtolower($pass) == strtolower($ma)){
			if($row["active"] == "ja"){
			$komin = $row["id"];
session_register("komin");
			echo "<meta http-equiv=refresh content=\"0; url=login.php\">";
			
			}
			else {echo "Din användare finns men är inte aktiv än.";}
			}
		else{echo"<br> Du har angivit felaktig mail eller lösenord.";}
		}
		}?>

(Denna kod ser inte ut exakt som den jag använder för jag har gjort några små ändringar.)

I alla fall så blir det såhär: Om någon skriver in felaktigt så skriver sidan ut ett felmeddelande för VARJE användare som den kollar upp. Jag vill att den ska skriva ut ett om den inte hittar rätt person i basen. Samt så skriver den ut (om den hittar rätt) felmeddelanden för alla som är framför den personen i registret. Så även om man loggas in så hinner man se 4-5 "Du har angivit felaktigt..." Vilket är mäkta irriterande.

Ni får hemskt gärna optimera min kod också eftersom jag inte brukar var så bra på det. =)

Tack tack.

Medlem sedan apr. 2001762 inlägg
#2

Skippa while loopen och skriv endast:

$row = mysql_fetch_array($result);

eftersom jag antar att det bara kan vara en användare som har samma lösen/login. Och så kollar du om han hittade 1 användare eller 0 användare med

$num_rows = mysql_num_rows($result);

om det är en 0:a så fanns det ingen sådan användare.. om det är en 1:a så fanns det ju en. då är det bara göra en if-sats för att kolla det.

Medlem sedan maj 200256 inlägg
#3

Thank you. It worked fine. Är det här ett relativt säkert login system?

<?php
	
	if(isset($mail) && isset($pass)){
		$sql="SELECT mail, pass, id, active FROM register WHERE mail=\"$mail\"";
	$result=mysql_query($sql);
		$row = mysql_fetch_array($result);
		$num_rows = mysql_num_rows($result);
			if($num_rows == 1 && $row["active"] !== "nej" && $pass == $row["pass"]){
			$komin = $row["id"];
session_register("komin");
			echo "<meta http-equiv=refresh content=\"0; url=login.php\">";
			}
			elseif($num_rows == 1 && $row["active"] == "nej"){echo "Din användare finns men är inte aktiv än.";}
					else{echo"Du har angivit felaktig mail eller lösenord.";}
				}?>

Det funkar iaf precis som det ska.
Än så länge. Men om någon hittar en säkerhetsbrist så kan ni ju säga till. =)

Medlem sedan okt. 2001538 inlägg
#4

Det där med sql-injections och att ändra ' till " tycker jag mig inte se här någonstans... borde det inte kunna bli ett potentiellt säkerhetshål?

Fast jag är ju inte så jättebra på php än jag heller... men kanske någon kunnigare kan rycka in å antingen klappa mig på huvet eller slå mig på fingrarna ;)

MVH Patrik

Medlem sedan maj 200256 inlägg
#5

Jo.. Jag har ingen aning så jag hoppas väl på att nån annan kan rycka in och antingen säga om du har rätt eller fel.. =) Det MÅSTE nämligen vara säkert..

Någon?

Medlem sedan apr. 2002830 inlägg
#6

Jag tycker att det ser ok ut, har iofs aldrig arbetat med PHP sessions.. en sak jag tänkte på var bara att det att

if(isset($mail) && isset($pass))

kanske borde vara så här iställer:

if(isset($_POST['mail']) && isset($_POST['pass']))

För att göra det stabilare i framtida versioner av PHP...

// Nippe

Medlem sedan jan. 2000372 inlägg
#7

Säkert och säkert... Riktigt säkert blir det ju aldrig. Men rätt säkert lär det bli om du dessutom kollar ordentligt på varje sida efter sessionen. Sessionen i sig är ju cookie-baserad så det är ju inte världens svåraste att gå runt om man _verkligen_ vill, men det är väl inte intranätet för CIA du kodar hoppas jag? :)

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)