Panel Logowania i niedziałające i niebezpieczne cookie

2010-12-19 18:51:52 Post #1 Pudi

 
Witam posiadam skrypt logowania
wiem ze da się przez cookie włamać tworząc cookie o nazwie
'mojeciastko' z wartością kupa' union select 1,haslo,3,4,5 from users where login='admin.
a wiec wracając mój skrypt:
<?php


$ciastko = $_COOKIE['mojeciastko'];

if(isset($ciastko)){

require_once('config.php');

$query = "SELECT * FROM users WHERE haslo='$ciastko'";
$result = mysql_query($query);
$row = @mysql_fetch_assoc($result);

if($row){

$_SESSION['login'] = $row['login'];
$_SESSION['haslo'] = $row['haslo'];
$_SESSION['data'] = $row['data'];
$_SESSION['email'] = $row['email'];
$_SESSION['id'] = $row['id'];
$_SESSION['poziom'] = $row['poziom'];
$_SESSION['gg'] = $row['gg'];
$_SESSION['avatar'] = $row['avatar'];
$info2 .= 'Zostales poprawnie <br>zalogowany na strone<br />';

}

}

if ($_POST){

if(!empty($_POST["login"]) AND !empty($_POST["haslo1"])){

require_once('config.php');

$login = czysc($_POST["login"]);
$haslo1 = czysc($_POST["haslo1"]);

$query = "SELECT * FROM users WHERE login='$login' AND haslo=md5('$haslo1')";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

if ($row){

$_SESSION['login'] = $row['login'];
$_SESSION['haslo1'] = $row['haslo'];
$_SESSION['data'] = $row['data'];
$_SESSION['id'] = $row['id'];
$_SESSION['poziom'] = $row['poziom'];
$_SESSION['gg'] = $row['gg'];
$_SESSION['avatar'] = $row['avatar'];
$_SESSION['email'] = $row['email'];

if(isset($_POST['zapamietaj'])){

setcookie('moeciastko',$_SESSION['haslo1'],time()+31536300);

$info2 .='ustawiono ciastko<br />';

}


$info2 = 'Zostales poprawnie <br>zalogowany na strone<br />';

}else{

$info2 = 'Nieprawidlowy login lub haslo<br />';

}

}else{

$info2 = 'wpisz login i haslo<br />';

}

}
echo $info2;
echo '<meta http-equiv="refresh" content="1; url=index.php">';
?>

Mogłbym się dowiedzieć co jest źle w tym skrypcie i jak go zabezpieczyć on loguje normalnie tylko cookie nie dziala ;/ i jak wyzej napisalem mozna się włamać

2010-12-19 19:10:30 Post #2 Comandeer

 
Oki, tak po szybkim przejrzeniu:
1) Do kodowania haseł nie używaj MD5. Korzystaj z SHA512 + sól hasła
2) Niektórzy userzy mogą mieć takie same hasła, więc w tym momencie nie wiesz kto został zalogowany
3) Zawsze ustawiaj cookies opcję httpOnly
setcookie('moeciastko',$_SESSION['haslo1'],time()+31536300,"/", ".twojadomena.pl", false,true);

Chyba, że robisz aplikację webową i do cookie ma mieć dostęp JS
4) Nie jestem zwolennikiem opcji autologowania
http://www.beldzio.com/autologowanie
Tak jest chyba najbezpieczniej - nowa tabela w bazie i w cookie zapisujesz na żywca generowany ciąg, choćby przez sha1(uniqid('',true)), a następnie patrzysz czy dany hash w bazie istnieje i czy jeszcze jest "żywy" (tzn. czy nie upłynął czas w lifetime).

Odpowiedz

Ostatnio komentowane

  1. ShoutBox Podświadomość
  2. ShoutBox Trilux
  3. ShoutBox morelowy-dolomit
  4. ShoutBox Lucidoremi
  5. ShoutBox Goran Lezczek
  6. ShoutBox Ktos
  7. Opcje dwuwartościowe... gosc

Ostatnio na forum

  1. Prolem z biblioteką ... ele
  2. Programista/ka PHP, ... Kamil
  3. ilość wczytywanych m... boob
  4. Humor Masłan
  5. Humor Enynsenes
  6. Humor KLOFMDMANELLIGGLOOSK
  7. Humor Goran Lezczek

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer