webForumDet fria alternativet

Hur skyddar man lösenordet i en databasuppkoppling?

PHP

7 svar · 327 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Hej!

Jag håller på och lär mig PHP. När man anropar en databas så gör man ju det med ett anrop som kan se ut så här:

$conn = @mysql_connect($server, $user, $pword)
		or die("Databaskopplingen EJ initierad!");
	print("<b>Databaskopplingen upprättad!</b><br><br>");
	return $conn;

Min fråga är hur gör man normalt sett med användarnamnet och lösenordet i conn-strängen. Man vill ju aldrig att någon ska kunna ta sig in i login.php i mitt fall och se exakt vad användarnamnet och lösenordet är? Hur brukar man lösa detta?

Min tanke var att man lagrar conn-strängen i en fil utanför www-rooten och inkluderar den sedan i login.php. Är den skyddad då? :)

Medlem sedan nov. 20041 740 inlägg
#2

Min tanke var att man lagrar conn-strängen i en fil utanför www-rooten och inkluderar den sedan i login.php. Är den skyddad då?

Ja, det duger gott. Du kanske vill nollställa variablerna efteråt också ($user, $pword).

Medlem sedan apr. 20041 597 inlägg
#3

Du kanske vill nollställa variablerna efteråt också ($user, $pword).

Hur menar du då att nollställa? Att jag nollställer variablerna i login.php?

Medlem sedan mars 20033 686 inlägg
#4

Han menar väl att det som skrevs i formen har du lagt i en variabel ($user, $pass) och att dessa skall tömmas. Så fattade jag det, av hans inlägg och av din kod. :)

Medlem sedan apr. 20041 597 inlägg
#5

Han menar att jag tömmar variabeln $_POST[] efter att jag plocklat ut username och password och validerat dessa mot databasen? :)

Medlem sedan juni 20008 205 inlägg
#6

Nej, han menar att du kanske vill nollställa variablerna efteråt också ($user, $pword) - alltså, efter att de använts.

$conn = @mysql_connect($server, $user, $pword)
	or die("Databaskopplingen EJ initierad!");
$user = NULL;
$pword = NULL;
print("<b>Databaskopplingen upprättad!</b><br><br>");
return $conn;

Annars kan (teoretiskt sett) säkerhetsluckor på annat håll ge möjlighet att skriva ut lösenordet till webbläsaren. Tänk dig t.ex. att du har en template någonstans, där följande kod smygs in utan att du märker det:

<!-- <?= "u = $user, p = $pword" ?> -->

Användarnamn och lösenord för databasen skrivs då ut utan att någon ser det, förutom de som vet var de ska titta. Med lite otur (eller rättare sagt, med dålig kod som använder eval) går det att förse script med sån här kod från klientsidan, vilket naturligtvis inte är bra.

Är $user och $pword lokala för en funktion behöver man dock inte göra på detta sätt.

Medlem sedan sep. 20011 086 inlägg
#7

Det kanske är bättre att använda unset($user, $pword);

Medlem sedan apr. 20041 597 inlägg
#8

Tack för era kloka synpunkter! :) Nu förstår jag hur ni menade tidigare!

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