۱۳۸۷-۰۳-۹
استاندارد دفع/کنترل رباتهای تحت وب
* یعنی من دو بار این مطلبو نوشتم و هربار موقع پابلیش برق رفته ها :((
* یه ضرب المثل امنیتی داریم که شاعر میگه:
“Security through obscurity” is not reliable.
اگه یادتون باشه من قبلا یه مطلب نوشته بودم در مورد رباتهای دنیای وب یا Web Botها. اینکه کلا چند نوع ربات تحت وب داریم، کدومهاش رباتهای خوش ساخت هستند و کدوماش به اصطلاح بدخیم هستند؟ در ادامه اون متن هم نوشته بودم که هر کدوم از این رباتها ممکنه چه نوع مشکلاتی رو برای مدیر وب فراهم کنن. در پایانش هم گفته بودم که راه خلاصی از دست این مشکلاتی که بیان کردیم رو بعدا میگم که البته هیچ وقت فرصت نشد اون بحث رو ادامه بدم. تا الان که حالا در ادامه میگم چرا مطرحش کردم..
پس بهتره ابتدا یه دور برید این پست و صورت مسئله رو بخونین و در پاراگرافهای زیر هم راه حل آورده شده این لحن جدیش واسه این بوده که این بخش متعلق به یک گزارش تخصصی بوده که خودم راجع به امن سازی وب سرورها نوشتم:-)
* خوشبختانه روشی برای مدیران وب و یا وب مسترها وجود دارد که تاثیرات منفی بیشتر رباتها را روی وب سایتشان کم کنند و یا از بین ببرند. بدین منظور، یک سری قراردادها به نام استاندارد دفع رباتها (REP) ایجاد شده است. با اینکه REP یک استاندارد رسمی برای اینترنت محسوب نمی شود، ولی توسط اغلب رباتهای خوش نیت یا خوش ساخت پشتیبانی میشوند (در اینجا منظور رباتهایی هستند که در اغلب موتورهای جستجو وجود دارند.)
مدیران وب و آنهایی که مایلند فعالیتهای رباتها را روی وبسرورشان محدود کنند، باید یک فایل متنی به نام robots.txt ایجاد کنند. نام فایل همیشه باید همین باشد و در دایرکتوری root وبسرور قرار داده می شود. به علاوه، فقط یک فایل برای هر وب سایت مجاز است. توجه داشته باشید که فایل robots.txt استانداردی است که به صورت ارادی توسط برنامهنویسان رباتهای خوش نیت پشتیبانی میشود ولی رباتهای مهاجم (مانند EmailSiphon و Cherry Picker) این استاندارد را نادیده میگیرند.
robots.txt یک فایل ساده متنی است که شامل چند کلید اصلی و سپس مشخصات فایل است. هر خط از فایل یا خالی است و یا شامل یک کلید اصلی و اطلاعات مرتبط با آن میباشد. این کلیدها جهت آگاهی رباتها از بخشهایی از وب سایت که باید از نظر فهرست بندی استثناء شوند، استفاده میشوند.
برای ایجاد این فایل، کلیدهای زیر قابل استفاده هستند:
- User-agent: نام ربات یا اسپایدر است. مدیر وب میتواند یک یا چند نام در اینجا بنویسد. نامها حساس به حروف نیستند (به عبارت دیگر googlebot و GOOGLEBOT و GoogleBot یکسان تلقی میشوند)
یک * مشخص میکند که این خط، یک رکورد پیش فرض است و باقی رباتها را نیز در بر می گیرد. برای مثال اگر فقط بنویسید GoogleBot و بعد * بگذارید، سایر رباتها مشابه نیز فیلتر میشوند.
- Disallow: به رباتهایی که در بخش User-Agent نامبرده شدهاند، میگوید که چه بخشهایی از وب سایت قابل جستجو نیست. برای مثال images/ به رباتها میگوید که هیچ فایلی را در دایرکتوری images و یا زیر دایرکتوریهای آن باز و یا فهرستبندی نکنند. بنابراین برای مثالimages/special/ توسط رباتهای محروم شده فهرست نمیشود.
توجه کنید که do/ به همه دایرکتوریهایی که با do شروع میشوند اعمال میشود (مانند do/ documents/، docs/ و …) در حالیکه /do/ فقط به دایرکتوری که نام آن do است اعمال میشود. همچنین مدیر وب میتواند یک فایل خاص را مشخص کند. برای نمونه میتواند بنویسد: /mydata/help.html تا از دسترسی این فایل توسط رباتها جلوگیری کند.
ورودیای که فقط شامل / باشد میگوید که هیچ چیز از وب سایت مذکور نباید توسط رباتها قابل دسترسی باشد. حداقل باید یک disallow برای User-agent وجود داشته باشد.
راههای زیادی برای استفاده از فایل robots.txt وجود دارد. برخی مثالهای ساده آن عبارتند از:
مثالی جهت نپذیرفتن کلیه رباتها از دایرکتوریهای خاص:
User-agent: *
Disallow: /images/
Disallow: /banners/
Disallow: /Forms/
Disallow: /Dictionary/
برای نپذیرفتن کلیه رباتها از کل دایرکتوریهای وب سایت
User-agent: *
Disallow: /
جهت نپذیرفتن ربات خاصی (مثلا Googlebot) از دسترسی به یک صفحه مشخص
User-agent: GoogleBot
Disallow: tempindex.html
نکته مهم: توجه داشته باشید که robots.txt برای هر کسی قابل استفاده است. به عبارتی دیگر یافتن این فایل امری ساده است. بنابراین یک مدیر وب باید دقت کند که نام فایلها و یا پوشههای مهم را مشخص نکند و اگر لازم است این فایلها توسط رباتها قابل دسترسی نباشند بهتر است از صفحات رمز دار (Password Protected Pages) استفاده کنید تا توسط رباتها جستجو نشوند.
اگر اطلاعاتی که روی وب سرور قرار دارد، حساس است، از این فایل استفاده نکنید مگر اینکه ترافیک وب سایت بالا باشد. در اینصورت، توجه کنید که علاوه بر قرار دادن نام آنها در این فایل از سایر مکانیزمهای هویت شناسی (authentication) جهت هویت سنجی کاربری که بدانها دسترسی پیدا کرده است، استفاده کنید. نیز باید این خطر را بپذیرید که در این حالت، به مهاجم این شانس اعطا شده است که بدون هیچ زحمتی، دست کم نام فولدرهای مهم و یا مسیر برخی از فایلهای حساس را بداند.
* خوب این چیزی بود که باید مینوشتم. به طور خلاصه این فایل به عنوان راهی پیشنهاد شد که تاثیر رباتها رو روی وب سرور کاهش بده. اما طبق معمول این تکنولوژی هم مورد سوء استفاده قرار گرفت:) بهانه ام برای نوشتن این متن، این مطلب بود: سایت ها و مقالات مخفی اینترنت را چگونه بیابیم؟!
توی این متن اصلا اشاره نشده که هدف از این فایل این نیست که یه مرجعی باشه که شما اطلاعات مخفی یک سایت رو بیابید بلکه این تکنولوژی نیتش خیر بوده طفلک اما هکرها اونو مورد سوء استفاده قرار دارند چون اغلب احساس میکنن ممکنه اطلاعات مربوط به پیکربندی سایت و یا سرور ممکنه توی مسیرهایی باشه که توسط این فایل مشخص شدن.
برای مثال به این آدرس برید و فایل Robots.txt مربوط به سایت مایکروسافت رو نگاه کنن:)
* چند توصیه مهم:
۱- همون طور که گفتم اگه داده های سایتتون از نظر امنیتی حساس محسوب میشن از این فایل برای مخفی کردن اونها استفاده نکنید! همونطوری که اون ضرب المثل میگه ایجاد ایمنی از طریق اختفا هیچ وقت قابل اتکا نیست. چون ابزارهایی هستند که ظرف چند ثانیه کلیه موارد مخفی روی یک وب سرور رو واسه تون ردیف می کنن.
۲- از روشهای دیگه برای مخفی کردن اینگونه اطلاعات استفاده کنید. حتما نامهای غیرمعمول روی اونها بگذارید و اطلاعات را رمزنگاری (Encryption) کنید.
۳- از قرار دادن هر نوع سرویس و یا برنامه اضافی روی وب سرور اکیدا بپرهیزید و سعی کنید غیر از پورتهای مربوط یه وب سایت (یعنی پورت ۸۰ برای http و پورت ۴۴۳ برای SSL/HTTPS) تمامی پورتهای دیگه رو مسدود کنید.
۴- روی فایلها و یا فولدرهای حساس قویا، دسترسی های مربوط به وب سرور (مثلا مجوزهای IIS و یا آپاچی) و همین طور اختیارات NTFS رو تنظیم کنید تا کاربران اینترنت (یعنی کاربران anonymous کارگزار) رو اکیدا از دسترسی به اینگونه اطلاعات محروم کنید.

