خوش آمديد!
16:16 سه شنبه 2 خرداد ماه ، 1391
تبلیغات راست
پکیج آموزش جامع دوره مهندسی شبکه مایکروسافت MCSE
خبر خوان

خبر خوان

دسته بندی مقالات
وب
  مقالات HTML
  مقالات PHP
  مقالات ASP.NET
  مقالات CSS
  مقالات XML
  مقالات JavaScript
  مقالات CMS
  مقالات Dreamweaver
  مقالات ColdFusion
  مقالات IIS
  مقالات Apache
  مقالات AJAX
  مقالات Flex
  مقالات AIR
  مقالات Expression Web
  مقالات SEO
  مقالات عمومی وب
برنامه نویسی
  مقالات C / C++
  مقالات C#
  مقالات VB.NET
  مقالات VB6
  مقالات دلفی
  مقالات VbScript
  مقالات اکشن اسکریپت
  مقالات Python
  مقالات سیلور لایت
  مقالات عمومی برنامه نویسی
سخت افزار
  مقالات CPU
  مقالات RAM
  مقالات دیسک سخت
  مقالات MainBoard
  مقالات کیبورد
  مقالات کارت گرافیک
  مقالات چاپگر
  مقالات عمومی سخت افزار
سیستم عامل
  مقالات ویندوز سون
  مقالات ویندوز ویستا
  مقالات ویندوز XP
  مقالات لینوکس
  مقالات سیستم عامل مک
  مقالات عمومی سیستم عامل
گرافیک دو بعدی
  مقالات فتوشاپ
  مقالات Illustrator
  مقالات Corel
  مقالات Painter
  مقالات QuarkXpress
  مقالات InDesign
  مقالات Fireworks
  مقالات Lightroom
  مقالات Bridge
  مقالات آکروبات
  مقالات فلش
  مقالات Expression Medial
  مقالات Expression Blend
  مقالات عمومی گرافیک دو بعدی
گرافیک سه بعدی و انیمیشن سازی
  مقالات تردی مکس
  مقالات مایا
  مقالات اتوکد
  مقالات عمومی گرافیک سه بعدی
میکس و مونتاژ
  مقالات After Effects
  مقالات پرمیر
  مقالات ادیوس
  مقالات SoundBooth
  مقالات Apple Reason
  مقالات Corel Video Studio
  مقالات Audition
  مقالات Pro Tools
  مقالات FLStudio
  مقالات SoundFordge
  مقالات عمومی ویرایش صوت و فیلم
پایگاه داده
  مقالات SQL Server
  مقالات اکسس
  مقالات MySQL
  مقالات اراکل
  مقالات عمومی پایگاه داده
شبکه
  مقالات اکسچنج سرور
  مقالات SharePoint Server
  مقالات ویندوز سرور 2003
  مقالات ویندوز سرور 2008
  مقالات ISA Server
  مقالات VMware
  مقالات MS Virtualization
  مقالات MCSE
  مقالات MCITP
  مقالات CCNA
  مقالات CCNP
  مقالات CCIE
  مقالات مایکروسافت System Center
  مقالات Wireless
  مقالات Wi-Fi
  مقالات WiMax
  مقالات Citrix
  مقالات DSL
  مقالات BizTalk
  مقالات Commerce Server
  مقالات Forefront
  مقالات Groove
  مقالات Communication Server
  مقالات Project Server
  مقالات Storage Server
  مقالات امنیت شبکه
  مقالات VoIP
  مقالات عمومی شبکه
آفیس و برنامه های تجاری
  مقالات Word
  مقالات Excel
  مقالات Access
  مقالات PowerPoint
  مقالات Visio
  مقالات OneNote
  مقالات Publisher
  مقالات Outlook
  مقالات Amalga
  مقالات Dynamics AX
  مقالات Dynamics CRM
  مقالات Dynamics GP
  مقالات Dynamics NAV
  مقالات Dynamics POS
  مقالات Dynamics RMS
  مقالات Dynamics SL
  مقالات عمومی آفیس و برنامه های تجاری

یک برنامه لاگین امن و حرفه ای با PHP طراحی کنید.

یک برنامه لاگین امن و حرفه ای با PHP طراحی کنید.

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



سرفصل‌ها :
۱ـ این اسکریپت چگونه کار می کند | پیشنیازها | الگوی بانک اطلاعاتی
۲ـ اتصال به بانک اطلاعاتی |‌ متغیرهای جلسات
۳ـ هسته اسکریپت | ورود کاربران
۴ـ کنترل مداوم اعتبار ورود | اطمینان از معتبر بودن اطلاعات جلسات

۱ـ این اسکریپت چگونه کار می کند ؟

در این قسمت می خواهم برایتان دلیل انتخاب این متد برای لاگین امن را برایتان توضیح دهم فراموش نکنید که اصولا امنیت قانون ندارد و شما نیز با استفاده از تجربیات و توانایی های هوشی خود باید به فکر توسعه و طراحی موارد مشابه و امن تر نمائید و به هیچ وجه به این حد بسنده نکنید:
/tmpکاربرانی که قادرند تا به سرور دست یابی داشته باشند می تواند جلسات معتبر لاگینها را از شاخه پیش فرض
که به منظور ذخیره سازی اطلاعات جلسات استفاده میشود مشاهده نمایند روش جلوگیری از این نوع حمله کنترل آی پی می باشد.
کسانی که بر روی میزبان شما سایتی دارند قادرند جلسات معتبر برای سایت شما تولید کنند توجه بفرمائید که برخی سایتها سرورهای اختصاصی دارند که به لحاظ امنیتی بسیار مطلوبترند مثل سایت پرشین بلاگ
برخی از اون آدمایی که به قول خودمون آخرشن و اند حکن می تونن شبکه رو بو بکشن و کوکی‌ها رو بقاپن
کنترل آی پی این مشکل رو هم حل می کنه

۲-۱ـ اما پیش نیازها

شما اول از همه باید بدونین که چه اطلاعاتی از کاربران قرار که در سایت ذخیره بشه در این مثال برای سهولت آموزش ساده ترین شکل ممکن رو فرض قرار دادم ضمنن چون الان همه دیگه پی اچ پی ۴٫۱ به بالا دارن من هم از استفاده کردم.

الگوی بانک اطلاعاتی ـ۱-۳

این فقط یک مثال ساده با ساختاری مناسب برای مدیریت اگر که مایلید این مثال را برای کاربران ثبت نام شده استفاده کنید می توانید ستونهای را به دلخواه اضافه کنید
من الگوی بانک اطلاعاتی را که از مای اس کیو ال استفاده می کنه اینجا گذاشتم شما می تونین از دیگر بانکهای اطلاعاتی نیز استفاده کنید: 

 CREATE TABLE member (
id int NOT NULL auto_increment,
username varchar(20) NOT NULL default ”,
password char(32) binary NOT NULL default ”,
cookie char(32) binary NOT NULL default ”,
session char(32) binary NOT NULL default ”,
ip varchar(15) binary NOT NULL default ”,
PRIMARY KEY (id),
UNIQUE KEY username (username)
);


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

۲ـ اتصال به بانک اطلاعاتی

 


function &db_connect() {

require_once ‘DB.php’;

PEAR::setErrorHandling(PEAR_ERROR_DIE);

$db_host = ‘localhost’;
$db_user = ‘root’;
$db_pass = ”;
$db_name = ’shaggy’;

$dsn = ”mysql://$db_user:$db_pass@unix+$db_host/$db_name”;

$db = DB::connect($dsn);

$db->setFetchMode(DB_FETCHMODE_OBJECT);
return $db;

}


این تابع شما را به بانک اطلاعاتی متصل می کند و یک اشاره گر به شی بانک اطلاعاتی پیر باز می گرداند

۲-۲ـ متغیرهای جلسات:

برای سهولت در امر دستیابی به اطلاعات کاربران من اون رو یک متغیر جلسه ثبت می کنم ولی برای جلوگیری از پیغام خطا و همچنین ست کردن برخی پیش فرض ها از تابع زیر استفاده می کنم:


function session_defaults() {
$_SESSION['logged'] = false;
$_SESSION['uid'] = 0;
$_SESSION['username'] = ”;
$_SESSION['cookie'] = 0;
$_SESSION['remember'] = false;
}


برای ست کردن یه مقادیر پیش فرض از تابع بالا و برای چک کردن از تابع زیر  

 if (!isset($_SESSION['uid']) ) {
session_defaults();
}

رو فرا خوانی کنیمsession_startالبته فراموش نمی کنیم که قبل از اینها باید تابع

۳ـ هسته اسکریپت:

برای ایجاد یکپارچگی ساده تر با دیگر اسکریپتها و ساخت مدوله شده تر هسته اسکریپت رو یک آبجکت با ظاهری خیلی ساده می سازم

 

class User {

var $db = null; // PEAR::DB pointer
var $failed = false; // failed login attempt
var $date; // current date GMT
var $id = 0; // the current user’s id

function User(&$db) {

$this->db = $db;
$this->date = $GLOBALS['date'];

if ($_SESSION['logged']) {
$this->_checkSession();
} elseif ( isset($_COOKIE['mtwebLogin']) ) {
$this->_checkRemembered($_COOKIE['mtwebLogin']);

}

}


این کلاس که تعریف میشه آبجکت ما رو میسازه البته این کاملا مدوله شده نیست اما یک تاریخ مشکل بزرگی نیست و شما می تونین اونو با اسکریپتهایی که بقیه دوستان نوشتن به صورت شمسی تولید کنید در اینجا ما چنین چیزی رو می سازیم:

 $date = gmdate(”‘Y-m-d’”);
$db = db_connect();
$user = new User($db);

 حالا برای روشن شدن هدف کد یعنی لاگین کردن تلاش می کنیم ما ابتدا کنترل می کنیم که آیا کاربر لاگین کرده یا نه اگر این کار رو کرده بود ما جلسات رو چک می کنیم(فراموش نکنین که این یک کد امنیتی) وگرنه یک کوکی رو نام گذاری می کنیم برای کنترل کردن این به ما اجازه می ده که بینندگان سایت رو شناسایی کنیم

۳-۱ـ لاگین کردن کاربران:

برای اجازه دادن به کاربران برای لاگین کردن شما باید یک فرم وب بسازید پس از اعتبار سنجی فرم شما می تونید اعتبار کاربر رو برای تائید اطلاعات وارد شده کنترل کنید که برای اینکار از
$user->_checkLogin(’username’, ‘password’, remember) استفاده می کنیم
خاطر نشان می کنیم که یوزر نیم و پسورد البته نباید ثابت باشند و ریممبر یک مقدار بولین است که به کاربر اجازه می دهد تا با درست قرار دادن مقدار آن لاگین خودکار را فعال بسازد
 


function _checkLogin($username, $password, $remember) {

$username = $this->db->quote($username);
$password = $this->db->quote(md5($password));

$sql = ”SELECT * FROM member WHERE ” .
”username = $username AND ” .
”password = $password”;

$result = $this->db->getRow($sql);

if ( is_object($result) ) {
$this->_setSession($result, $remember);
return true;
} else {
$this->failed = true;
$this->_logout();
return false;
}

}

تعریف تابع باید در مکانی کنار کلاس تعریف شده یوزر باشه مانند تمام کدهای پائین در تابع از متدPEAR::DB’s quote استفاده کردم تا اطلاعات با امنیت کامل به بانک اطلاعاتی انتقال پیدا کنند و به صورت بی ختری نیز از آن رهای یابند و باز گردنند من از تابع ام دی فایو ترجیحا به جای توابع مای اسکیو ال استفاده کردم تا شما اگر مایل بودید بتوانید از بانکهای اطلاعاتی دیگر نیز استفاده کنید.
حلقه ور بهینه شده زیراکه یوزرنیم به صورت منفرد تعریف شده است نیازی به کنترل خطاهای بانک اطلاعاتی نیست زیراکه خطاهای پیشفرض قبلا در بالا ست شدند چنانچه آبجکت با رزالت بانک اطلاعاتی متچ شود لذا متغیر جلسات ست می شوند و مقدار ترو باز میگردد وگرنه مقدار فلد با ترو برابر می گردد شما می تونین اینجا یک دستور کنترلی قرار دهید تا پیغام سقوط عملیات لاگین رو اعلام کنه و برای انجام لاگ اوت برای این بیننده کافیست تا session_defaults() را اجرا کنیم

۳-۳ـ وضع کردن جلسه:

function _setSession(&$values, $remember, $init = true) {

$this->id = $values->id;
$_SESSION['uid'] = $this->id;
$_SESSION['username'] = htmlspecialchars($values->username);
$_SESSION['cookie'] = $values->cookie;
$_SESSION['logged'] = true;

if ($remember) {

$this->updateCookie($values->cookie, true);

}

if ($init) {

$session = $this->db->quote(session_id());
$ip = $this->db->quote($_SERVER['REMOTE_ADDR']);

$sql = ”UPDATE member SET session = $session, ip = $ip WHERE ” .
”id = $this->id”;
$this->db->query($sql);

}

}


این متد متغیر جلسه را ست می کند و همچنین اگر در خواست کوکی برای داشتن لاگین مسمتر (خودکار) ارسال شده باشد
همچنین این متد یک پارامتر دارد که معین می کند که این بار اول لاگین کردن است یا نه (از طریق فرم یا کوکی)
یا کنترل جلسه برای اولین بار نیست.

۴ـ لاگین خود کار:

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

 function updateCookie($cookie, $save) {

$_SESSION['cookie'] = $cookie;
if ($save) {

$cookie = serialize(array($_SESSION['username'], $cookie) );
set_cookie(’mtwebLogin’, $cookie, time() + 31104000, ‘/directory/’);
}

}


4-1ـ کنترل لاگین خود کار:

اگر کاربران لاگین خودکار را انتاخاب کرده باشند که به اسکریپت اجازه ذخیره کوکی را می دهد که کنترل می شه از طریق متد زیر 


function _checkRemembered($cookie) {

list($username, $cookie) = @unserialize($cookie);
if (!$username or !$cookie) return;

$username = $this->db->quote($username);
$cookie = $this->db->quote($cookie);

$sql = ”SELECT * FROM member WHERE ” .
”(username = $username) AND (cookie = $cookie)”;

$result = $this->db->getRow($sql);

if (is_object($result) ) {
$this->_setSession($result, true);
}

}

این تابع هرگز نباید توسط پیغام خطایی متوقف شود برای ساختن چیزهای امن تر با کوکی ها مقدار کوکی در کوکی ذخیر می شود نه پسورد کاربر یکی از این راه ها می تونه درخواست یک لغت عبور باشه برای ناحیه ای که به امنیت بیشتری نیاز دارد

۵-۵ـ مطمئن شدن از اعتبار جلسه:


function _checkSession() {

$username = $this->db->quote($_SESSION['username']);
$cookie = $this->db->quote($_SESSION['cookie']);
$session = $this->db->quote(session_id());
$ip = $this->db->quote($_SERVER['REMOTE_ADDR']);

$sql = ”SELECT * FROM member WHERE ” .
”(username = $username) AND (cookie = $cookie) AND ” .
”(session = $session) AND (ip = $ip)”;

$result = $this->db->getRow($sql);

if (is_object($result) ) {
$this->_setSession($result, false, false);
} else {
$this->_logout();
}

}


بالاخره آخرین قسمت کار ما کنترل می کنیم که آیا کوکی ذخیره شده در جلسه درست هست یا نه جلسه آی دی و آی پی کاربر با یک پارامتر که اجازه می ده که بفهمیم که این اولین بار لاگین کردن در سیستم هست بنابراین setSession فراخوانی مقدار آی پی و آی دی در جلسه بروز رسانی نشود که در بقیه موارد بطور معمول انجام می شود.

 



ارسال شده در مورخه : چهارشنبه، 14 بهمن ماه ، 1388   چاپ مطلب

آموزش تردی مکس


مرتبط با موضوع :

 آموزش PHP - قسمت سوم - متغیر ها  [يكشنبه، 19 تير ماه ، 1390]
 آموزش PHP - قسمت دوم - اولین برنامه  [يكشنبه، 19 تير ماه ، 1390]
 آموزش PHP - قسمت اول - نصب Xampp  [يكشنبه، 19 تير ماه ، 1390]
 ساخت يك صفحه پويای خطای 404 اختصاصی  [چهارشنبه، 30 تير ماه ، 1389]
 11منبع خوب برای یادگیری زبان PHP  [پنجشنبه، 2 ارديبهشت ماه ، 1389]
 کارتهای الکترونیکی با php و Mysql  [سه شنبه، 13 بهمن ماه ، 1388]
 نمایش متن بصورت تصویری در اینترنت  [سه شنبه، 13 بهمن ماه ، 1388]
 کوتیشن یا دابل کوتیشن؛ کی و کجا استفاده کنیم؟!  [سه شنبه، 13 بهمن ماه ، 1388]
 PHP و برنامه نویسی شی گرا  [سه شنبه، 13 بهمن ماه ، 1388]
 چگونه IP در PHP لاگ می شود  [سه شنبه، 13 بهمن ماه ، 1388]


تبلیغات چپ
پکیج Windows Server 2008 MCITP Enterprise Administ
آخرین مقالات
· ۱۴ تغییراتی احتمالی که در iPhone 5 خواهید دید!
· روشهایی برای افزایش عمر باتری موبایل
· p1000 پرفروش ترین تبلت سامسونگ
· خالی کردن فضای هارد دیسک
· ۷ دلیل برای خرید مطمئن سامسونگ Galaxy Note
· معرفی لایف بوک ها ویژگی های مربوط به آنها
· معرفی ۱۰ فناوری برتر ماه گذشته در عرصه آی تی
· معرفی دلایلی برای خرید گوشی با قابلیت ویندوز فون
· SCX-4729FD چاپگر چندکاره سامسونگ
· تعریف سیستم عامل اندروید و مهمترین ویژگی های آن
· لپ تاپ های Samsung Series 7 Game 3D
· پرطرفدارترین موبایل های هوشمند تا بهار ۲۰۱۲
· Sony Unveila Xperia Sola و صفحه نمایش شناور
· کنترل دستگاه اندرویدی توسط دسکتاپ
· 10 تبلت برتر بهار سال 2012
· Optimus 3D Max دومین گوشی سه بعدی ال جی به عنوان محصولی بی همتا
· G6-1160EE لپ تاپ باقابلیت و پرمخاطب HP
· راه های افزایش امنیت در اینترنت
· آموزش مراحل پاک کردن آرشیو یاهو مسنجر
· مانیتورهایی مخصوص بازی های ویدئویی و گیمرها
· نکات مهم در مورد سرچ گوگل
· معرفی بهترین تبلت های بازار از نظر کیفیت نمایشگر
· معرفی رایانه ها و تبلت های سازگار با ویندوز ۸
· ویژگی های Galaxy note 10.1 شرکت سامسونگ
· مهمترین دلایل خرابی سریع لپ تاپ ها

[ موارد بیشتر در بخش اخبار و تازه ها ]
پربیننده ترین مقالات
· استاندارد های ISO/IEC 17799 و BS7799-2
· توصیه های مهم امنیتی در مورد لینوکس و یونیکس
· گرما در cpuها
· معماری client/Server در اینترنت
· آشنایی با سیستم فایل GNU/Linux
· یک MAC BOOK PRO جدید در بازار ایران
· معرفی دو مدل لپ تاپ با قابلیت سونی سری F
· F137HG/B، لپ تاپ سایز بزرگ سونی در بازار داخلی
· اندر احوالات کرک و کپی رایت
· EE31FX/BJ، لپ تاپ ارزان قیمت سونی در بازار داخلی
· معرفی z216 FX/L از لپ تاپ های سونی
· مدل MD313LL/A ، Macbook ارزان قیمت در بازار داخل
· تاریخچه کامپیوتر
· مشاهده آنلاین سوابق بیمه شدگان
· چگونگی اختصاص دادن یک آدرس IP استاتیک به یک رایانه در شبکه در ویندوز Xp ، Vista یا Seven
· آشنایی با روتر و سوئیچ(router and switch)
· الگوریتم های مرتب سازی آرایه ها
· تاریخچه ی پیدایش زبان های برنامه نویسی شی گرا
· GPS چیست؟
· به روز رسانی ویندوز 7 با نرم افزار Windows Update
· پایگاه داده های سیار Mobile database
· بازیابی رمز عبور در ویندوز 7
· معماری سرویس گرا Service Oriented Architecture چیست؟
· انتقال اطلاعات با Replication در SQL Server
· آموزش نرم افزار Virtual Box

[ موارد بیشتر در بخش اخبار و تازه ها ]
مقالات تصادفی
· شما هم میتوانید یک غذا خوشمزه تهیه کنید
· ازتلفن همراه متنفرم
· کدام یک بهتر است؟ Yahoo ,Hotmail ,Gmail یا AOL؟
· اضافه نمودن فعالیت خلاصه پروژه ( Project summary ) در مایکروسافت پراجکت ۲۰۱۰
· رابطه iPad و ۵۰۰ سایت برتر دنیا
· تحلیل گر گوگل
· چگونه وبلاگ خوبی داشته باشیم؟
· کلاینت دسکتاپ گوگل ویو(Google Wave)
· بلوتوث چیست؟ از کجا آمده، به کجا میرود؟
· آموزش سخت افزار - بخش1
· رنگ در دنیای وب : رنگ های خنثی
· اسمبل كردن كامپيوتر
· مایکروسافت قابلیت Autorun سیستم عامل ویندوز را غیر فعال کرد!
· کلمات عبور ذخیره شده شما در مرورگر کروم تا چه حد ایمن هستند؟
· تجسم آینده اینترنت از نگاه پروفسور لئونارد کلین‌راک
· سرویس جدید گوگل، یک عکس بکارید، رشد آن را تماشا کنید
· تجارت الکترونیک چیست ؟
· حفره امنیتی در لپ تاپ های اپل، هک باتری می تواند باعث نابودی آنها شود
· اندروید با تراشه های کم مصرف اینتل سازگار می شود.
· 9 تکنیک ساده به منظور کاهش خطاهای رایج در استفاده از ایمیل
· ترفندی در ویستا و ویندوز 7
· نمایش درایو ویندوز XP در کنار دیگر پارتیشن ها در ویندوز 7
· کاغذ الکترونیک با قابلیت اتصال به اینترنت
· امنیت تجهیزات شبکه
· اینترنت چیه ؟

[ موارد بیشتر در بخش اخبار و تازه ها ]
امتیاز دهی به مطلب
امتیاز متوسط : 1
تعداد آراء: 1


لطفا رای مورد نظرتان را در مورد این مطلب ارائه نمائید :

عالی
خیلی خوب
خوب
متوسط
بد

موضوعات مرتبط

مقالات عمومی وب

آموزش فتوشاپ ، آموزش رتوش