PDA

View Full Version : سوال: امنیت سشن و کوکی



nima1235
چهارشنبه 30 مرداد 1392, 22:52 عصر
سلام ، من برای login سایتم از سشن و کوکی به این صورت استفاده می کنم :
2 تا سشن دارم یکی از این سشن ها username و سشن دیگه هم hash هست از username ، user agent و remoteip .
2 تا هم کوکی دارم که در حقیقت special key و public key هستش :
public key : هش username و user_id هستش
special key : هش user agent و remote ip و اطلاعات مرورگر طرف هستش . public key توی دتیابیس ذخیره میشه ، به نظرتون امنیتش چطوره ؟ یعنی منطقی نوشتم یا نه ، راه بهتری هم هست ؟

diaoko89
پنج شنبه 31 مرداد 1392, 00:13 صبح
دوست عزیز بنده این کلاس امنیتی سشن رو یک جا دیدم و به نظرم جالب اومد و الان دارم راجع بهش تحقیق میکنم شاید به کارتون بیاد



class securesession
{

var $check_browser = true;
var $check_ip_blocks = 0;
var $secure_word = "SECURESTAFF";
var $regenerate_id = true;

function open( )
{

$GLOBALS['_SESSION']['ss_fprint'] = $this->_fingerprint( );
$this->_regenerateid( );

}

function check( )
{
$this->_regenerateid( );
return $_SESSION['ss_fprint'] == $this->_fingerprint( );
}

function _fingerprint( )
{
$fingerprint = $this->secure_word;
if ( $this->check_browser )
{
$fingerprint .= $_SERVER['HTTP_USER_AGENT'];
}
if ( $this->check_ip_blocks )
{
$num_blocks = abs( intval( $this->check_ip_blocks ) );
if ( 4 < $num_blocks )
{
$num_blocks = 4;
}
$blocks = explode( ".", $_SERVER['REMOTE_ADDR'] );
$i = 0;
for ( ; $i < $num_blocks; ++$i )
{
$fingerprint .= $blocks[$i].".";
}
}
return md5( $fingerprint );
}

function _regenerateid( )
{
if ( $this->regenerate_id && function_exists( "session_regenerate_id" ) )
{
session_regenerate_id( );
}
}

}

در زمان لاگین کاربر، مقدار تولید شده سشن $_SESSION['ss_fprint'] توسط کلاس بالا،در یک فیلد از رکورد اطلاعات کاربر ذخیره میشه و هر بار که لازم شد اطلاعات اون فیلد واکشی میشه از بانک و با سشن کاربر چک میشه که اگر برابر نبود یعنی هویت کاربر نامعتبر هست و حساب کاربر logout میشه
مثال زیر نحوه استفاده از این کلاس را نمایش میده



$ss = new securesession();
$ss->check_browser = true;
$ss->check_ip_blocks = 4;
$ss->secure_word = "SALT_";
$ss->regenerate_id = true;
$ss->open();
if($user_finger_print['finger_print']!=$_SESSION['ss_fprint'])
{
$this->logout();
}

nima1235
پنج شنبه 31 مرداد 1392, 05:51 صبح
میخواستم نظرتون رو راجع به پست اول بدونم . چیزایی که نوشتم .