با فایل .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 (۰)

Leave a Reply