آیا این کد تعیین اعتبار، جلوی ورود افراد غیر مجاز رو به پنل مدیریت سایت می گیره؟

phpweb

Active Member
من برای اینکه چک کنم کاربر فرم لاگین رو پر کرده و یک کاربر معتبر هست یا نه از کد زیر استفاده می کنم.

بعد از اینکه کاربر کلمه رمز و کلمه کاربری رو به درستی وارد کرد و به وب سایت لاگین کرد، کلمه کاربری کاربر رو توی سیشن زیر قرار می دم.

PHP:
$_SESSION['userid']=$_POST[userid]
حالا هر وقت کاربر بخواد به یه صفحه دسترسی پیدا کنه به کمک کد زیر چک می کنم که آیا کاربر قبلا لاگین کرده یا نه. اگه کاربر لاگین کرده بود صفحه رو بهش نشون می دم در غیر این صورت کاربر رو به صفحه ایندکس می فرستم.

بنظر شما این کد تا چه حد می تونه جلوی هکر ها رو بگیره و اینکه می تونم به این کد بطور کامل اطمینان کنم یا نه؟

PHP:
<?php

session_start();
if(! empty($_SESSION['userid']) )
{
###############
}
else
{
    header('location: index.php');
    exit();
}
ob_end_flush();
exit();
?>
 

Masoud1365

مدیر انجمن
بجای این کد باید از چه کدی استفاده کنم ؟

همچنین لطفا بگید که چطور می تونیم این کد رو دور بزنیم؟

طبق قوانین انجمن نمیتونم توضیح بدم که چطوری میشه کد رو دور زد چون دقیقا میشه آموزش هک کردن !
اما راهی که وب شما رو آسیب پذیر میکنه همینی هست که آقا میلاد فرمودند یعنی سشن های جک ! یا همون دزدیدن سشن ! یه سرچی راجع به این مطلب بکنید.
راه های مقابله با اون هم ذخیره چند مقدار در سشن + هش کردن برخی از اطلاعات + عوض کردن سشن آیی دی
 

phpweb

Active Member
طبق قوانین انجمن نمیتونم توضیح بدم که چطوری میشه کد رو دور زد چون دقیقا میشه آموزش هک کردن !
اما راهی که وب شما رو آسیب پذیر میکنه همینی هست که آقا میلاد فرمودند یعنی سشن های جک ! یا همون دزدیدن سشن ! یه سرچی راجع به این مطلب بکنید.
راه های مقابله با اون هم ذخیره چند مقدار در سشن + هش کردن برخی از اطلاعات + عوض کردن سشن آیی دی

راه های مقابله با اون هم ذخیره چند مقدار در سشن + هش کردن برخی از اطلاعات + عوض کردن سشن آیی

شاید منظورم رو متوجه نشدید.

من این کد رو که در پست اول نوشتم، بعد از لاگین کردن کاربر به کار می برم.

یعنی بعد از اینکه کاربر آی دی و کلمه رمز رو وارد کرد و تایید اعتبار شد، کلمه کاربری رو توی یه سیشن قرار می دم. بعد از این مرحله برای نمایش سایر صفحات فقط چک می کنم که این سیشن پر هست یا نه.

لطفا بگید که این روش درست هست یا نه.

اگه امکانش هست یکی از کدای خودتون رو برام بفرستید.
 
آخرین ویرایش:

ARMIN3D.NET

New Member
براتون یه کلاس نوشتم البته هنوز ناقصه :

PHP:
<?php
class securesession
{

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

    function open( )
    {
        $_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( );
        }
    }

}

?>
 

phpweb

Active Member
براتون یه کلاس نوشتم البته هنوز ناقصه :

PHP:
<?php
class securesession
{

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

    function open( )
    {
        $_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( );
        }
    }

}

?>
راستش کدهای آماده رو راحت دور می زنن، کدهای ناقص که جای خود داره.

لطفا کد کتمل رو برام ارسال کنید.
 

Milad

Well-Known Member
همینایی که مسعود جان فرمودنند ، مهم ترینشون کد کردن و تغییر ای دی سشن هست ، از کلاس های اماده استفاده کنید . phpclasses
 

phpweb

Active Member
همینایی که مسعود جان فرمودنند ، مهم ترینشون کد کردن و تغییر ای دی سشن هست ، از کلاس های اماده استفاده کنید . Phpclasses
من انگلیسیم خوب نیست و نمی تونم سایتهای خارجی رو به خوبی جستجو کنم.

امکانش هست یه کد آماده برام بفرستید؟
 

phpweb

Active Member
چند تا کلاس تو آرشیوم داشتم برات میزارم ، ببین کدوم به کارت میاد ...
این کلای بدرد من می خوره. ولی دقیقا متوجه منظور توابع مختلف این کلاس نشدم. لطفا یه توضیح بدید.

PHP:
<?php

/*
  SecureSession class
  Written by Vagharshak Tozalakyan <[email protected]>
  Released under GNU Public License
*/

class SecureSession
{
    // Include browser name in fingerprint?
    var $check_browser = true;

    // How many numbers from IP use in fingerprint?
    var $check_ip_blocks = 0;

    // Control word - any word you want.
    var $secure_word = 'SECURESTAFF';

    // Regenerate session ID to prevent fixation attacks?
    var $regenerate_id = true;

    // Call this when init session.
    function Open()
    {
        $_SESSION['ss_fprint'] = $this->_Fingerprint();
        $this->_RegenerateId();
    }

    // Call this to check session.
    function Check()
    {
        $this->_RegenerateId();
        return (isset($_SESSION['ss_fprint']) && $_SESSION['ss_fprint'] == $this->_Fingerprint());
    }

    // Internal function. Returns MD5 from 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 ($num_blocks > 4) {
                $num_blocks = 4;
            }
            $blocks = explode('.', $_SERVER['REMOTE_ADDR']);
            for ($i = 0; $i < $num_blocks; $i++) {
                $fingerprint .= $blocks[$i] . '.';
            }
        }
        return md5($fingerprint);
    }

    // Internal function. Regenerates session ID if possible.
    function _RegenerateId()
    {
        if ($this->regenerate_id && function_exists('session_regenerate_id')) {
            if (version_compare(phpversion(), '5.1.0', '>=')) {
                session_regenerate_id(true);
            } else {
                session_regenerate_id();
            }
        }
    }
}

?>
 

جدیدترین ارسال ها

بالا