PDA

View Full Version : سوال: تشخیص هویت کاربران هنگام ورود به سایت



ehsan_savadkohi
شنبه 25 خرداد 1392, 14:24 عصر
سلام دوستان:
میخوام یک شرطی را بنویسم که بیاد برای ورود به بخش مدیریت سایت تشخیص بده که آیا مدیر وارد شده یا کاربر و اگر کاربر وارد شده آن را به صفحه دیگر منتقل کند و اگیر مدیر وارد شد آنرا به صفحه مدیریت هدایت کند.
لطفا کمکم کنید که خیلی نیازش دارم..ممنونم

SilverLearn
شنبه 25 خرداد 1392, 14:36 عصر
می تونی برای این کار موقع ثبت نام فیلدی برای صفحه ثبت نام کاربر بگذاری مثلا با عنوان "کاربر معمولی" بعد وقتی کاربر لاگین می کنه این فیلد چک بشه اگه درست بود هدر رو به صفحه محیط کاربر معمولی بفرستی و برای مدیر هم به همین صورت ...

ehsan_savadkohi
شنبه 25 خرداد 1392, 14:46 عصر
می تونی برای این کار موقع ثبت نام فیلدی برای صفحه ثبت نام کاربر بگذاری مثلا با عنوان "کاربر معمولی" بعد وقتی کاربر لاگین می کنه این فیلد چک بشه اگه درست بود هدر رو به صفحه محیط کاربر معمولی بفرستی و برای مدیر هم به همین صورت ...

مهم همین چک کردنه. میشه نمونه مثال بزنید. ممنون میشم:خجالت:

SlowCode
شنبه 25 خرداد 1392, 14:52 عصر
سلام
فرض میکنیم شما همه کاربران و مدیران رو داخل یه جدول ذخیره میکنی و برای هرکدوم یه سطح دسترسی تعیین میکنی، حالا شما وقتی میخوای کوئری بزنی یوزر رو شناسایی کن بعد فیلد سطح دسترسیش رو بخون بعد اگه مثلا 1 باشه میفهمی ادمینه و اگه 0 باشه کاربر عادیه.
البته شاید ساختار دیتابیس شما طور دیگری باشه ولی در هر صورت فرق چندانی نداره.

ehsan_savadkohi
شنبه 25 خرداد 1392, 15:00 عصر
سلام
فرض میکنیم شما همه کاربران و مدیران رو داخل یه جدول ذخیره میکنی و برای هرکدوم یه سطح دسترسی تعیین میکنی، حالا شما وقتی میخوای کوئری بزنی یوزر رو شناسایی کن بعد فیلد سطح دسترسیش رو بخون بعد اگه مثلا 1 باشه میفهمی ادمینه و اگه 0 باشه کاربر عادیه.
البته شاید ساختار دیتابیس شما طور دیگری باشه ولی در هر صورت فرق چندانی نداره.

ممنونم از پاسخ شما دوست عزیز.
بزار اینجور بگم. من این مراحل را انجام دادم. مشکل من اینجاست که وقتی کاربر عادی وارد سایت میشود احراز هویت هم میشود. هنگامی که صفحه لاگین مربوط به پنل مدیریتی را اجرا میکنم کاربر در پنل مدیریتی هم وارد میشود. من فقط در هنگام ورود به سایت مدیر را چک میکنم .ولی در هنگامی که کاربر از صفحه خود به صفحه مدیریت وارد میشود چک نمیشود. مشکل کجاست .امنیتش زیر سواله؟؟؟؟؟
لطفا راهنماییم کنید اگه میشه با مثال..ممنونم از لطفتون

arta.nasiri
شنبه 25 خرداد 1392, 15:27 عصر
دوست عزیز در ساده ترین حالت شما بعد از اینکه کاربر لاگین کرد یک SESSION میسازی و مقدارش رو اگه کاربر مدیر بود مثلا میذاری 1 و اگه کاربر معمولی بود 2. بعد تو صفحاتی که میخوای چک میکنی اگه مثلا تو پنل مدیریت مقدار SESSION برابر 1 بود اجازه میدی صفحه لود بشه در غیر اینصورت منتقلش میکنی به یک صفحه دیگه

ehsan_savadkohi
شنبه 25 خرداد 1392, 15:37 عصر
دوست عزیز در ساده ترین حالت شما بعد از اینکه کاربر لاگین کرد یک SESSION میسازی و مقدارش رو اگه کاربر مدیر بود مثلا میذاری 1 و اگه کاربر معمولی بود 2. بعد تو صفحاتی که میخوای چک میکنی اگه مثلا تو پنل مدیریت مقدار SESSION برابر 1 بود اجازه میدی صفحه لود بشه در غیر اینصورت منتقلش میکنی به یک صفحه دیگه

سلام.دوست عزیز. تشکز بابت جوابتون.
تا اینجا درست.
وقتی مدیر وارد پنل مدیریتی میشود مشکلی نیست. ولی وقتی که کاربر وارد سایت میشود یه یه مشکل امنیتی بوجود میآید و این است که وقتی در پوشه admin ، وارد بخش مدیریتی میشود به جای اینکه از کاربر جلو گیری کند راحت سیشن میساز و کاربر را شناسائی میکند. مشکل این است. حالا در لحظه ای که کاربر وارد ایتن قسمت میشود را چگونه بررسی کنم.؟؟؟؟؟؟

arta.nasiri
شنبه 25 خرداد 1392, 15:54 عصر
موقع لاگین کردن کاربر، شما این SESSION رو بساز

session_start();
$_SESSION['userMode'] = $userRole;
مقدار $userRole همان مقداری است که از دیتابیس و از رکورد مربوط به کاربر میگیرید، مثلا مدیر هست یا کاربر معمولی.


سپس اول صفحه ای که میخوای بررسی کنی این کد رو بنویس، در صورتی که مقدار SESSION برابر admin نباشه انتقال میده به یه صفحه دیگه

if(!$_SESSION['userMode'] == "admin")
{
header("Location: http://www.site.com/user.php");
exit();
}

SlowCode
شنبه 25 خرداد 1392, 16:02 عصر
خب مشکل از کد نویسی شماست دیگه.
برای مثال وقتی که ادمین وارد میشه سشن user رو برابر admin کن و وقتی کاربر عادی وارد میشه برابر user بکن.
بعد توی صفحاتت چک کن اگه مقدار سشن برابر admin بود صفحه رو نشون بده در غیراینصورت نه.

ehsan_savadkohi
شنبه 25 خرداد 1392, 18:10 عصر
موقع لاگین کردن کاربر، شما این SESSION رو بساز

session_start();
$_SESSION['userMode'] = $userRole;
مقدار $userRole همان مقداری است که از دیتابیس و از رکورد مربوط به کاربر میگیرید، مثلا مدیر هست یا کاربر معمولی.


سپس اول صفحه ای که میخوای بررسی کنی این کد رو بنویس، در صورتی که مقدار SESSION برابر admin نباشه انتقال میده به یه صفحه دیگه

if(!$_SESSION['userMode'] == "admin")
{
header("Location: http://www.site.com/user.php");
exit();
}

thanks very match

rezaonline.net
یک شنبه 26 خرداد 1392, 03:52 صبح
فکر کنم این کلاس به دردتون بخوره

<?php
class admin
{
public function __construct()
{
@session_start();
}

protected function _key()
{
$username = USERNAME;
$pass = PASSWORD;
$soft = $_SERVER['SERVER_SOFTWARE'];
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];

$_key = $username.$pass.$soft.$ip.$agent;
$_key = sha1($_key);
return $_key;
}

public function is_admin()
{
$username = USERNAME;
$pass = PASSWORD;
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];

$_key = $this->_key();

if(empty($_SESSION[$_key]))
return false;

$sess = $_SESSION[$_key];

if(empty($sess['ip']) or empty($sess['agent']) or empty($sess['check']) or empty($sess['time']))
return false;

if($sess['ip'] != sha1($ip))
return false;

if($sess['agent'] != sha1($agent))
return false;

if($sess['check'] != sha1($username.$pass))
return false;

if($sess['time'] + 24*60*60 < time())
return false;

$sess['time'] = time();
return true;
}

public function logout()
{
$_key = $this->_key();
unset($_SESSION[$_key]);
$_SESSION[$_key] = NULL;
}

public function set_login()
{
$this->logout();
$_key = $this->_key();
$username = USERNAME;
$pass = PASSWORD;
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];

$_SESSION[$_key] = array(
'ip'=>sha1($ip) ,
'agent'=>sha1($agent) ,
'check'=>sha1($username.$pass) ,
'time'=>time() ,
);
}
}

ehsan_savadkohi
یک شنبه 26 خرداد 1392, 16:04 عصر
thanks very match

میتونی بهم این $userRole را بگی. کدش را واسم بنویسی. به خدا دیگه نمیتونم سورس بنویسم.هر کاریش کردم نمیشه . اطلاعات همه کاربرام تویک جدول members است. و فیلد مخصوص role دارند. میخوام وقتی کاربر میاد توصفحه مدیر شناسایی بشه و وارد نشه. و برگردد به صفحه سایت. ولی مدیران بتوانند در پنل وارد شوند.
راهنماییم کنید خواهشا.ممنون

arta.nasiri
یک شنبه 26 خرداد 1392, 21:38 عصر
میتونی بهم این $userRole را بگی. کدش را واسم بنویسی. به خدا دیگه نمیتونم سورس بنویسم.هر کاریش کردم نمیشه . اطلاعات همه کاربرام تویک جدول members است. و فیلد مخصوص role دارند. میخوام وقتی کاربر میاد توصفحه مدیر شناسایی بشه و وارد نشه. و برگردد به صفحه سایت. ولی مدیران بتوانند در پنل وارد شوند.
راهنماییم کنید خواهشا.ممنون


<?php
session_start();

$con=mysqli_connect("localhost","username","password","dbName");

if (mysqli_connect_errno())
{
echo mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT role FROM members WHERE username='$user");

while($row = mysqli_fetch_array($result))
{
$_SESSION['userMode'] = $row['role'];
}

mysqli_close($con);
?>

کد واضحه و فکر نکنم نیاز به توضیح باشه!! فقط مقدار $user همان مقداری است که کاربر هنگام لاگین در قسمت نام کاربری خود وارد میکند، که شما باید با دستور $_POST مقدار اون textbox رو گرفته و در این متغیر قرار دهید.

username هم بعد دستور WHERE اسم همان فیلدی است که نام کاربری را در جدول members در خود ذخیره میکند ( اگه اسم فیلدت یه چیز دیگس اونو عوض کن به همان اسم ).

کدهای بالا SESSION رو مقدار دهی میکنند؛ که شما باید این مقدار رو در صفحاتی که میخواهید بررسی کنید ( کد بررسی رو هم قبلا گفتم ).