گیک فارسی

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

اعتبار سنجی (Login) کاربر با استفاده از HTTP Authentication و PHP

نویسنده:
15 ژانویه 16

توی یکسری از سناریو‌ها نیاز هست که بدون استفاده از فرم ورود به سایت با استفاده از نام کاربری و گذرواژه دسترسی کاربر را اعتبارسنجی کنیم. یکی از موارد میتونه سایت‌های اشتراک فایل باشه که باید دسترسی کاربر به فایل ، شارژ حجمی حساب کاربر و موارد دیگه را اعتبار سنجی کنیم.

Authentication

HTTP Authentication یا اعتبار سنجی از طریق پروتوکل HTTP مدت زمان زیادی هست که وجود داره و در گذشته خیلی استفاده میشده و حالا خیلی کم‌رنگ شده. اما برای سناریو‌هایی که در پاراگراف بالا اشاره کردم بهترین انتخاب هست و با کمک PHP میتونیم اعتبارسنجی را بدون نیاز به htpasswd. و فایل htaccess. انجام بدیم :

$username = null;
$password = null;

if (isset($_SERVER['PHP_AUTH_USER'])) {
 $username = $_SERVER['PHP_AUTH_USER'];
 $password = $_SERVER['PHP_AUTH_PW'];
} elseif (isset($_SERVER['HTTP_AUTHORIZATION'])) {
 if (strpos(strtolower($_SERVER['HTTP_AUTHORIZATION']),'basic')===0)
 list($username,$password) = explode(':',base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}

if (is_null($username)) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'You need login information in http authentication format';
    die();
} else {
    echo "<p>Hello {$username}.</p>";
    echo "<p>You entered {$password} as your password.</p>";
}

نکته: برای ارسال نام کاربری و گذرواژه با URL باید با فرمت زیر عمل کرد :

http://user:pass@example.com/path-to-file

نکته: در این روش نام کاربری و گذرواژه عبور به صورت متن خام Plain Text ارسال میشه و برای فراهم کردن امنیت باید از SSL استفاده کنیم یا از روش Digest Authentication استفاده کنیم که به سر راستی روش Basic که شرح داده شد نیست اما همه نرم‌افزار ها و مرورگر ها ازش پشتیبانی میکنن.