PDA

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



phpweb
جمعه 05 فروردین 1390, 19:34 عصر
من برای اینکه چک کنم کاربر فرم لاگین رو پر کرده و یک کاربر معتبر هست یا نه از کد زیر استفاده می کنم.

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


$_SESSION['userid']=$_POST[userid]

حالا هر وقت کاربر بخواد به یه صفحه دسترسی پیدا کنه به کمک کد زیر چک می کنم که آیا کاربر قبلا لاگین کرده یا نه. اگه کاربر لاگین کرده بود صفحه رو بهش نشون می دم در غیر این صورت کاربر رو به صفحه ایندکس می فرستم.

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




<?php

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

mtchabok
شنبه 06 فروردین 1390, 03:21 صبح
کدی نوشتید مشکلی نداره و فقط باید روی صفحه لاگین کار کنید که کسی نتونه لاگینتون رو دور بزنه .
یه چیز دیگه هم این که سشن رو خودتون مدیریت کنین و به php نسپرین بهتره ... ( handler سشن )

$ M 3 H R D A D $
شنبه 06 فروردین 1390, 09:39 صبح
میشه درباره مدیریت سشن ودور زدن لوگین پیج توضیح بدید ؟

Cyletech
شنبه 06 فروردین 1390, 09:57 صبح
این کد خیلی سادس. برای جلوگیری از ورود هر کاربر به غیر از ادمین من همیشه میام اول وارد بودن یا نبودن کوکی هامو بررسی می کنم و بعد اگر وارد نبود آیدیش نام کاربری وارد شده رو درمیارم و اگر برابر 1 بود فرضاً میتونه وارد ادمین بشه بعد همون موقع کوکی براش میسازم. بعد دوباره چک می کنم اگر وارد بود که باز چک کنه آیدی رو ...

sargardoon
شنبه 06 فروردین 1390, 11:01 صبح
من به این صورت چک میکنم که این کد رو توی صفحه توابع مینویسم

function loggedin(){
if(isset($_SESSION['name']) || isset($_COOKIE['name'])){
$loggedin=TRUE;
return $loggedin;
} else {
$loggedin=FALSE;
return $loggedin;
}
}

این کد هم توی هر صفحه ای که بخوام از افراد غیر مجاز جلوگیری کنم استفاده میکنم


if (loggedin()== FALSE) {

header ("Location: login.php");
exit();
} else {
YOUR CODE HERE
}
اینطوری هم چک میکنم که آیا کاربر قبلا وارد شده یا نه؟

phpweb
شنبه 06 فروردین 1390, 11:08 صبح
کدی نوشتید مشکلی نداره و فقط باید روی صفحه لاگین کار کنید که کسی نتونه لاگینتون رو دور بزنه .
یه چیز دیگه هم این که سشن رو خودتون مدیریت کنین و به php نسپرین بهتره ... ( handler سشن )

صفحه لاگینم مشکلی نداره، من برای مراحل بعد از لاگین و تایید اعتبار سوال دارم. فرض کنید لاگین کردید و می خواید سایر صفحاتتون رو ببنید.

من برای این موارد چک می کنم که آیا سیشن پر هست یا نه، اگر سیشن پر بود صفحه رو نمایش می دم.


لطفا در مورد این روش توضیح بدید و ایرادش رو بگیرید.

sargardoon
شنبه 06 فروردین 1390, 13:25 عصر
صفحه لاگینم مشکلی نداره، من برای مراحل بعد از لاگین و تایید اعتبار سوال دارم. فرض کنید لاگین کردید و می خواید سایر صفحاتتون رو ببنید.

من برای این موارد چک می کنم که آیا سیشن پر هست یا نه، اگر سیشن پر بود صفحه رو نمایش می دم.


لطفا در مورد این روش توضیح بدید و ایرادش رو بگیرید.
خوب دوست عزیز این مثالی که من نوشتم میتونه بهتون کمک کنه، شما اول کد بالایی که نوشتم رو چک میکنید که آیا کاربر قبلا وارد سیستم شده؟ اگر شده باید یا کوکی ست شده باشه و یا session درسته شده باشه، اگر جواب مثب بود که به صفحات دسترسی خواهد داشت در غیر این صورت به صفحه ورود (و یا هرصفحه ای که بخواهید) میفرستید. این که خیلی ساده هستش، یه چیزی هم باید یادتون باشه در زمان ورود باید session یا cookie ست شده باشه تا این گزینه کار کنه.


اگر بیشتر راهنمایی خواستی در خدمتیم.
موفق باشید

numberone1
شنبه 06 فروردین 1390, 13:47 عصر
کدی نوشتید مشکلی نداره و فقط باید روی صفحه لاگین کار کنید که کسی نتونه لاگینتون رو دور بزنه .
یه چیز دیگه هم این که سشن رو خودتون مدیریت کنین و به php نسپرین بهتره ... ( handler سشن )
ميشه لطف كنيد راجب اين كنترل سشن توضيح بدين؟

phpweb
شنبه 06 فروردین 1390, 15:11 عصر
خوب دوست عزیز این مثالی که من نوشتم میتونه بهتون کمک کنه، شما اول کد بالایی که نوشتم رو چک میکنید که آیا کاربر قبلا وارد سیستم شده؟ اگر شده باید یا کوکی ست شده باشه و یا session درسته شده باشه، اگر جواب مثب بود که به صفحات دسترسی خواهد داشت در غیر این صورت به صفحه ورود (و یا هرصفحه ای که بخواهید) میفرستید. این که خیلی ساده هستش، یه چیزی هم باید یادتون باشه در زمان ورود باید session یا cookie ست شده باشه تا این گزینه کار کنه.


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

sargardoon
شنبه 06 فروردین 1390, 16:13 عصر
به نظر من که عیب و ایرادی نداره، اگر اساتید نظری دیگری داشته باشند من هم خوشحال میشم یاد بگیرم

mtchabok
شنبه 06 فروردین 1390, 16:38 عصر
دوستان منظورم از دور زدن سشن اینه که گاهی اوقات سشن پیشفرض ، دچار اشکالاتی میشود به طور مثال در زمانی که ما در یک subfolder سایت رو run میکنیم اگر سشن رو تنظیم نکنید دچار مشکل میشید و یا مواقعی که در هاستهای اشتراکی سایت زدید سشنها اونجا مشترک هستن و یه خرابکار به سادگی میتونه session_id رو از یه سایت به سایت دیگه تغییر بده و اطلاعات رو از سایتی به سایت دیگه در سشن منتقل کنه . در ضمن اگه شما یه سشن آی دی تقلبی رو توسط کوکی به سایتتون بفرستید خطا داده میشه و سشن نمیتونه در اینجور موارد مدیریت بکنه و صرف نظر کنه .
به این دلایلی که مطرح کردم گفتم که بهتره از handler ای که خودتون می نویسید استفاده کنید .
نگاهی این اینجا بندازین . http://ir.php.net/manual/en/function.session-set-save-handler.php

MMSHFE
شنبه 06 فروردین 1390, 18:47 عصر
با سلام، بهتره توي صفحه لاگين چك كنيد كه از صفحه اصلي سايت خودتون اطلاعات ارسال شده يا نه چون معمولاً هكرها فرمهايي درست ميكنن كه مقصد اونها صفحه لاگين سايت شماست. براي مثال، فرض كنيد توي صفحه index.php فرمي دارين كه خاصيت action اون روي login.php تنظيم شده. قبل از هر كاري اين كد رو توي فايل login.php وارد كنيد:


if($_SERVER['HTTP_REFERER'] != 'http://www.yoursite.com/index.php')
{
header('location: index.php');
exit();
}

اينطوري صفحه login.php شما فقط اطلاعات فرمي رو كه ازطريق فايل index.php سايت خودتون ارسال شده، قبول ميكنه. اين كار باعث افزايش قابل قبولي در امنيت ميشه و به اين راحتيهاي سايت شما ازطريق روشهايي مثل BruteForce و... هك نخواهد شد. فقط در كد فوق، به جاي http://www.yoursite.com آدرس سايت خودتون رو قرار بدين.
موفق باشيد.

phpweb
شنبه 06 فروردین 1390, 18:51 عصر
دوستان منظورم از دور زدن سشن اینه که گاهی اوقات سشن پیشفرض ، دچار اشکالاتی میشود به طور مثال در زمانی که ما در یک subfolder سایت رو run میکنیم اگر سشن رو تنظیم نکنید دچار مشکل میشید و یا مواقعی که در هاستهای اشتراکی سایت زدید سشنها اونجا مشترک هستن و یه خرابکار به سادگی میتونه session_id رو از یه سایت به سایت دیگه تغییر بده و اطلاعات رو از سایتی به سایت دیگه در سشن منتقل کنه . در ضمن اگه شما یه سشن آی دی تقلبی رو توسط کوکی به سایتتون بفرستید خطا داده میشه و سشن نمیتونه در اینجور موارد مدیریت بکنه و صرف نظر کنه .
به این دلایلی که مطرح کردم گفتم که بهتره از handler ای که خودتون می نویسید استفاده کنید .
نگاهی این اینجا بندازین . http://ir.php.net/manual/en/function.session-set-save-handler.php
امکانش هست که یکی از کدهای خودتون رو برام ارسال کنید؟

sargardoon
شنبه 06 فروردین 1390, 19:11 عصر
دوستان منظورم از دور زدن سشن اینه که گاهی اوقات سشن پیشفرض ، دچار اشکالاتی میشود به طور مثال در زمانی که ما در یک subfolder سایت رو run میکنیم اگر سشن رو تنظیم نکنید دچار مشکل میشید و یا مواقعی که در هاستهای اشتراکی سایت زدید سشنها اونجا مشترک هستن و یه خرابکار به سادگی میتونه session_id رو از یه سایت به سایت دیگه تغییر بده و اطلاعات رو از سایتی به سایت دیگه در سشن منتقل کنه . در ضمن اگه شما یه سشن آی دی تقلبی رو توسط کوکی به سایتتون بفرستید خطا داده میشه و سشن نمیتونه در اینجور موارد مدیریت بکنه و صرف نظر کنه .
به این دلایلی که مطرح کردم گفتم که بهتره از handler ای که خودتون می نویسید استفاده کنید .
نگاهی این اینجا بندازین . http://ir.php.net/manual/en/function.session-set-save-handler.php

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

mtchabok
شنبه 06 فروردین 1390, 23:52 عصر
کدم رو متاسفانه نمی تونم بزارم چونکه بسیار پیچیده هس و دارای حجم بالاییه و از طرفی هم کپی رایت داره :بامزه:
میتونم توضیح بدم که خودم چیکار می کنم :
من خودم اینکار رو میکنم که قبل از اینکه سشن رو استارت کنم از روی کوکی و یا query string آی دی مربوط به session id رو میگیرم و صحت رو بررسی میکنم و بعدش اگه وجود داشت که سشن رو استارت میکنم و اگه وجود نداشت خودم یه id ایجاد میکنم و سپس در جدول اطلاعات اولیه رو مربوط به اون id قرار میدم و بعدش سشن رو استارت و id ای که ایجاد کردم رو روی session id ثبت میکنم .
یادم رفت که بگم کوکی رو هم بعد از استارت سشن مجددا با تنظیمات بیشتر ارسال میکنم که در اینجا میتونم قابلیت تایمدار شدن کوکی و یا خیلی چیزهای دیگه رو اعمال کنم .
بعدش باید بگم که من اطلاعات سشن رو در دیتابیس قرار میدم و اطلاعات مهمی مثل لاگین بودن و یا نام کاربری و از این قبیل رو در خود سشن ذخیره نمی کنم بلکه به عنوان یه فیلدی در رکورد سشن ذخیره میکنم .

این بود روش من . البته یه خورده روشی که الان دارم استفاده میکنم پیچیده تر از این هس . :لبخندساده:


اگر از session_regenerate_id استفاده کنیم که به ای دی جدید برامون بسازه چطوره؟
با خطرهایی که سشن پیشفرض داره کاری از دست این تابع هم بر نمی آد . و فقط یه session id جدید میسازه .

موفق باشید