Jump to content
php.lv forumi

Login sistēma


vitao.web

Recommended Posts

Sveiki Forumieši!

 

Esmu sācis veidot logina sistēmu ar lietotāju līmeņiem/pakāpēm. Jāsaka ka neesmu ticis diezko tālu, jo esmu apstājies pie reģistrācijas. Problēma tāda, ka nezinu, kas man jādara, lai Lietotājam automātiski tiktu piešķirta pakāpe piemēram 1? Un ja ir kāda kļūda arī reģistrācija pasakiet uzreiz.

 

mans sql:

CREATE TABLE `lietotaji` (
`id` INT( 25 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`lietotajs` VARCHAR( 65 ) NOT NULL ,
`parole` VARCHAR( 32 ) NOT NULL ,
`epasts` VARCHAR( 255 ) NOT NULL ,
`liemenis` VARCHAR( 40 ) NOT NULL
) ENGINE = MYISAM ;

 

Tagad reģistrācija:

<?php
if(!empty($_POST['lietotajs']) && !empty($_POST['parole']))
{
$leitotajs = mysql_real_escape_string($_POST['lietotajs']);
   $parole = md5(mysql_real_escape_string($_POST['parole']));
   $epasts = mysql_real_escape_string($_POST['epasts']);

 $parbaudalietotaju = mysql_query("SELECT * FROM lietotaji WHERE lietotajs = '".$lietotajs."'");

    if(mysql_num_rows($parbaudalietotaju) == 1)
    {
    	echo "<h1>Kluda</h1>";
       echo "<p>Sis lietotajvards jau eksiste. Ludzu izvelies citu!</p>";
    }
    else
    {
    	$registerquery = mysql_query("INSERT INTO lietotaji (lietotajs, Parole, epasts) VALUES('".$lietotajs."', '".$parole."', '".$epasts."')");
       if($registerquery)
       {
       	echo "<h1>Apsveicu</h1>";
       	echo "<p>Tavs profils tika veiksmigi izveidots. Ludzu<a href=\"index.php\">Ielogjies</a>.</p>";
       }
       else
       {
    		echo "<h1>Kluda</h1>";
       	echo "<p>Ludzu sac visu no sakuma.</p>";
       }
    }
}
else
{
?>

  <h1>Registreties</h1>

  <p>Ludzu ievadi savus datus lai registretos.</p>

<form method="post" action="register.php" name="registerform" id="registerform">
<fieldset>
	  <p>
	    <label for="lietotajs">Lietotājvārds</label>
	    <br />
        </label>
	    <input type="text" name="ulietotajs" id="lietotajs" /><br />
	    <label for="parole">Parole</label><br />
	    <input type="password" name="parole" id="parole" /><br />
	    <label for="epasts">Ēpasts</label><br />
	    <input name="epasts" type="text" id="empasts" /><br />
	    <input type="submit" name="register" id="register" value="Reģistrēties" />
     </p>
   </fieldset>
</form>

  <?php
}
?>

 

 

 

Paldies par palīdzību

Link to comment
Share on other sites

VNk :D

 

$liemenis = "1"; 

 

un

 

        $registerquery = mysql_query("INSERT INTO lietotaji (lietotajs, parole, epasts, liemenis) VALUES('".$lietotajs."', '".$parole."', '".$epasts."', '".$liemenis."')");
       if($registerquery)

 

šitais ir pats vienkāršākais veids, un piemēram lietotaji ar limeni 1 buus prosta users, bet ar 2 buus admini.

Link to comment
Share on other sites

Paskaties (ja neesi to darījis) šo tēmu:

http://php.lv/f/topic/10115-lietotaju-pakapes/

tur bija kaut kas idejiski ļoti līdzīgs.

Komentāri par uzrakstīto kodu:

Tabulā limenis būtu jāveido kā INT nevis VARCHAR lauks.

#5 $parole = md5(mysql_real_escape_string($_POST['parole']));

nevajag to mysql_escape_string() iekš md5()

 

 

#8 $parbaudalietotaju = mysql_query("SELECT * FROM lietotaji WHERE lietotajs = '".$lietotajs."'");

pareizāk būtu:

$parbaudalietotaju = mysql_query("SELECT count(id) AS skaits FROM lietotaji WHERE lietotajs = '".$lietotajs."'");

un tad attiecīgi - ja šī 'skaits' vērtība ir lielāka par nulli (nevis vienāda ar viens bet gan lielāka par nulli!), tad teikt, ka tāds lietotājs jau eksistē. Un ja jau reiz WHERE nosacījumā ir lauks lietotajs, tad vajadzētu noindeksēt tabulu arī pēc šī lauka.

 

 

#10 if(mysql_num_rows($parbaudalietotaju) == 1)

Te tātad pārbaudam vai rezultāta kolonna 'skaits' ir lielāka par 0. Kas vainas pārbaudei == 1? Nekas, ja esi 100% pārliecināts, ka kāds neiemānīs vēl kādu identisku lietotājvārdu (tas ir iespējams, jo unikalitāte tiek pieprasīta tikai no id lauka)

 

 

#18 if($registerquery)

Šajā vietā labāk izmantot mysql_affected_rows()

 

 

 

44-48 ulietotajs??? empasts???

Link to comment
Share on other sites

Nesen devu norādi uz šo projektu:

http://phpgacl.sourceforge.net/

Varbūt ir vērts palasīt tā dokumentāciju:

http://phpgacl.sourceforge.net/manual.pdf

Tur ļoti skaisti viss (par piekļuves tiesību organizēšanu) aprakstīts :)

 

Pirmajā norādē, ko devu iepriekšējā atbildē, manuprāt, arī gana sīki ar vismaz diviem piemēriem bija izskaidrota viena piekļuves tiesību piešķiršanas/kontroles metode.

 

To, kā piereģistrēt lietotāju jau ±esi uzrakstījis.

Link to comment
Share on other sites

Nu paldies par info!

 

Vakar ari nettuts+ atradu šādas tādas pamācības. Nu ko būs pa šo nakti jāizdomā un jāizveido kaut kas no tā visa, kas priekš manis ir derīgs. Un tā lai pašam interesanti pamācīties :)

 

Jautājums par drošibu:

$salt = ‘qtKNEtEnGyXl9GAVhORVc2WkeGYL4Rfl4NSiQ2uaVLq4OQtSKpd69pHwMnQA7Er’;
sha1($password . $salt);

 

Tātad vai šis ir labs veids un vai tomēr md5 likt tā sha1 vietā? Bet cik lasīju tad sha1 esot nedaudz atrāks kā md5 :)

Link to comment
Share on other sites

hei, man ari radies jautājums.

Piemēram, ja man ir mans algoritms, kā es es pārveidoju paroles: sasālu hašoju, utt.. vai ir jēga to paroles pārveidošanu pārlieku sarežģīt, ja piemēram `ļaundaris` zin to, kā es viņas pārveidoju un mistiski ieguvis paroles no db? :?

Link to comment
Share on other sites

Parolēm labāk ir tikai hash funkcijas.. nav jēgas no encryip, jo ja jau tika klāt DB, tad tiks arī login.php klāt.

 

Nav teikts, DB klāt var tikt caur kādu injekciju... php failiem klāt tiks ja dabūs ftp paroli vai būs kāds pamatīgs caurums citur (kaut kādā jēgā augšuplādēt kādu php failu :))

Link to comment
Share on other sites

@ezis - viss ir atkarīgs no tā, ko tu saproti ar "savu algoritmu, kas pārveido paroles".

Ja esi uztaisījis pats savu hash funkciju, tad tas 99,999999% gadījumu nozīmē, ka Tevis izveidotā funkcija būs varen nedroša [1].

Ja ar to saproti kaut ko līdzīgu md5(sha1($salt . $password). $password . $salt)... Tad vari tā darīt, kaut gan cilvēki, kas ar šīm lietām nodarbojas pastāvīgi [2], ir arī par to daudz domājuši [3].

 

[1] Why cryptography is harder than it looks. /Bruce Schneier/

[2] Hardened stateless session cookies. /Steven J. Murdoch/ (neapskatot ideju par visu autentifikācijas datu turēšanu pie lietotāja, tiek aprakstīts arī kā nodrošināt parolu aizsardzību)

[3] Key strenghtening

Link to comment
Share on other sites

šoreiz nebiju domājis savu kriptošanu, bet gan otro variantu. jo reāli uzreiz māc šaubas par to vai vispār ir kaut kas droši :\ visu laiku ari tagad par to lauzu galvu... kāda jēga no md5(sha1($salt . $password). $password . $salt), ja piem. ļaundaris zin viņu + tiek pie db, tad wtf! oO vaks vien ir.. tās pašas cms visas.. viņām tak visu laiku tā paroļu kriptošana notiek pēc viena un tā paša principa.. ja ļaunie spēki to jau sen ir izpētījuši un viņu nagos nonāk parole no db, tad ir sāpe..

 

palasīšu Tevis dotos rakstus.. varbūt apskaidrošos..

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...