Genesis Posted October 7, 2009 Report Share Posted October 7, 2009 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"); } } ?> Quote Link to comment Share on other sites More sharing options...
briedis Posted October 7, 2009 Report Share Posted October 7, 2009 (edited) 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 October 7, 2009 by briedis Quote Link to comment Share on other sites More sharing options...
Cibiņš Posted October 7, 2009 Report Share Posted October 7, 2009 (edited) 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 October 7, 2009 by MCWeb.lv Quote Link to comment Share on other sites More sharing options...
briedis Posted October 7, 2009 Report Share Posted October 7, 2009 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 Quote Link to comment Share on other sites More sharing options...
Cibiņš Posted October 7, 2009 Report Share Posted October 7, 2009 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 :) Quote Link to comment Share on other sites More sharing options...
Trac3 !! Posted October 8, 2009 Report Share Posted October 8, 2009 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.. 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.