forSilence Posted February 5, 2011 Report Share Posted February 5, 2011 (edited) Izveidoju savu pirmo login skriptu, un gribētu uzzināt cik drošs tas ir, un ko, un kā varētu to uzlabot. Par sessijām neko īpaši daudz nezinu. Skripts Funkcijas if( get_magic_quotes_runtime() ) { set_magic_quotes_runtime( false ); } function quote_smart($value) { if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { $value = stripslashes($value); } $value = "'" . mysql_real_escape_string($value) . "'"; return $value; Paldies jau iepriekš Edited February 5, 2011 by forSilence Quote Link to comment Share on other sites More sharing options...
xmas12 Posted February 5, 2011 Report Share Posted February 5, 2011 Nokopēta funkciju pārpaudīt, manuprāt īpaša jēga nav. if(isset($_POST['nickname']) && isset($_POST['password'])) Un kas notiks, ja es ierakstīšu tikai vienā laukā? Manuprāt vaidzētu bik savādāk uztaisīt, jo pēc loģikas tev skan šādi: Ja ir uzstādīts vārds, UN ir uzstādīts uzvārds, tad - notiek darbība. Datus vaidzētu trimmerēt arī ar funkciju trim(). Kad uzsāk sessiju manuprāt jēga viņā stūķēt iekšā parastu 1 ? Katram lietotājam tiek pieaistīts kāds unikāls identifikātors ( ID ), un to vaidzētu taka likt sessijā, jo kā pēc tam tu dabūsi lietotāja datus? Vēl labākā gadījumā vari otro sessiju likt iekšā time(), lai pārbaudītu lietotāja aktivitāti, nobeigtu sessiju pēc tam, kad noteiktu laiku viņš nav kaut ko darījis + aizmugurē ar JS pārlādētu lapu. Murgs tev tur ir. Vai tad nevaidzētu jautrākam prātam pielikt pašai submit pogai name? Un tad likt urbēju 2011 if(isset($_POST['mans_super_pogas_name'])){ //te tavs mega kods? } Un uzreiz disko paliek krutāks. Manuprāt paņem aukstu aliņu un sāc močīt no +- jauna. Baigais černis, bet nu idejiski tev pareizi ir. bling bling. Quote Link to comment Share on other sites More sharing options...
sandis_m Posted February 5, 2011 Report Share Posted February 5, 2011 mysql_real_escape_string($nick) vajadzētu tā kā Quote Link to comment Share on other sites More sharing options...
forSilence Posted February 5, 2011 Author Report Share Posted February 5, 2011 (edited) mysql_real_escape_string($nick) vajadzētu tā kā Tas jau ir izdarīts, apskaties iekš quote_smart funkcijas EDIT: if(isset($_POST['nickname']) && isset($_POST['password'])) Šis nav kopēts, es daudz ko nezinu, tapēc daru uz sava prāta. Tagad skripts izskatās šādi <?php session_start(); include("config.php"); if(isset($_GET['logout'])){ session_destroy(); header('location: index.php'); } if(isset($_POST['login'])){ $nick = quote_smart($_POST['nickname']); $pass = quote_smart(md5($_POST['password'])); $testuser = mysql_query("SELECT * FROM users WHERE nickname = $nick AND password = $pass"); if(mysql_num_rows($testuser) > 0){ $user_id = mysql_fetch_array($testuser); session_regenerate_id(); $_SESSION['loged_in'] = $user_id['id']; header('location: index.php'); }else{ echo 'Lietotāj vārds vai parole nav pareiza/i!'; } } if(isset($_SESSION['loged_in'])){ $sql = mysql_query("SELECT * FROM users WHERE id = '".$_SESSION['loged_in']."'") or die(mysql_error()); while($row = mysql_fetch_array($sql)){ echo 'Sveiks! '.$row['name'].'<br /> <a href="?logout">Iziet!</a> '; }}else{ ?> <form method="post"> <input type="text" name="nickname" /><br /> <input type="password" name="password" /><br /> <input type="submit" name="login" value="login" /> </form> <?php } ?> Ar trim() funkciju, īsti nesapratu, itkā tā pārbauda atstarpes, tab utt, ja ir tad izdzēš, varbūt es kļūdos, un īsti nesapratu kru tā būtu jāliek. Mans piemērs ar atstarpju dzēšanu: $nick = quote_smart(trim($_POST['nickname'])); Edited February 5, 2011 by forSilence Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 5, 2011 Report Share Posted February 5, 2011 (edited) atstarpeatstarpeatstarpeatstarpeatstarpetekstsatstarpeatstarpeatstarpeatstarpeatstarpeatstarpeatstarpeatstarpeatstarpeatstarpeatstarpe ...ar trim() būs... teksts P.S. Atstarpes tiks noņemtas tikai no paša sākuma un beigām. Ne pa vidu. =] Edited February 5, 2011 by daGrevis Quote Link to comment Share on other sites More sharing options...
Kemito Posted February 7, 2011 Report Share Posted February 7, 2011 Kamdēļ izskatās, ka tu tur kaut kādu ID ģenerē ar PHP vai ko tur? MySQL esi palasījis? Reālā situācijā katrai tabulai ir pieņemts tā teikt obligāti piešķirt kādu unikālu identifikātoru, pēc kura attiecīgi var izmantot datus / atlasīt. MySQL piedāvā tādas ekstras, kā auto_increment, kas automātiski skaitīs šo ID uz priekš ( Neaizmirsti tam pievienot atslēgu ) ! UN viss. Es par to kopēto domāju, quote_smart() funkciju, tu gribi teikt, ka pats to rakstīji ? :D daGrevis, Paldies par izklāstu, un apgaismību pasaules plašajos ceļos :) Kā jau minēju pietiktu pamatā ar divām sessijām, vienā likt id, otrā laiku. t.i ( Es komentēju no xmas12 profila, atvainojos, slinkums nomāca man ieskriet savā ) Quote Link to comment Share on other sites More sharing options...
forSilence Posted February 7, 2011 Author Report Share Posted February 7, 2011 Man liekas manu otro kodu tu neapskatīji, man ir jau piešķirts katram lietotājam savs id, pēc tā arī viņš visu atpazīst. Par quote_smart() funkciju, jā tā ir kopēta, bet pilnveidota ar šī foruma palīdzību. Lūdzu norādīt uz vēl kļūdām, lai tās varētu novērst. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.