با فایل .htaccess کنترل را در دست بگیرید – قسمت اول
مهر ۱۱م, ۱۳۸۸
چند پست قبل یکی از کاربردهای این فایل رو بررسی کردم، اما در این پست میخوام بطور کامل در مورد این فایل صحبت کنم.
بدلیل نیاز طراحان و برنامهنویسان وب برای تغییر و کنترل وب سرور آپاچی بسته به نیاز خود و با هدف ایجاد کنترل دسترسی بر روی شاخههای مختلف فایلهای .htaccess (یا hypertext access یا distributed configuration files) بوجود آمدند. چون در سیستم عامل های Unix فایلهایی که با نقطه (dot) شروع میشوند مخفی هستند، نام این فایل با نقطه شروع میشود و بهمین دلیل این فایل در سیستم عامل ویندوز بطور معمولی قابل ایجاد نیست. اگر از سیستم عامل ویندوز استفاده میکنید، برای ساختن این فایل میتوانید از این اسکریپت php کمک بگیرید:
<?php
$fp=fopen('.htaccess','w+');
fclose($fp);
?>
این فایل در هر شاخه میتواند ایجاد شود و قوانین آن بر روی شاخه جاری و تمام زیرشاخهها اعمال میشود. از عمدهترین موارد استفاده فایل .htaccess میتوان به تصدیق و اجازه (Authentication و Authorization )، ترجمهی URLها و مدیریت خطاها اشاره کردکه در زیر به شرح آنها خواهم پرداخت.
تصدیق کاربر (Authentication)
امکانی که به شخصیسازی صفحات وب کمک میکند.
AuthType Basic
AuthUserFile /usr/username/.htpasswd
AuthName “My Secret Area”
Require valid-user
خط اول، توع تصدیق را Basic معرفی میکند. دومین خط مسیر کامل (و نه نسبی) فایل حاوی نام کاربری و رمزعبور است. لیست نامهای کاربری و رمزهای عبور در این فایل که با نام .hpasswd مشخص میشود بصورت زیر است:
username1:password1
username2:apr1.KB4i…ykeDUewbZvNgqrlXnecld0
درمورد دومین خط رمزعبور باید بگم که شما میتونید رمزعبور خودتون رو بصورت کد شده توسط الگوریتم MD5 بگذارید. سایتهایی هستند که این کار رو انجام میدهند مثل این.
سومین خط این کد، توضیحی است که به کاربر درمورد درخواست رمزعبور نمایش داده میشود.
و بالاخره خط چهارم این امکان را فعال میکند.
اجازههای دسترسی (Authorization)
که با دو دستور Allow یا Deny و توسط ماژول mod_access صورت میگیرد. این اجازهها میتوانند بر روی نام میزبان، IP کاربر، نوع درخواست(یا Environment Variables) صورت گیرند. به مثال توجه کنید:
Allow from apache.org
Deny from 10.1.2.3
Deny from 10.1
Deny from 10.1.0.0/255.255.0.0
خط اول فقط به میزبان apache.org اجازه استفاده میدهد. خطوط بعدی اجازه را روی IP تعریف میکند.
SetEnvIf User-Agent Chrome let_me_in
Order Deny,Allow
Deny from all
Allow from env=let_me_in
این چهار خط بطور کلی دسترسی را برای همه کاربران می بندد! البته کاربرانی که با مرورگر Chrome وارد شده باشند، اجازه ورود دارند! جالب است، نه؟! )برای اینترنت اکسپلورر: MSIE، موزیلا فایرفاکس: Firefox و اپرا:Opera تایپ کنید)
در مورد Order، همین طور که از نامش مشخص است، اولویت دستورهای Deny و Allow را مشخص میکند. شاید در این دستور نیازی به آن نباشد ولی درصورت نوشتن کدهای زیاد برای دسترسی های مختلف، ترتیب اولویتها نیاز به مشخص شدن دارند.
Order Allow,Deny
به این معناست که تمام درخواستهایی که با حداقل یکی از گزینه های Allow مطابقت داشته باشند، اجازه ورود دارند. سپس درخواستهایی هم که با Deny مطابقت دارند ریجکت شده و بعد از آن تمام درخواستها ریجکت میشوند.
Order Deny,Allow
نیز به این معناست که اول از تمام درخواستهایی که با Deny مطابقت دارند جلوگیری میشود. سپس بقیه درخواستها پذیرفته میشوند. با این حساب کد زیر از نظر عملکرد شبیه کد بالاست:
SetEnvIf User-Agent MSIE let_me_in
Order Allow,Deny
Allow from env=let_me_in
و جدول خلاصه:
| نتیجه در Allow,Deny |
نتیجه در Deny,Allow |
مطابقت |
|
پذیرفته میشود |
پذیرفته میشود |
فقط با Allow |
|
رد میشود |
رد میشود |
فقط با Deny |
|
رد میشود |
پذیرفته میشود |
بدون مطابقت |
|
رد میشود |
پذیرفته میشود |
با هر دو |
نکته ۱: تمام درخواستهایی که توسط Deny رد میشوند، با خطای ۴۰۳ (Forbidden) بازگردانده میشوند.
نکته ۲: چنین شرط هایی که مرورگر کاربر را چک میکنند، امنیت ضعیفی دارند چون UserAgent یا هدر مشخص کننده مرورگر کاربر، قابل تغییر است!
Posted in دستهبندی نشدهها | Comments (۰)