نام کاربری :   
کلمه عبور :   
[فراموشی رمز توسط ایمیل]
صفحه اصلی > دانش و فناوری > علوم کاربردی 


  چاپ        ارسال به دوست

امنیت در PHP قسمت سوم

درخواست یک صفحه محافظت شده با HTTP Authentication

در بالا یک صفحه محافظت شده نوشتیم. در اینجا ان صفحه را از درون صفحه ای دیگر باز خواهیم کرد.

<?php
 //open socket
 if(!($fp = fsockopen("localhost", 80)))
 {
print("Couldnt open socket!&lt;br>\n");
exit;
 }
 //make request for document
 
 fputs($fp, "HEAD /test/phpsecurity/protecthttp.php HTTP/1.0\r\n");
 //send username and password
 fputs($fp, "Authorization: Basic " .base64_encode("mia:secret") ."\r\n");
 
 //end request
 fputs($fp, "\r\n");
 
 //dump response from server 
fpassthru($fp);
?>

در خط 13، نام کاربری و پسورد را اینگونه تغییر دهید:

 

base64_encode("youyou:secret")

احتمالا پیغامی اینگونه را دریافت می کنید:

 

HTTP/1.1 401 Unauthorized Date: Wed, 27 Feb 2008 23:43:32

 

Apache/2.0.59 (Win32) PHP/4.4.7 X-Powered-By:

 

PHP/4.4.7 WWW-Authenticate: Basic realm="PHPEveryDays

 

Protected Area" Connection: close Content-Type: tex

 

لاگین با استفاده از phpSecureLogin

مقدمه

تازه کارید؟ یا وقت نوشتن کد سیستم لاگین را ندارید؟ کلاسی وجود دارد که کمک می کند سیستم لاگین را راحت بسازیم. این کلاس PhpSecureSite است. به راحتی می توانید انرا در سایتتان به کار ببرید.

PhpSecureSite یک سیستم احراز هویت(authentication)  و کنترل کننده جلسه (session-handling) است. PhpSecureSite فقط برای استفاده در صفحات وب نوشته شده است. طوری طراحی شده تا کاملا با برنامه تحت وب مجتمع شود، بنابراین باید برای قسمت نمایش ان (مثلا، صفحه لاگین) خودتان کد بنویسید.

برای درک سیستم کنترل کننده جلسه، باید نگاهی به نحوه کار وب سرور داشته باشیم. پروتکل HTTP، یعنی زبان ارتباطی مرورگر و وب سرور، یک پروتکل به اصطلاح stateless است (وضعیت را نگهداری نمی کند). به این معنا که هنگامی که وب سرور درخواستی برای یک صفحه را دریافت می کند، بدون هیچ سوالی، ان صفحه را بر می گرداند. وب سرور نه می داند و نه علاقه ای دارد بداند چه کسی چه صفحه ای را درخواست داده است. کنترل کننده جلسه مشخص می کند کدام کاربر صفحه را درخواست داده است، اینگونه می توان صفحه را برای هر کاربر به صورت پویا و سلیقه ای ساخت.

به وضوح، استفاده اصلی از PhpSecureSite برای کنترل دسترسی به صفحات وب است، اما موارد استفاده دیگری هم دارد. همراه PhpSecureSite ماژول هایی با قابلیت های دسترسی به متغیر های جلسه (متغیر ها یی که برای جلسه ذخیره و در تمام صفحات قابل دسترسی اند)، دسترسی به لیست کنترل (control list) (برای تعیین دسترسی کاربران به صفحه ها) و موارد دیگر، وجود دارد.

این کلاس را می توانید از ادرس ftp://oss.codepoet.no/phpsecuresite/phpsecuresite-0.1.2.tar.bz2 دانلود کنید.

 

نصب PhpSecureSite

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

1.      PhpSecureSite را از ادرس ftp://oss.codepoet.no/phpsecuresite/phpsecuresite-0.1.2.tar.bz2 دانلود کنید.

2.      انرا درون پوشه تست، مثلا www/test/phpsecuresite قرار دهید.

3.      انرا استخراج کنید، پوشه ای شبیه phpsecuresite-0.1.2  خواهیم داشت.

4.      برای راحتی انرا به phpsecuresite تغییر نام دهید. باید ساختار فایلی شبیه تصویر داشته باشیم:

clip_image002[4]

5.      در گام بعد پایگاه داده را اماده می کنیم. پایگاه داده کنونی تان را باز کنید. برای این مثال از پایگاه داده test استفاده می کنیم.

6.      زبانه import در phpmyadmin را بزنید.

clip_image004[4]

7.      دستورات روی صفحه را ادامه دهید. در صورت موفقیت باید این صفحه ظاهر شود.

clip_image006[4]

پیکره بندی PhpSecureSite

بعد از نصب PhpSecureSite، باید پیکره بندی ان را انجام دهیم. در PhpSecureSite تعداد زیادی آپشن (گزینه) برای پیکره بندی وجود دارد، در اینجا ما فقط پیکره بندی پایگاه داده و authentication را انجام می دهیم.

پیکره بندی پایگاه داده

1.      فایل database.php را از درون www/test/phpsecuresite/phpsecuresite/phpss/config باز کنید.

2.      در خط احتمالا 36، مطمئن شوید پایگاه داده mysql انتخاب شود.

 

$phpss_cfg["phpss"]["database_module"]  = "mysql";

3.      سپس، تنظیمات Mysql را اینگونه مشخص کنید:

$phpss_cfg["database"]["mysql"] = array("modulefile" => PHPSS_ROOT_FS . "/modules/database/mysql.php",
 
 // database server 
address (fully-qualified domain name or ip address)
 
"hostname" => "localhost",
 // tcp port number to connect to 
 
 //(mysql uses 3306 by default) 
"port" => 3306,
 
 // username and password to connect with
"username" => "root",
"password" => "secret",
 
 // the database to use
"database" => "test" 
);

پیکره بندی authentication

1.      فایل authentication.php را از درون www/phpsecuresite/phpsecuresite/phpss/config باز کنید.

2.      ماژول authentication را مشخص کنید:

$phpss_cfg["phpss"]["auth_module"]  = "database";

3.      فرمت پسورد را مشخص کنید:

$phpss_cfg["phpss"]["auth_pwtype"]  = "md5";

مدیریت PhpSecureSite

حالا باید کاربرمان را در پایگاه داده تعریف کنیم. کاربری را به عنوان مدیر (administrator) در پایگاه داده تولید می کنیم:

clip_image008[4]

clip_image010[4]

ساخت فرم لاگین

در اینجا، 3 فایل می سازیم. form.html برای لاگین، login.php برای اعتبارسنجی و secretpage.php به عنوان یک صفحه محافظت شده.

 

 
form.html
<html>
<head>
<title>Login 
Page</title>
</head>
<body>
<form 
action="login.php" method="post">
Usename: 
<input type="text" name="username"><br>
Password: <input type="text" 
name="password"><br>
<input type="submit" 
value="Login">
</form>
</body>
</html>

 

 
login.php 
<?php
require 
("./phpsecuresite/phpss/phpss.php");
 
$status 
= phpss_login($_POST["username"],$_POST["password"]);
 
switch($status){
 case 
"phpss_login_allow":
 
header("location:secretpage.php");
 
exit();
 
break;
 
 
 case 
"phpss_login_authfail":
 
print("Your username or password was wrong!");
 
break;
 
 
 case 
"phpss_login_bruteforce_account_lock":
 
print("Locked, you are naughty!");
 
break;
 
 
 case 
"phpss_login_bruteforce_iplock":
 
print("Your IP Locked, you are naughty!");
 
break; 
 
 
 
default:
 
print("Not Known");
 
 
}
 
?>

 
secretpage.php
<html>
<head>
 
<title>Secret Page</title>
</head>
<body>
Wellcome!
</body>
</html>

 

با مرورگرتان ادرس http://localhost/test/phpsecuresite/form.html را باز کنید. نام کاربری اشتباه وارد کنید و login  را بزنید.

clip_image012[4]

محافظت از یک صفحه

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

فایلی با نام global.php بسازید. کد زیر را در ان کپی کنید:

<?require ("./phpsecuresite/phpss/phpss.php");
function authwrapper(){
 
$status = phpss_validate();
switch($status){
case "phpss_validate_allow":
 break;
case "phpss_validate_acl_deny":
 exit("You dont have access right");
 break;
 
case "phpss_validate_nosession":
 exit("Login, Please");
 break;
 
case "phpss_validate_hijack_fail":
 exit("Whats going on your IP?");
 break;
case "phpss_validate_ipaccess_deny":
 exit("Your IP blocked");
 break;
case "phpss_validate_timeout_fail":
 exit("You session is time out. Relogin, please.");
 break;
default:
exit("Sorry!");
}
}?>

صفحه محافظت شده را باز کنید. اول صفحه، این کد را وارد کنید:

 

<?

 

require "./global.php";

 

authwrapper();

 

?>

اگر کاربری بدون لاگین کردن مستقیما به صفحه محافظت شده برود:

clip_image014[4] clip_image015[4]

صفحه خروج (Logout)

در انتها باید صفحه ای برای خروج کاربر از سیستم طراحی کنیم. فایلی به نام logout.php ساخته و کد زیر را در ان کپی کنید:

<?require "./global.php";
authwrapper();
phpss_logout();
header("location:form.html");
?>

 


٢٠:٣٨ - 1390/12/28    /    شماره : ٦٥٩    /    تعداد نمایش : ٦٩٤



خروج





   مطالب مرتبط
بازدیدها
امروز :3208
کل بازديدها :16166228
بازديدکنندگان آنلاين :14
بازديدازاین صفحه :169855