Jump to content
php.lv forumi

logina kods


Genesis

Recommended Posts

Sveiki.. :)

Uzrakstiju kodu kurš smuki darbojas, bet ticu ka nav īpaši drošs. Tā kā ūber iemaņas nav iekš php, tad varbūt kāds var pateikt kā varu uzlabot savu skriptu, lai palielinātu tā drošumu. :)

 

 

<?php
if (isset($_POST['Login']))
{
	$username = trim($_POST['username']);
	$password = trim($_POST['password']);
	$password = sha1($password);
	$query = "SELECT UserID, Username, Password, is_admin ";
	$query .= "FROM users ";
	$query .= "WHERE Username = '{$username}' ";
	$query .= "AND Password = '{$password}' ";
	$query .= "LIMIT 1";
	$result_set = mysql_query($query);
	if (mysql_num_rows($result_set) == 1)
		{
			$found_user = mysql_fetch_array($result_set);
			$_SESSION['UserID'] = $found_user['UserID'];
			$_SESSION['Username'] = $found_user['Username'];
			$_SESSION['is_admin'] = $found_user['is_admin'];
			setcookie("UserID","{$_SESSION['UserID']}",time()+3600*24*3);
			setcookie("Username","{$_SESSION['Username']}",time()+3600*24*3);	

		}
	if ($found_user['is_admin']=1 )
		{
			redirect_to("admin/admin.php");
		}		
}
?>

Link to comment
Share on other sites

Tā, pirmais ko pamanīju - netiek nodrošināta aizsardzība pret sql injekciju.

Visus mainīgos ko bāz kvērijā, vajag eskeipot ar mysql_real_escape_string() funkciju.

 

Otrais, kam tev vēl vajadzīgi kūkiji, ja izmanto sesijas?

 

Trešais, varētu uztaisīt papildus sesijas mainīgo kurš saturētu, teiksim, md5($_SERVER['REMOTE_ADDR'] . $_SERVER['user_agent'])

Un katru reizi pārbaudīt, vai tā konkrētā sesijas mainīgā vertība sakrīt ar reālajiem datiem.

Tas tādam gadījumam, ja kāds nosper sesijas identifikatoru, tu pārbaudi un secini ka nesakrīt ip vai user_agent un neļauj autorizēties atkārtoti...

if($logged_in){
if(md5($ip . $user_agent) != $_SESSION['user_hash']){
//sesija zagta
logout();
}
}

Edited by briedis
Link to comment
Share on other sites

Neesmu nekāds profs bet manējais skatījums ir šāds:

 

1. Lai logina kods būtu drošs, vajag taisīt tā lai skriptus velk no ārējiem failiem un/vai direktorijām un sakomplektē vienā failā;

2. Nevajag lietot kaukadas funkcijas kas pa taisno parsē datus jo ir iespejama sql injekcija (datus datubāzē vajag glabāt kā kodētus ([md5]);

3. Submit pogu likt kur aizies formas izpildāmā darbība (action) kā piemēram ?op=log ne (fails.php) un lai dati tiek pārbaudīti ar skriptiem, kuri ir komplektēti index.php failā;

4. Un galu galā, jo sarežģītāk izdomāsi jo labāk.......

Edited by MCWeb.lv
Link to comment
Share on other sites

Neesmu nekāds profs bet manējais skatījums ir šāds:

 

1. Lai logina kods būtu drošs, vajag taisīt tā lai skriptus velk no ārējiem failiem un/vai direktorijām un sakomplektē vienā failā;

2. Nevajag lietot kaukadas funkcijas kas pa taisno parsē datus jo ir iespejama sql injekcija;

3. Submit pogu likt kā ?op=log un lai dati tiek pārbaudīti ar skriptiem, kuri ir komplektēti index.php failā;

4. Datus datubāzē vajag glabāt kā kodētus ([md5]);

4. Un galu galā, jo sarežģītāk izdomāsi jo labāk........

 

1. - Nepiekritīšu. Ja kods nav drošs, tad to nepasargās fakts, ka viņš būs izmetāts pa vairākiem failiem un galu galā inklūdots vienā failā.

2. - Nesapratu? Kas ir funkcijas, kas "pa taisno pārsē"? Vienkārši vajag izmantot mysql_real_escape_string un viss būs labi :)

3. - Atkal, nesapratu? "Submit pogu likt kā ?op=log" - kas ar šo domāts? Submit poga taču ir <input type="submit" /> :)

4. - Šinī gadījumā jau tiek glabāti sha1 veidā, kas ir "stiprāks" par md5

4.(5.?:D) - Nevienmēr. Savā gudrībā arī var apmudīties un nepamanīt bīstamus caurumus

Link to comment
Share on other sites

1. - Nepiekritīšu. Ja kods nav drošs, tad to nepasargās fakts, ka viņš būs izmetāts pa vairākiem failiem un galu galā inklūdots vienā failā.

2. - Nesapratu? Kas ir funkcijas, kas "pa taisno pārsē"? Vienkārši vajag izmantot mysql_real_escape_string un viss būs labi :)

3. - Atkal, nesapratu? "Submit pogu likt kā ?op=log" - kas ar šo domāts? Submit poga taču ir <input type="submit" /> :)

4. - Šinī gadījumā jau tiek glabāti sha1 veidā, kas ir "stiprāks" par md5

4.(5.?:D) - Nevienmēr. Savā gudrībā arī var apmudīties un nepamanīt bīstamus caurumus

 

Cik cilvēku tik viedokļu :)

Link to comment
Share on other sites

nu diezvai vajadzētu pārbaudīt ip adresi, jo vairākiem lietotājiem zem viena rūtera būtu 1 adrese un piem man pārejot no vienas auditorijas uz otru mainās ip, taka tas naw nekāds vērā ņemams līdzeklis.. tai skaitā arī http_user_agent var mainīties, to gan pats izmantoju, bet ja lietotājs ir ielogojies tad pēc neveiksmīgas parbaudes nevis izdzēšs sesiju, bet piedava ievadīt paroli no jauna drošības apsvērumu dēļ. Domāju, ka lietotājs tikai priecāsies, ka par drošību vairāk parūpējies būsi, nevis metīs arā vislaik..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...