Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Logowanie
spenalzo
post
Post #1





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Tak zastanawiam się czy takie coś jest wystarczającym zabezpieczeniem:

login.php - pobieranie danych z bazy, sprawdzanie czy zgadzają sie z formularzem, i jeżeli tak to zapisujemy sesje z nazwą usera i jego ID.

konto.php - sprawdzanie czy istnieje rekord z takimi danymi, i jeżeli tak to pozwalamy oglądać stronę oraz sprawdzanie czy sesja nie jest starsza niż 7200 sekund.

Wymyśliłem sobie zapisywanie w sesji IP uzytkownika i jeżeli sie zmieni to wywalamy go.

Czy takie coś jest wystarczająco bezpieczne? Jakie są Wasze propozycje?
Bo to wszystko zależy od bezpieczeństwa sesji.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Bora
post
Post #2





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

Ostrzeżenie: (0%)
-----


Kiesyś pisałem własną klase obsługująca sesje wykorzystującą klucz.
http://php.pl/viewtopic.php?t=8234&start=15
Po kazdym klknięciu jest generowany nowy klucz który jest przekazywany wraz z numerem sesji w session_id(). Więc raz kliknięty już nie ozwala na ponowne wykorzystanie i przejęcie sesji.
Może teraz ktoś to zauważy.
Co o tym sądzicie??

[php:1:a121b6cab7]
<?php
class session
{
var $sesid;
var $klucz;
var $new_klucz;

function read( $id )
{
$key=$this->decode($id);
if($key==false){
//echo"newkey";
$id=$this->new_sid();
$this->sesid=$id;
$new_id=$this->code($id,$this->gen_klucz());
session_id($new_id);
$key=$this->decode(session_id());
}else{
$this->sesid=$key['0'];
}
$this->klucz=$key['1'];
$this->new_klucz=$this->gen_klucz();
$new_id=$this->code($this->sesid,$this->new_klucz);
session_id($new_id);
$query="SELECT * FROM " . $this->db['ss_table'] . " WHERE " .
$this->db['id_field'] . " = '" . $this->sesid . "' AND " .
$this->db['ex_field'] . " > '" . time() . "' AND
".$this->db['token_table']."='".$this->klucz."'";
$query = mysql_query($query);
if ( mysql_num_rows( $query ) > 0 )
{
$info = mysql_fetch_assoc( $query );
return( $info['DATA'] );
}
else
{
$query="SELECT * FROM " . $this->db['ss_table'] . " WHERE " .
$this->db['id_field'] . " = '" . $this->sesid . "'";
$query = mysql_query($query);
if ( mysql_num_rows( $query ) > 0 )

{
$id=$this->new_sid();
$key=$this->gen_klucz();
$new_id=$this->code($id,$key);
session_id($new_id);
$this->sesid=$id;
$this->new_klucz=$key;
}
return( false );
}
}

function new_sid()
{
$_sid = substr(md5(uniqid(rand(), true)), 0, 32);
return( $_sid );
}
function decode($kod)
{
if (ereg('/^([a-zA-Z0-9]*)$/i', $kod)){
return false;
}
$odk = base64_decode($kod);
$odkodowany=explode("|",$odk);
if(count($odkodowany)!=2){
return false;
}
return $odkodowany;
}

function code($sesid,$klucz)
{
$key[0]=$sesid;
$key[1]=$klucz;
if(!isset($key[0]) && !isset($key[1])){
return false;
}
$zakod=implode("|",$key);
$zakodowany=base64_encode($zakod);
return $zakodowany;
}
function gen_klucz()
{
$klucz = substr(md5(uniqid(rand(), true)), 5, 5);
return $klucz;
}
}
?>
[/php:1:a121b6cab7]
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 12:50