Jump to content
php.lv forumi

Login skripta drošība


forSilence

Recommended Posts

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 by forSilence
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by forSilence
Link to comment
Share on other sites

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 by daGrevis
Link to comment
Share on other sites

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ā )

Link to comment
Share on other sites

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.

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