بازگشت به وبلاگ

چگونه از شناسایی PerimeterX و Akamai عبور کنیم

مکانیسم‌های کار PerimeterX و Akamai را بررسی می‌کنیم، روش‌های شناسایی آن‌ها را مطالعه می‌کنیم و یک استراتژی مؤثر برای دور زدن با استفاده از پروکسی، اثر انگشت مرورگر و شبیه‌سازی رفتار ایجاد می‌کنیم.

📅۲ دی ۱۴۰۴
```html

دور زدن حفاظت PerimeterX و Akamai: روش‌های عملی ضد شناسایی

PerimeterX و Akamai Bot Manager دو راه‌حل پیشرفته برای حفاظت در برابر ربات‌ها هستند که توسط بزرگ‌ترین پلتفرم‌های تجارت الکترونیک، خدمات مالی و وب‌سایت‌های شرکتی استفاده می‌شوند. این سیستم‌ها صدها پارامتر مرورگر، رفتار کاربر و ویژگی‌های شبکه را تجزیه و تحلیل می‌کنند و یک حفاظت چندلایه ایجاد می‌کنند که نمی‌توان با تغییر ساده آدرس IP آن را دور زد.

در این راهنما، ما به طور دقیق معماری هر دو سیستم را بررسی خواهیم کرد، روش‌های شناسایی آن‌ها را مطالعه خواهیم کرد و یک استراتژی جامع برای دور زدن، مبتنی بر موارد واقعی و آزمایش‌های فنی ایجاد خواهیم کرد.

معماری PerimeterX و Akamai: چطور شناسایی کار می‌کند

PerimeterX (اکنون HUMAN Security) و Akamai Bot Manager به عنوان سیستم‌های حفاظت چندلایه عمل می‌کنند و در مراحل مختلف پردازش درخواست ادغام می‌شوند. درک معماری آن‌ها به شدت برای توسعه استراتژی دور زدن حیاتی است.

معماری PerimeterX

PerimeterX در سه مرحله کار می‌کند. در مرحله اول، حسگر JavaScript در صفحه HTML گنجانده می‌شود و در مرورگر مشتری اجرا می‌شود و داده‌هایی درباره محیط اجرا جمع‌آوری می‌کند: اثر انگشت WebGL، اثر انگشت Canvas، زمینه صوتی، فونت‌های در دسترس، پلاگین‌ها، وضوح صفحه و بسیاری از پارامترهای دیگر. این حسگر به صورت مبهم و به طور منظم به‌روزرسانی می‌شود که تجزیه و تحلیل آن را دشوار می‌کند.

در مرحله دوم، مؤلفه سروری PerimeterX هدرهای HTTP، اثر انگشت TLS، شهرت IP و ویژگی‌های شبکه را قبل از رسیدن درخواست به برنامه اصلی تجزیه و تحلیل می‌کند. سیستم از پایگاه داده‌ای از ربات‌های شناخته شده و آدرس‌های IP مشکوک استفاده می‌کند که به‌صورت بلادرنگ به‌روزرسانی می‌شود.

مرحله سوم — تحلیل رفتاری است. PerimeterX حرکات ماوس، سرعت پیمایش، الگوهای کلیک، زمان بین اقدامات را ردیابی کرده و پروفایل رفتاری ایجاد می‌کند. مدل‌های یادگیری ماشین این پروفایل را با الگوهای کاربران واقعی و ربات‌های شناخته شده مقایسه می‌کنند.

معماری Akamai Bot Manager

Akamai Bot Manager در سطح CDN ادغام می‌شود که به آن مزیت سرعت تحلیل را می‌دهد. این سیستم از فناوری اختصاصی BMP (Bot Manager Premier) استفاده می‌کند که درخواست‌ها را در سرورهای مرزی Akamai قبل از انتقال به سرور مبدا تجزیه و تحلیل می‌کند.

تفاوت کلیدی Akamai — استفاده از تل متری از میلیون‌ها وب‌سایت که توسط CDN آن‌ها محافظت می‌شود. این به سیستم اجازه می‌دهد تا به سرعت انواع جدید ربات‌ها را شناسایی کرده و قوانین شناسایی را به‌طور جهانی به‌روزرسانی کند. Akamai همچنین از فناوری Web SDK استفاده می‌کند که مشابه حسگر PerimeterX است، اما بر روی تأیید هویت رمزنگاری شده مشتری تمرکز دارد.

مهم: هر دو سیستم از کوکی‌هایی با داده‌های رمزنگاری شده درباره نتایج بررسی استفاده می‌کنند. این کوکی‌ها بدون دانستن کلید سرور قابل جعل نیستند، بنابراین کپی ساده کوکی‌ها بین نشست‌ها کار نمی‌کند.

روش‌های شناسایی: سیستم‌های حفاظت چه چیزی را تجزیه و تحلیل می‌کنند

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

تحلیل هدرهای HTTP و TLS

ترتیب هدرهای HTTP یکی از ساده‌ترین روش‌های شناسایی است. مرورگرها هدرها را در یک ترتیب دقیق ارسال می‌کنند که بین نسخه‌ها و تولیدکنندگان متفاوت است. کتابخانه‌هایی مانند requests در Python یا axios در Node.js از ترتیب خاص خود استفاده می‌کنند که به سرعت اتوماسیون را افشا می‌کند.

اثر انگشت TLS (اثر انگشت JA3) از پارامترهای دست دادن TLS ایجاد می‌شود: نسخه TLS، لیست رمزگذاری‌های پشتیبانی شده، گسترش‌ها و ترتیب آن‌ها. هر ترکیب از مرورگر و سیستم‌عامل یک اثر انگشت منحصر به فرد ایجاد می‌کند. به عنوان مثال، Chrome 120 در Windows 11 دارای اثر انگشتی متفاوت از Chrome 120 در macOS یا Firefox در همان سیستم است.

// مثال عدم تطابق User-Agent و اثر انگشت TLS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
TLS Fingerprint: هش JA3 مطابق با Python requests
// نتیجه: مسدودسازی فوری

محیط اجرای JavaScript

مرورگرهای بدون سر و صدا ده‌ها نشانه در محیط JavaScript باقی می‌گذارند. ویژگی‌های navigator.webdriver، وجود اشیاء window.chrome، عدم تطابق در navigator.plugins، و ناهنجاری‌ها در WebGL و رندرینگ Canvas بررسی می‌شوند.

PerimeterX و Akamai از تکنیک‌های پیشرفته بررسی استفاده می‌کنند: زمان اجرای توابع JavaScript را اندازه‌گیری می‌کنند (در مرورگرهای بدون سر و صدا متفاوت است)، وجود آثار اتوماسیون در DOM را بررسی می‌کنند و استک فراخوانی توابع را تجزیه و تحلیل می‌کنند. سیستم‌ها همچنین سازگاری داده‌ها را بررسی می‌کنند — به عنوان مثال، اگر User-Agent به یک دستگاه موبایل اشاره کند، اما navigator.maxTouchPoints برابر با 0 باشد، این یک محرک شناسایی است.

ویژگی‌های شبکه و شهرت IP

سیستم‌های حفاظت IP را بر اساس چندین پارامتر بررسی می‌کنند: تعلق به ارائه‌دهندگان پروکسی شناخته شده، وجود در فهرست‌های سیاه، تاریخچه فعالیت از این IP، و سازگاری جغرافیایی با سایر پارامترهای درخواست (زبان مرورگر، منطقه زمانی).

توجه خاصی به الگوهای استفاده از IP داده می‌شود. اگر درخواست‌ها از یک آدرس با User-Agent یا اثر انگشت‌های مرورگر متفاوت بیایند، این یک سیگنال قوی از اتوماسیون است. به همین ترتیب، اگر IP در یک جلسه بیش از حد تغییر کند (چرخش پروکسی تهاجمی)، این مسدودسازی را تحریک می‌کند.

پارامتر شناسایی PerimeterX Akamai
اثر انگشت TLS اولویت بالا اولویت بحرانی
اثر انگشت Canvas اولویت متوسط اولویت بالا
تحلیل رفتاری اولویت بحرانی اولویت بالا
شهرت IP اولویت بالا اولویت بالا
اثر انگشت HTTP/2 اولویت متوسط اولویت بحرانی

اثر انگشت مرورگر و اثر انگشت TLS

اثر انگشت مرورگر تکنیکی برای ایجاد یک شناسه منحصر به فرد برای مرورگر بر اساس ویژگی‌های آن است. حتی بدون کوکی‌ها، سیستم‌های حفاظت می‌توانند کاربران را ردیابی کرده و ناهنجاری‌ها را شناسایی کنند.

اثر انگشت Canvas و WebGL

اثر انگشت Canvas با رندر کردن یک تصویر نامرئی با متن و گرافیک کار می‌کند. به دلیل تفاوت‌ها در درایورهای گرافیکی، فونت‌ها و تنظیمات ضد آنتی‌الیاژ، هر سیستم یک تصویر کمی متفاوت ایجاد می‌کند. هش این تصویر بخشی از اثر انگشت می‌شود.

اثر انگشت WebGL از رندرینگ 3D برای ایجاد یک اثر انگشت حتی منحصر به فردتر استفاده می‌کند. سیستم اطلاعاتی درباره GPU، گسترش‌های پشتیبانی شده، حداکثر اندازه‌های بافت و سایر پارامترها درخواست می‌کند. ترکیب این داده‌ها یک اثر انگشت با انتروپی کافی برای شناسایی دستگاه ایجاد می‌کند.

// مثال دریافت اثر انگشت WebGL
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);

// نتیجه می‌تواند باشد: "Google Inc. (NVIDIA)" + "ANGLE (NVIDIA GeForce RTX 3080)"
// ترکیب منحصر به فرد برای هر دستگاه

زمینه صوتی و فونت‌ها

API زمینه صوتی اجازه می‌دهد تا یک اثر انگشت منحصر به فرد بر اساس پردازش صدا ایجاد شود. تفاوت‌ها در استک صوتی سیستم‌عامل منجر به تفاوت‌های میکروسکوپی در پردازش سیگنال صوتی می‌شود که می‌توان آن‌ها را اندازه‌گیری کرده و برای شناسایی استفاده کرد.

لیست فونت‌های نصب شده نیز برای هر سیستم منحصر به فرد است. سیستم‌های حفاظت از تکنیک اندازه‌گیری اندازه‌های متن با فونت‌های مختلف استفاده می‌کنند — اگر فونت نصب نشده باشد، مرورگر از فونت جایگزین استفاده می‌کند که اندازه‌ها را تغییر می‌دهد. بررسی صدها فونت یک امضای منحصر به فرد ایجاد می‌کند.

اثر انگشت TLS و HTTP/2

اثر انگشت JA3 از پارامترهای TLS Client Hello ایجاد می‌شود: نسخه SSL/TLS، لیست cipher suites، لیست گسترش‌ها، لیست گروه‌های منحنی بیضوی پشتیبانی شده، فرمت‌های نقاط منحنی بیضوی. این پارامترها به هم متصل شده و هش می‌شوند و یک رشته منحصر به فرد ایجاد می‌کنند.

اثر انگشت HTTP/2 پارامترهای SETTINGS frame، ترتیب و اولویت‌های جریان‌ها، مقادیر window update را تجزیه و تحلیل می‌کند. هر مرورگر از تنظیمات منحصر به فرد HTTP/2 استفاده می‌کند که به شناسایی مشتری حتی با اثر انگشت صحیح TLS کمک می‌کند.

نکته عملی: برای دور زدن اثر انگشت، باید سازگاری تمام پارامترها را تضمین کنید. استفاده از User-Agent Chrome با اثر انگشت TLS Firefox به سرعت شناسایی می‌شود. ابزارهایی مانند curl-impersonate یا کتابخانه tls-client به ایجاد یک اثر انگشت کاملاً سازگار کمک می‌کنند.

تحلیل رفتاری و یادگیری ماشین

تحلیل رفتاری — پیچیده‌ترین جنبه برای دور زدن سیستم‌های ضد ربات مدرن است. حتی با اثر انگشت فنی ایده‌آل، رفتار غیر انسانی اتوماسیون را افشا می‌کند.

تحلیل حرکات ماوس و تعاملات

PerimeterX و Akamai مسیرهای حرکات ماوس، شتاب و کاهش، میکروحرکت‌ها را که مختص دست انسان است، ردیابی می‌کنند. ربات‌ها معمولاً نشانگر را به صورت خطوط مستقیم حرکت می‌دهند یا اصلاً رویدادهای ماوس را تولید نمی‌کنند. سیستم‌ها همچنین زمان واکنش را تحلیل می‌کنند — کلیک بلافاصله پس از بارگذاری صفحه بدون حرکت ماوس مشکوک به نظر می‌رسد.

الگوهای پیمایش نیز منحصر به فرد هستند. انسان‌ها صفحه را به صورت نامنظم پیمایش می‌کنند: سریع در ابتدا، برای خواندن کند می‌شوند، و گاهی به عقب پیمایش می‌کنند. ربات‌ها معمولاً با سرعت ثابت پیمایش می‌کنند یا از window.scrollTo() برای پیمایش فوری استفاده می‌کنند.

الگوهای زمانی و سرعت اقدامات

زمان بین اقدامات یک پارامتر بحرانی است. انسان نمی‌تواند فرم 10 فیلدی را در 0.5 ثانیه پر کند یا به 50 لینک در یک دقیقه مراجعه کند. سیستم‌های حفاظت پروفایل سرعت را برای هر نوع اقدام ایجاد کرده و آن را با رفتار کاربر مقایسه می‌کنند.

توجه خاصی به سازگاری تأخیرها داده می‌شود. اگر بین هر کلیک دقیقاً 2 ثانیه فاصله باشد، این یک نشانه واضح از sleep(2000) در کد است. تأخیرهای انسانی دارای تنوع طبیعی هستند و از توزیع‌های آماری خاصی پیروی می‌کنند.

مدل‌های یادگیری ماشین

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

PerimeterX از یک مجموعه‌ای از مدل‌ها با وزن‌های مختلف برای انواع مختلف وب‌سایت‌ها استفاده می‌کند. مدل برای تجارت الکترونیک بر روی الگوهای خرید تمرکز می‌کند، در حالی که مدل برای وب‌سایت‌های رسانه‌ای بر روی الگوهای خواندن محتوا تمرکز دارد. این امر دور زدن را پیچیده‌تر می‌کند، زیرا نیاز به سازگاری با ویژگی‌های هر وب‌سایت دارد.

// مثال تأخیرهای انسانی با تنوع
function humanDelay(baseMs) {
  // توزیع لگ نرمال به جای یکنواخت
  const variance = baseMs * 0.3;
  const delay = baseMs + (Math.random() - 0.5) * variance;
  // اضافه کردن تأخیرهای میکرو که مختص پردازش رویدادها در مرورگر است
  const microDelay = Math.random() * 50;
  return Math.max(100, delay + microDelay);
}

// استفاده: await new Promise(r => setTimeout(r, humanDelay(2000)));

استراتژی انتخاب و چرخش پروکسی

انتخاب نوع پروکسی و استراتژی چرخش در هنگام کار با PerimeterX و Akamai به شدت حیاتی است. پیکربندی نادرست پروکسی تمام تلاش‌ها برای پنهان‌سازی اثر انگشت مرورگر را بی‌اثر می‌کند.

پروکسی‌های مسکونی در مقابل موبایلی در مقابل دیتاسنتر

پروکسی‌های دیتاسنتر کمترین هزینه را دارند، اما همچنین بالاترین ریسک شناسایی را نیز دارند. PerimeterX و Akamai پایگاه‌های داده‌ای از آدرس‌های IP دیتاسنتر را پشتیبانی می‌کنند و به طور خودکار سطح بررسی را برای چنین درخواست‌هایی افزایش می‌دهند. استفاده از پروکسی‌های دیتاسنتر فقط برای وظایف کم‌اولویت یا در ترکیب با اثر انگشت مرورگر بسیار با کیفیت ممکن است.

پروکسی‌های مسکونی از آدرس‌های IP ارائه‌دهندگان اینترنت واقعی استفاده می‌کنند که احتمال شناسایی را به طور قابل توجهی کاهش می‌دهد. با این حال، کیفیت پروکسی‌های مسکونی به شدت متغیر است. مهم است که ارائه‌دهندگانی را انتخاب کنید که دارای استخرهای IP تمیز هستند، جایی که آدرس‌ها قبلاً برای اسپم یا فعالیت‌های مشکوک دیگر استفاده نشده‌اند.

پروکسی‌های موبایلی بالاترین سطح اعتماد را فراهم می‌کنند، زیرا از آدرس‌های IP اپراتورهای موبایل استفاده می‌کنند. این آدرس‌ها معمولاً بین چندین کاربر تقسیم می‌شوند (carrier-grade NAT)، که مسدودسازی را دشوار می‌کند. پروکسی‌های موبایلی به ویژه در برابر Akamai مؤثر هستند که در مسدودسازی ترافیک موبایل محتاط‌تر است.

استراتژی‌های چرخش

چرخش تهاجمی (تغییر IP برای هر درخواست) یک اشتباه رایج است. این یک الگوی مشکوک ایجاد می‌کند: یک کاربر نمی‌تواند به طور فیزیکی هر چند ثانیه یک بار IP خود را تغییر دهد. چرخش نشست (جایی که یک IP برای یک نشست کاربری کامل استفاده می‌شود) مؤثرتر است (10-30 دقیقه فعالیت).

برای عملیات طولانی، نشست‌های چسبنده با مدت زمان 30-60 دقیقه توصیه می‌شود. این رفتار یک کاربر واقعی را شبیه‌سازی می‌کند که در طول نشست بر روی یک IP باقی می‌ماند. در عین حال، مهم است که از یک IP برای مدت زمان طولانی استفاده نشود — نشست‌هایی به طول چند ساعت نیز مشکوک به نظر می‌رسند.

سازگاری جغرافیایی

تضمین سازگاری بین جغرافیای آدرس IP و سایر پارامترها: زبان مرورگر، منطقه زمانی، تنظیمات محلی به شدت حیاتی است. اگر آدرس IP از آلمان باشد، اما navigator.language "en-US" را برگرداند و منطقه زمانی "America/New_York" باشد — این یک محرک فوری شناسایی است.

هنگام کار با چندین منطقه جغرافیایی، از پروفایل‌های جداگانه مرورگر برای هر منطقه استفاده کنید. تغییر بین مناطق در یک نشست (IP از فرانسه، سپس از ژاپن) برای یک کاربر واقعی غیرممکن است و به سرعت شناسایی می‌شود.

نوع پروکسی کارایی در برابر PerimeterX کارایی در برابر Akamai توصیه‌ها
دیتاسنتر پایین (30-40%) بسیار پایین (20-30%) فقط برای تست
مسکونی بالا (75-85%) متوسط (65-75%) انتخاب اصلی برای اکثر وظایف
موبایلی بسیار بالا (85-95%) بالا (80-90%) برای وظایف بحرانی و وب‌سایت‌های با حفاظت بالا

تنظیم مرورگرهای ضد شناسایی و ابزارها

تنظیم صحیح ابزارهای اتوماسیون یک عامل کلیدی برای موفقیت در دور زدن PerimeterX و Akamai است. حتی بهترین پروکسی‌ها نیز کمک نمی‌کنند اگر اثر انگشت مرورگر شامل نشانه‌های واضح اتوماسیون باشد.

Playwright و Puppeteer: پیکربندی پیشرفته

نصب پایه Playwright یا Puppeteer یک مرورگر بدون سر و صدا آشکار ایجاد می‌کند. لازم است از پلاگین‌های مخفی و پیکربندی اضافی برای پنهان‌سازی اتوماسیون استفاده کنید. کتابخانه puppeteer-extra-plugin-stealth نشانه‌های اصلی را پنهان می‌کند، اما به پیکربندی اضافی نیاز دارد.

// پیکربندی پیشرفته Playwright با ضد شناسایی
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();

chromium.use(stealth);

const browser = await chromium.launch({
  headless: false, // حالت بدون سر و صدا به راحتی شناسایی می‌شود
  args: [
    '--disable-blink-features=AutomationControlled',
    '--disable-features=IsolateOrigins,site-per-process',
    '--disable-site-isolation-trials',
    '--no-sandbox',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage',
    '--disable-accelerated-2d-canvas',
    '--disable-gpu',
    '--window-size=1920,1080',
    '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  ]
});

const context = await browser.newContext({
  viewport: { width: 1920, height: 1080 },
  locale: 'en-US',
  timezoneId: 'America/New_York',
  permissions: ['geolocation', 'notifications'],
  geolocation: { latitude: 40.7128, longitude: -74.0060 }
});

Selenium با undetected-chromedriver

Selenium WebDriver استاندارد به راحتی از طریق ویژگی navigator.webdriver شناسایی می‌شود. کتابخانه undetected-chromedriver به طور خودکار ChromeDriver را پچ می‌کند و نشانه‌های اصلی اتوماسیون را حذف می‌کند و به طور منظم به‌روزرسانی می‌شود تا از روش‌های جدید شناسایی عبور کند.

import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920,1080')

# استفاده از نسخه خاص Chrome برای سازگاری
driver = uc.Chrome(options=options, version_main=120)

# پنهان‌سازی اضافی از طریق CDP
driver.execute_cdp_cmd('Network.setUserAgentOverride', {
    "userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})

driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

مرورگرهای ضد شناسایی: AdsPower، Multilogin، GoLogin

مرورگرهای ضد شناسایی تجاری راه‌حل‌های آماده‌ای برای مدیریت اثر انگشت ارائه می‌دهند. AdsPower و Multilogin اجازه می‌دهند پروفایل‌هایی با اثر انگشت‌های منحصر به فرد Canvas، WebGL، صوتی ایجاد کرده و آن‌ها را از طریق API مدیریت کنید. این ابزارها به ویژه در هنگام کار با چندین حساب کاربری مفید هستند.

مزیت کلیدی — امکان حفظ اثر انگشت سازگار بین نشست‌ها. هر پروفایل دارای پارامترهای ثابت Canvas، WebGL، فونت‌ها است که برای کار طولانی‌مدت حیاتی است. در عین حال، مهم است که از پیکربندی‌های واقع‌بینانه استفاده کنید — تولید اثر انگشت‌های تصادفی می‌تواند ترکیب‌های فنی غیرممکن ایجاد کند که به راحتی شناسایی می‌شوند.

کلاینت‌های HTTP با اثر انگشت‌های صحیح

برای وظایفی که به رندرینگ JavaScript نیاز ندارند، کلاینت‌های HTTP با اثر انگشت‌های صحیح TLS و HTTP/2 مؤثرتر هستند. کتابخانه‌های curl-impersonate (برای Python — curl_cffi) و tls-client اجازه می‌دهند اثر انگشت‌های TLS مرورگرهای واقعی را شبیه‌سازی کنید.

from curl_cffi import requests

# شبیه‌سازی Chrome 120 با اثر انگشت صحیح TLS و HTTP/2
response = requests.get(
    'https://example.com',
    impersonate="chrome120",
    proxies={
        "http": "http://user:pass@proxy:port",
        "https": "http://user:pass@proxy:port"
    },
    headers={
        'Accept-Language': 'en-US,en;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br',
        'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"'
    }
)

# اثر انگشت TLS به طور خودکار با Chrome 120 مطابقت دارد

تکنیک‌های اتوماسیون بدون تحریک شناسایی

حتی با اثر انگشت فنی ایده‌آل، الگوهای اتوماسیون می‌توانند ربات را افشا کنند. لازم است رفتار انسانی را در سطح تعامل با سایت شبیه‌سازی کنید.

شبیه‌سازی حرکات ماوس

حرکت مستقیم ماوس از نقطه A به نقطه B یک نشانه واضح از اتوماسیون است. دست انسان منحنی‌های نرم با اصلاحات میکرو ایجاد می‌کند. کتابخانه‌هایی مانند pyautogui اجازه می‌دهند تا مسیرهای واقع‌بینانه با استفاده از منحنی‌های بزیه تولید کنید.

// تولید مسیر انسان‌مانند ماوس
async function humanMouseMove(page, targetX, targetY) {
  const current = await page.evaluate(() => ({
    x: window.mouseX || 0,
    y: window.mouseY || 0
  }));
  
  const steps = 25 + Math.floor(Math.random() * 15);
  const points = generateBezierCurve(current.x, current.y, targetX, targetY, steps);
  
  for (let point of points) {
    await page.mouse.move(point.x, point.y);
    await new Promise(r => setTimeout(r, 10 + Math.random() * 20));
  }
  
  // اصلاحات میکرو قبل از کلیک
  await page.mouse.move(targetX + (Math.random() - 0.5) * 2, 
                        targetY + (Math.random() - 0.5) * 2);
}

function generateBezierCurve(x1, y1, x2, y2, steps) {
  const cp1x = x1 + (x2 - x1) * (0.3 + Math.random() * 0.2);
  const cp1y = y1 + (y2 - y1) * (0.3 + Math.random() * 0.2);
  const points = [];
  
  for (let i = 0; i <= steps; i++) {
    const t = i / steps;
    const x = Math.pow(1-t, 2) * x1 + 2 * (1-t) * t * cp1x + Math.pow(t, 2) * x2;
    const y = Math.pow(1-t, 2) * y1 + 2 * (1-t) * t * cp1y + Math.pow(t, 2) * y2;
    points.push({x: Math.round(x), y: Math.round(y)});
  }
  return points;
}

پیمایش و خواندن محتوا به صورت واقع‌بینانه

انسان‌ها صفحه را برای خواندن محتوا پیمایش می‌کنند و در بخش‌های جالب توقف می‌کنند. ربات معمولاً به سرعت به انتهای صفحه یا به عنصر مورد نظر می‌رسد. شبیه‌سازی خواندن نیاز به تحلیل محتوا و ایجاد توقف‌های واقع‌بینانه دارد.

async function humanScroll(page, targetElement) {
  const elementPosition = await page.evaluate(el => {
    const rect = el.getBoundingClientRect();
    return rect.top + window.pageYOffset;
  }, targetElement);
  
  const currentScroll = await page.evaluate(() => window.pageYOffset);
  const distance = elementPosition - currentScroll;
  const scrollSteps = Math.floor(Math.abs(distance) / 100);
  
  for (let i = 0; i < scrollSteps; i++) {
    const scrollAmount = (distance / scrollSteps) * (0.8 + Math.random() * 0.4);
    await page.evaluate((amount) => {
      window.scrollBy({top: amount, behavior: 'smooth'});
    }, scrollAmount);
    
    // توقف‌های تصادفی برای "خواندن"
    if (Math.random() > 0.7) {
      await new Promise(r => setTimeout(r, 1000 + Math.random() * 2000));
    } else {
      await new Promise(r => setTimeout(r, 200 + Math.random() * 400));
    }
  }
}

الگوهای طبیعی ناوبری

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

همچنین مهم است که اشتباهات و اصلاحات را شبیه‌سازی کنید — انسان ممکن است روی لینک نادرست کلیک کند و به عقب برگردد، یا در وارد کردن در فیلد جستجو اشتباه کند و غلط‌نویسی را اصلاح کند. مسیر مستقیم ایده‌آل به هدف مشکوک به نظر می‌رسد.

مدیریت کوکی‌ها و ذخیره‌سازی

PerimeterX و Akamai از کوکی‌ها و localStorage برای ردیابی نشست‌ها استفاده می‌کنند. پاک‌سازی کامل کوکی‌ها بین درخواست‌ها مشکوک به نظر می‌رسد — یک مرورگر واقعی برخی از کوکی‌ها را (تحلیل، تنظیمات) حفظ می‌کند. کوکی‌ها را بین نشست‌ها برای یک "کاربر" حفظ کنید، اما از مجموعه‌های مختلف کوکی برای پروفایل‌های مختلف استفاده کنید.

مهم: سیستم‌های حفاظت سن سنجش سن کوکی‌ها را تحلیل می‌کنند. اگر کوکی حفاظتی (_px، _abck) به تازگی ایجاد شده باشد، اما کاربر رفتار یک بازدیدکننده دائمی را نشان دهد — این عدم تطابق است. برای عملیات طولانی‌مدت، پروفایل‌ها را "گرم کنید" و تاریخچه بازدیدها را ایجاد کنید.

موارد عملی و حل مشکلات متداول

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

کیس 1: استخراج داده‌های تجارت الکترونیک با PerimeterX

وظیفه: استخراج داده‌های محصولات از یک فروشگاه اینترنتی بزرگ که توسط PerimeterX محافظت می‌شود. سایت پس از 3-5 درخواست حتی از IP‌های مختلف مسدود می‌شود.

راه‌حل: استفاده از ترکیبی از پروکسی‌های مسکونی با نشست‌های چسبنده (30 دقیقه) و Playwright با شبیه‌سازی کامل رفتار. نکات کلیدی: از صفحه اصلی شروع کنید، از جستجو یا دسته‌ها برای ناوبری استفاده کنید، تأخیرهای تصادفی 3-7 ثانیه بین درخواست‌ها اضافه کنید، پیمایش و حرکات ماوس را شبیه‌سازی کنید. حفظ کوکی‌های _px بین درخواست‌ها در یک نشست حیاتی است.

// مثال نشست با گرم کردن
async function scrapeWithWarmup(page, targetUrls) {
  // گرم کردن پروفایل
  await page.goto('https://example.com');
  await humanScroll(page, await page.$('footer'));
  await new Promise(r => setTimeout(r, 3000 + Math.random() * 2000));
  
  // ناوبری از طریق منو
  await humanMouseMove(page, menuX, menuY);
  await page.click('nav a.category');
  await new Promise(r => setTimeout(r, 2000 + Math.random() * 1000));
  
  // فقط پس از گرم کردن به صفحات هدف می‌رویم
  for (let url of targetUrls) {
    await page.goto(url);
    await humanScroll(page, await page.$('.product-info'));
    // استخراج داده‌ها
    const data = await page.evaluate(() => extractProductData());
    await new Promise(r => setTimeout(r, 5000 + Math.random() * 3000));
  }
}

کیس 2: دور زدن Akamai برای درخواست‌های API

وظیفه: دسترسی به API که توسط Akamai Bot Manager محافظت می‌شود. API به هدرها و توکن‌های خاصی نیاز دارد که توسط JavaScript در صفحه تولید می‌شود.

راه‌حل: Akamai معمولاً از sensor_data — رشته رمزنگاری شده‌ای با نتایج بررسی‌های مرورگر استفاده می‌کند. این رشته توسط JavaScript تولید می‌شود و باید در درخواست گنجانده شود. از اتوماسیون مرورگر برای دریافت sensor_data معتبر استفاده کنید، سپس آن را در کلاینت HTTP با اثر انگشت صحیح TLS اعمال کنید.

// استخراج sensor_data از طریق مرورگر
async function getSensorData(page) {
  await page.goto('https://example.com');
  
  // انتظار برای اجرای حسگر Akamai
  await page.waitForTimeout(5000);
  
  // استخراج sensor_data از کوکی یا localStorage
  const sensorData = await page.evaluate(() => {
    const cookie = document.cookie.split(';')
      .find(c => c.trim().startsWith('_abck='));
    return cookie ? cookie.split('=')[1] : null;
  });
  
  return sensorData;
}

// استفاده در کلاینت HTTP
const sensorData = await getSensorData(page);
const response = await fetch('https://example.com/api/data', {
  headers: {
    'Cookie': `_abck=${sensorData}`,
    'User-Agent': 'Mozilla/5.0...',
    // سایر هدرها باید با مرورگر مطابقت داشته باشند
  }
});

کیس 3: حل CAPTCHA و صفحات چالش

مشکل: حتی با پیکربندی صحیح، PerimeterX یا Akamai گاهی اوقات صفحات چالش یا CAPTCHA را برای بررسی اضافی نمایش می‌دهند.

راه‌حل: صفحات چالش PerimeterX معمولاً بررسی‌های اضافی را انجام می‌دهند و نیاز به تعامل انسانی دارند. استفاده از تکنیک‌های شبیه‌سازی انسانی برای عبور از این چالش‌ها ضروری است.

```