PDA

View Full Version : سوال: چطور میشه روبوت هایی رو که صفحات ما رو باز می کنن شناسایی کرد



rastac
سه شنبه 28 خرداد 1392, 19:50 عصر
سلام
من در صفحاتم از یه روشی استفاده کردم که با هر بار باز شدن صفحه یک شماره انداز تعداد بازدید از صفحه رو اضافه میکنه.
اما مشکل اینجاست که روبوتها بیش از حد لطف می کنن و صفحات ما رو باز می کنن. در نتیجه آمار بازدید کنندگان ما به طور غیر واقعی بالا میره.
چطور میشه در هر بار باز شدن صفحه روبوتها رو شناسایی کرد و برای اضافه شدن شماره انداز شرط گذاشت؟
ممنون

rastac
سه شنبه 28 خرداد 1392, 22:10 عصر
دوستان کسی iهست که آشنایی داشته باشه!!!

eshpilen
چهارشنبه 29 خرداد 1392, 12:28 عصر
خب مرورگر یک برنامه است، روبات هم یک برنامه.
بنابراین از نظر تئوریک یک روبات میتونه خودش رو دقیقا مثل یک مرورگر جلوه بده.
تنها چیزی که این وسط روبات نمیتونه یا حداقل نمیتونه به راحتی انسان انجام بده، پاس کردن کپچا است.
ولی البته که شما نمیخواید برای دیدن صفحات معمولی سایتتون هم کپچا بذارید! اونم بخاطر همچین مسئلهء کم اهمیتی.
از طرف دیگر میشه گفت شاید روباتی اونقدر پیشرفته موجود نباشه که همهء کارایی های یک مرورگر رو داشته باشه. اغلب روبات هایی که دارن توی اینترنت کار میکنن احتمالا خیلی ساده تر و متفاوت از مرورگرها هستن. چون مرورگر برنامهء بزرگ و مجهز و پیچیده ای است و منابع و پردازش زیادی هم مصرف میکنه طبیعتا، که یک روبات دوست نداره این کار رو بکنه.

بنابراین شما میتونید از روشهای ساده تر و راحتتری استفاده کنید بسته به پیشرفتگی و پنهان کاری روبات هایی که به سایت شما میان.
بطور مثال ممکنه در خیلی موارد بشه صرفا با استفاده از User agent، روبات ها رو تشخیص داد.
میتونید لاگ مربوط به User agent درخواستهایی رو که به سایت شما ارسال میشن بررسی کنید و ببینید میتونید روبات ها رو از مرورگر تشخیص بدید یا نه؛ حتی شاید با مشخصات دیگری غیر از User agent هم بشه روبات ها رو تشخیص بدید، بعد همون خصیصه رو در برنامهء خودتون برای تشخیص روبات از مرورگر استفاده کنید. البته مواظب باشید و تست کنید که کاربران عادی و مرورگرهای معمولی رو اشتباهی روبات تشخیص ندید.

اگر User agent جواب نمیداد، یعنی روبات مورد نظر User agent یک مرورگر رو تقلید کرده بود، اونوقت احتمالا بازم میشه از روی هدرهای ثابت دیگری دیگری که مرورگرها در درخواستهای خودشون ارسال میکنه اما بیشتر روبات ها این کار رو نمیکنن، استفاده کرد. ولی خب این روش ممکنه سایدافکت های فنی ناشناخته ای ایجاد کنه، چون ما دقیقا از کجا باید بدونیم و مطمئن باشیم که این همه مرورگری که موجود هستن همیشه چه هدرهای مورد نظری رو ارسال میکنن؟

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

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

راستی شما نیازی نیست حتما روبات ها رو بلاک کنید. میتونید تعداد و مشخصه های اونا رو لاگ کنید، مثلا در دیتابیس ذخیره کنید، و موقع آمارگیری تعداد اونا رو بشمارید و از تعداد کل بازدیدها کم کنید.
به این شکل احتمال ایجاد سایدافکت و هزینهء بلاک کردن های اشتباهی هم کمتر میشه. ضمنا لاگ کردن اجازه میده که بعدا این لاگ ها رو بررسی و تحلیل کنید و از کارکرد صحیح سیستم مطمئن بشید، و اگر لازم باشه الگوریتم و آمارها رو تغییر بدید و دوباره محاسبه کنید.
یکسری روبات ها هم که مال موتورهای جستجو مثل گوگل هستن که باید مواظب باشید جلوشون رو نگیرید و در کارشون ایجاد اختلال نکنید.

eshpilen
چهارشنبه 29 خرداد 1392, 12:46 عصر
البته یه راه نسبتا راحت برای اینکه یک روبات دقیقا شبیه یک مرورگر بشه به نظرم رسید.
مثلا در برنامه های دسکتاپ ما میتونیم IE (یا مرورگرهای دیگری رو) در برنامهء خودمون Embed کنیم.
خب به این شکل ما میتونیم خیلی راحتتر یک روبات بسازیم که درواقع از یک مرورگر واقعی استفاده میکنه و بنابراین از دید سرورهای اینترنتی تشخیص اون از یک روبات میتونه غیرممکن یا حداقل خیلی دشوارتر باشه.
حالا این رو در دسکتاپ میدونم که شدنیه و کار راحتیه، ولی مثلا روی هاست نمیدونم تاچه حد شدنی هست و چطور.

ولی خب همونطور که گفتم، روبات ها ترجیح میدن ساده و سبک باشن، و فکر میکنم تقریبا تمام روبات ها همینطور هستن.
اغلب روبات ها هم که هدف هک/صدمه یا سوء استفادهء مهمی ندارن، و کارهایی که انجام میدن اونقدری ارزش نداره و کسی که پشت اوناست اغلب اونقدری انگیزه نداره که بخواد بیاد و به یک سایت خاصی که روبات رو بلاک میکنه گیر بده و وقت و انرژی زیادی برای درست کردن یک روبات خیلی پیشرفته و پنهان کار صرف کنه.
ضمنا اصولا شما نیازی ندارید که روبات رو بلاک کنید، مگر درمواردی که عملیات روبات داره به سایت صدمه ای میزنه که راه دیگری برای جلوگیری ازش نیست.