RevealTheme logo

تشخیص‌دهنده RevealTheme چگونه کار می‌کند

وقتی یک URL را در یکی از تشخیص‌دهنده‌های ما وارد می‌کنید، در دو ثانیه پیش از آنکه نتایج را ببینید اتفاقات زیادی رخ می‌دهد. این مرور فنی برای کنجکاوان است، از جمله محدودیت‌هایی که نمی‌توانیم با مهندسی حل کنیم.

گام ۱: دریافت HTML عمومی

وقتی یک URL را ارسال می‌کنید، سرور ما صفحه وب عمومی آن URL را با استفاده از یک User-Agent استاندارد مرورگر دریافت می‌کند. این همان HTMLی است که اگر مستقیماً از سایت بازدید می‌کردید مرورگر شما دریافت می‌کرد. ما دیوارهای پرداخت را دور نمی‌زنیم، محتوای محافظت‌شده با ورود را استخراج نمی‌کنیم و از هیچ احراز هویتی استفاده نمی‌کنیم.

دریافت از یک زمان انتظار ۲۰ ثانیه‌ای استفاده می‌کند. ما تا ۱۰ تغییر مسیر را دنبال می‌کنیم (که تغییر مسیرهای HTTP ← HTTPS، www ← بدون-www و تغییر مسیرهای کشوری را پوشش می‌دهد). اگر سایت یک پاسخ 4xx یا 5xx برگرداند، یا در بازه زمان انتظار پاسخ ندهد، به‌جای حدس زدن یک خطای روشن «دسترسی ممکن نبود» برمی‌گردانیم.

گام ۲: تشخیص پلتفرم

پیش از تلاش برای شناسایی یک قالب مشخص، بررسی می‌کنیم که سایت چه CMSی را اجرا می‌کند. ما به دنبال اثر‌انگشت ۷ پلتفرم پشتیبانی‌شده —WordPress، Shopify، Magento، Joomla، Drupal، Moodle و PrestaShop— می‌گردیم و قوی‌ترین تطابق را انتخاب می‌کنیم.

اگر یک URL از Shopify را به تشخیص‌دهنده WordPress ما (یا برعکس) بفرستید، آن را به شما می‌گوییم و به تشخیص‌دهنده درست پیوند می‌دهیم. بدون حدس، بدون مثبت کاذب.

گام ۳: تشخیص قالب

به‌طور خاص برای WordPress، ارجاع‌ها به قالب معمولاً در HTML صفحه در مسیرهایی مانند wp-content/themes/THEME_NAME/style.css ظاهر می‌شوند. ما هر یک از این ارجاع‌ها را از هر بخشی از سند استخراج می‌کنیم: تگ‌های link، تگ‌های script، JavaScript درون‌خطی، بلوک‌های JSON-LD و حتی محتوای متنی. این کار قالب‌هایی را تشخیص می‌دهد که سایت‌های بسیار بهینه‌شده آن‌ها را از ابزارهای تشخیص استاندارد پنهان کرده‌اند.

برای هر قالب تشخیص‌داده‌شده، تلاش می‌کنیم فایل style.css قالب را دریافت کنیم. سرآیند آن فایل شامل نام رسمی قالب، نویسنده، نسخه، URI و توضیحات است، مستقیماً از سوی توسعه‌دهنده قالب. این منبع اطلاعات غنی قالبی است که در کنار نتیجه تشخیص نمایش می‌دهیم.

گام ۴: تشخیص افزونه

تشخیص افزونه از دو رویکرد موازی استفاده می‌کند. نخست، هر مسیر فایلی را که با wp-content/plugins/PLUGIN_NAME/ مطابقت داشته باشد استخراج می‌کنیم. دوم، ده‌ها بررسی مبتنی بر امضا را اجرا می‌کنیم: به دنبال ساختارهای خاص HTML، نام‌های کلاس CSS، متغیرهای JavaScript درون‌خطی و سرآیندهای پاسخ HTTP می‌گردیم که افزونه‌های محبوبی مانند Elementor، Yoast SEO، WPForms، WooCommerce، Wordfence و بیشتر را به‌طور یکتا شناسایی می‌کنند.

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

گام ۵: جست‌وجوهای هاستینگ + DNS

برای شناسایی ارائه‌دهنده هاستینگ، یک جست‌وجوی DNS روی دامنه انجام می‌دهیم و نشانی IP، ASN و DNS معکوس را بازرسی می‌کنیم. آن را با یک پایگاه‌داده از بازه‌های IP شناخته‌شده ارائه‌دهندگان هاستینگ تطبیق می‌دهیم تا ارائه‌دهنده را شناسایی کنیم. دقت برای هاستینگ‌های اصلی (AWS، Cloudflare، Hostinger، SiteGround و غیره) بالا و برای ارائه‌دهندگان جایگاهی پایین‌تر است.

آنچه نمی‌توانیم انجام دهیم

برخی موارد که تشخیص کار نخواهد کرد، هرقدر هم کد ما خوب باشد:

  • چالش ربات Cloudflare. سایت‌هایی با محافظت سخت‌گیرانه ضدربات Cloudflare (صفحه «در حال انجام بررسی امنیتی...») درخواست‌گیرنده ما را درست مانند هر درخواست خودکار مسدود می‌کنند. راه تمیزی برای دور زدن آن وجود ندارد.
  • قالب‌های سفارشی‌سازی‌شده شدید. اگر یک قالب آنقدر تغییر یافته باشد که هر ارجاع به نام اصلی قالب از HTML حذف شده باشد، چیزی برای تشخیص نداریم.
  • کش تهاجمی با مسیرهای منابع بازنویسی‌شده. افزونه‌هایی مانند LiteSpeed Cache، WP Rocket و Rocket Loader از Cloudflare گاهی URLهای منابع را بازنویسی می‌کنند تا منبع را پنهان کنند. تشخیص مبتنی بر امضای ما بیشتر این موارد را می‌گیرد، اما نه همه را.
  • سایت‌های صادراتی ایستا. یک سایت WordPress که به HTML ایستا صادر شده باشد بیشتر امضاهای زمان‌اجرایی را که تشخیص را ممکن می‌کنند از دست می‌دهد.

آنچه انجام نمی‌دهیم

این را از ما پرسیده‌اند. پاسخ‌ها خیر است:

  • URLهایی را که ارسال می‌کنید ذخیره نمی‌کنیم
  • نشانی‌های IP را برای مقاصد بازاریابی ثبت نمی‌کنیم
  • داده‌های تشخیص را با ارائه‌دهندگان به اشتراک نمی‌گذاریم
  • احراز هویت، robots.txt یا دیگر کنترل‌های دسترسی را دور نمی‌زنیم
  • به دلایل امنیتی، تشخیص‌دهنده را روی IPهای داخلی/خصوصی (127.0.0.1، 10.x.x.x و غیره) اجرا نمی‌کنیم

جزئیات کامل حریم خصوصی در سیاست حریم خصوصی ما آمده است.

دسترسی به API

در حال حاضر یک API عمومی ارائه نمی‌دهیم، اما دسترسی برنامه‌نویسی محدود بنا به درخواست برای آژانس‌ها و پژوهشگران در دسترس است. مورد استفاده و حجم درخواست پیش‌بینی‌شده خود را به hello@revealtheme.com بنویسید.

چرا متن‌باز نیست؟

قواعد تشخیص هسته محصول هستند و ما آن‌ها را همراه با تکامل قالب‌ها و افزونه‌ها به‌طور مکرر به‌روزرسانی می‌کنیم. متن‌باز کردن آن‌ها آهنگ به‌روزرسانی ما را کند می‌کند. با این حال، نوشته‌های دقیقی درباره فنون تشخیص در بلاگ خود منتشر می‌کنیم: برای یافتن آن‌ها «تشخیص» را جست‌وجو کنید.

آماده‌اید امتحانش کنید؟

از تشخیص‌دهنده‌ای استفاده کنید که با سایتی که می‌خواهید بازرسی کنید مطابقت دارد: