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

دیوارهای اثبات کار به وب‌سایت‌های عادی آمدند: CrowdSec 1.8، Anubis و چرا هش مشکل اصلی نیست

1 سپتامبر 2026 CrowdSec نسخه 1.8 را منتشر کرد: proof-of-work و فینگرپرینتینگ مرورگر اکنون در WAF خود میزبانی شده وجود دارد. بررسی می‌کنیم که چرا تشخیص بی‌فایده بودن IP مقیم و TLS خالص را تأیید کرد، هزینه وظیفه PoW برای انسان و ربات چقدر است (0.017 ثانیه با حل‌کننده بومی در مقابل 2 دقیقه روی تلفن) و چرا PoW تجاری در Kasada به طور اصولی خطرناک‌تر از Anubis باز است.

📅۱۳ شهریور ۱۴۰۵
دیوارهای اثبات کار به وب‌سایت‌های عادی آمدند: CrowdSec 1.8، Anubis و چرا هش مشکل اصلی نیست

1 سپتامبر 2026، CrowdSec 1.8 منتشر شد — و در WAF متن باز که بر روی سرور خود با یک helm install نصب می‌شود، دو چیز به طور همزمان آمد: فینگرپرینتینگ مرورگر و proof-of-work. تا به حال، دیوار PoW در طبیعت وحشی عمدتاً در گیت‌فورج‌ها و آرشیوهای خبرنامه‌ها دیده می‌شد. حالا این لایه می‌تواند در هر سایتی با پانصد بازدیدکننده در روز وجود داشته باشد.

بیایید بررسی کنیم که چه چیزی تغییر کرده است، چرا تشخیص به سمت «پرداخت با پردازنده» رفته است و — مهم‌تر از همه — چرا هش در این ساختار کوچک‌ترین مشکل است.

چه اتفاقی افتاد: PoW از گیت‌فورج‌ها به سایت‌های معمولی آمد

CrowdSec یک سیستم خود میزبان است: عامل لاگ‌ها را می‌خواند، WAF در جلوی برنامه قرار دارد و «بونس‌ها» را مسدود می‌کند. در نسخه 1.8، تیم یک مکانیزم به WAF اضافه کرد که به سوال «آیا این IP بد است؟» پاسخ نمی‌دهد، بلکه به سوال «آیا این واقعاً یک مرورگر با انسان است یا رباتی که خود را به شکل انسان درآورده است؟» پاسخ می‌دهد. پاسخ از فینگرپرینت (ویژگی‌های مرورگر و امضای TLS) و proof-of-work — یک مسئله محاسباتی که مشتری موظف است قبل از اینکه بک‌اند درخواست را ببیند، حل کند، جمع‌آوری می‌شود.

موتیواسیون نویسندگان بدون دیپلماسی بیان شده است: ربات متوسط سال 2026 با Chrome واقعی، فینگرپرینت TLS سازگار و IP مقیم می‌آید — و صبر او بیشتر از مهندس نوبت‌دار است. این اعتراف از طرف تشخیص از هر تحلیلی با ارزش‌تر است: آدرس مقیم و TLS دقیق دیگر نشانه‌ای تفکیک‌کننده نیستند. حالا که بر اساس شهرت IP و دست دادن، ربات دیگر از انسان متمایز نیست، حفاظت به دنبال نشانه‌ای می‌گردد که برای مرورگر ارزان و برای پارک ماشین‌ها گران باشد.

به طور همزمان در Hacker News در همان روزها POWBlock — «میکروسرویس proof-of-work برای هر سرور» — به وجود آمد. یک انتشار را می‌توان به تصادف نسبت داد، اما دو سیگنال مستقل در یک هفته — دیگر یک جهت‌گیری است.

چگونه دیوار PoW بر اساس Anubis کار می‌کند

معیار ژانر — Anubis: یک پروکسی معکوس بر پایه Go تحت مجوز MIT که توسط Xe Iaso تحت برند Techaro از ژانویه 2025 نوشته شده است. ایده به طور مستقیم از هش‌کش آدام بک در سال 1997 آمده است: مشتری مقادیر را امتحان می‌کند تا زمانی که SHA-256 هش با تعداد مورد نیاز صفرهای پیشرو را تولید کند. حل کرد — یک کوکی JWT امضا شده (techaro.lol-anubis-auth) و دسترسی موقت دریافت کرد. حل نکرد — بک‌اند از وجود شما باخبر نخواهد شد.

سختی توسط مدیر تعیین می‌شود. به طور پیش‌فرض، Anubis هر چیزی را که شبیه مرورگر باشد، به چالش می‌کشد — یعنی هر چیزی که در User-Agent دارای رشته Mozilla باشد. آنچه هر سطح هزینه دارد، در اندازه‌گیری‌ها نشان داده می‌شود:

  • سختی 1 — کمتر از 100 میلی‌ثانیه.
  • سختی 4 (پیش‌فرض) — حدود 1.35 ثانیه بر روی Intel Core Ultra 7 165H، که تقریباً 87,600 هش در ثانیه در مرورگر است.
  • سختی 8 — حدود 11 ثانیه.
  • سختی 10 — حدود 114 ثانیه.

تفاوت بین سطح چهارم و دهم تقریباً 84 برابر است. فهرست کسانی که این را پیاده‌سازی کرده‌اند، چشمگیر است: آرشیو خبرنامه هسته لینوکس و سرور گیت هسته، sourcehut، FFmpeg، GitLab پروژه GNOME، Wine، sourceware.org، FreeCAD، ScummVM، Enlightenment، یونسکو. در دانشگاه Duke، آزمایشی در ژوئن 2025 بیش از 4 میلیون درخواست HTTP ناخواسته در روز را مسدود کرد — حدود 90% ترافیک زباله — و در یک هفته 12 نفر به مشکلات شکایت کردند.

این دیوارها به دلیل بدخواهی به وجود نیامده‌اند. در Read the Docs، یک خزنده تنها 73 ترابایت در یک ماه دانلود کرد؛ پس از مسدود شدن، ترافیک روزانه از 800 گیگابایت به 200 گیگابایت کاهش یافت، صرفه‌جویی — حدود 1500 دلار در ماه. درو دوولت توصیف کرد که مبارزه با خزنده‌ها از 20 تا 100 درصد هفته‌های خاص را از او می‌گرفت. با توجه به افزایش ترافیک خودکار به میزان 23.51% در سال 2025 و تقریباً سه برابر شدن ترافیک AI در طول سال، مدیران به دنبال راه‌حل‌هایی بودند که سریع عمل کنند.

چرخش: در برابر پارسینگ صنعتی، PoW تقریباً کار نمی‌کند

و حالا قسمت ناخوشایند که به ندرت در بیانیه‌های مطبوعاتی نوشته می‌شود. Proof-of-work بر اساس عدم تقارن «بررسی ارزان، حل گران» استوار است. در وب، این عدم تقارن به سمت نادرست گسترش یافته است.

بازدیدکننده واقعی هش‌ها را به عنوان JavaScript کند در مرورگر می‌بیند. کسی که به دنبال داده‌ها آمده، آنها را به عنوان کد نیتیو در نظر می‌گیرد. تواس اورمندی یک حل‌کننده در 25 خط C نوشته است: مسئله با سختی 5 تقریباً در 0.017 ثانیه حل می‌شود — این تقریباً 200 برابر سریع‌تر از SubtleCrypto در مرورگر است. در GPU، این اختلاف حتی بیشتر است، حدود صد برابر و بالاتر. نتیجه ریاضی ساده است: برای یک فروشنده بزرگ، دور زدن تمام سایت‌های Anubis تقریباً هیچ هزینه‌ای ندارد.

این یک نظریه نیست. Codeberg در اوت 2025 گزارش داد که بسیاری از ربات‌های خزنده یاد گرفته‌اند که چالش‌های Anubis را حل کنند. در عین حال، دیوار بی‌فایده نشده است — چندین ماه، عمده ترافیک را مسدود کرد — اما به عنوان مانعی برای کسی که آماده است یک شب را برای حل نیتیو صرف کند، کارایی ندارد.

هزینه را معمولاً کاربر زنده پرداخت می‌کند. سختی 5 — حدود 2 ثانیه بر روی یک MacBook جدید، ده‌ها ثانیه بر روی یک لپ‌تاپ قدیمی و تا دو دقیقه بر روی تلفن. در GitLab GNOME، موردی از گیر کردن نیم ساعته در Firefox ثبت شده است — یک استثنا، اما نشان‌دهنده است. به علاوه استثناهای سخت: به طور پیش‌فرض، Anubis به JavaScript نیاز دارد، بنابراین خواننده‌های RSS، curl، wget و Lynx به سادگی از کار می‌افتند. این پروژه در حال اصلاح این مشکل است — در نسخه 1.20.0 یک مسیر بدون JS از طریق meta-refresh اضافه شده است — اما در 1.22.0 Proof of React آمد که برعکس، الزامات مرورگر را افزایش داد.

همچنین باید درباره پایداری خود پروژه بدانید: حدود نیمی از کد را یک نفر کامیت می‌کند و در میان 80+ مشارکت‌کننده، تنها یک توسعه‌دهنده دیگر از ده کامیت فراتر رفته است. به علاوه، در Anubis یک سرویس پولی Thoth برای فیلتر کردن GeoIP و BGP یکپارچه شده است — به این معنی که این پروژه متن باز یک همسایه تجاری دارد.

کجا PoW واقعاً مشکل‌ساز است: نسخه تجاری به گونه‌ای دیگر عمل می‌کند

اینجا و در اینجا مفهوم اصلی پنهان شده است. Kasada، hCaptcha و Cloudflare Turnstile نیز از proof-of-work استفاده می‌کنند — اما به هیچ وجه مانند Anubis.

در Anubis، پازل و هست دیوار: JS را اجرا کردی، هش را محاسبه کردی — عبور کردی. یک سیگنال، یک مانع. در سیستم‌های تجاری، PoW به عنوان تأیید عمل می‌کند. در Kasada، این مسئله چند میلی‌ثانیه طول می‌کشد — به قدری کم که به عنوان مانع بی‌معنی است. معنی در چیز دیگری است: برای حل آن، مشتری موظف است یک ماشین مجازی مبهم را اجرا کند، جایی که تشخیص واقعی انجام می‌شود. اگر هش را محاسبه کنی، بدون اینکه همه چیز دیگر را انجام دهی، هیچ چیزی دریافت نخواهی کرد. hCaptcha PoW را بر روی حکم تصاویر انباشته می‌کند و هزینه محاسباتی را برای مشتریان مشکوک افزایش می‌دهد، Turnstile PoW را به عنوان یک سیگنال در میان بسیاری از آزمایش‌های محیطی در نظر می‌گیرد.

تفاوت اصولی است. دیوار باز به راحتی با یک حل‌کننده نیتیو ارزان شکسته می‌شود. دیوار تجاری نه با هش، بلکه با نیاز به اجرای صادقانه کد مبهم دیگران و عدم افشای محیط شکسته می‌شود — و این هزینه‌بر است، زیرا مبهم‌سازی به طور منظم چرخش می‌کند. CrowdSec 1.8 به همین دلیل جالب است که این منطق را (فینگرپرینت در کنار PoW) به دنیای خود میزبان می‌آورد، جایی که قبلاً حداکثر محدودیت نرخ بر اساس IP وجود داشت.

این در عمل چه تغییری ایجاد می‌کند

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

  1. مشکل در هش نیست، بلکه در لایه مرورگر است. هش به طور نیتیو در میلی‌ثانیه محاسبه می‌شود. فینگرپرینت، ماشین مجازی مبهم و محیط صحیح محاسبه نمی‌شود. تغییر عملی: جایی که قبلاً یک کلاینت HTTP کافی بود، حالا به یک موتور مرورگر واقعی نیاز است. این از نظر CPU و حافظه گران‌تر است و باید از ابتدا برای آن برنامه‌ریزی کرد.
  2. اقتصاد از ترافیک به زمان و پردازنده منتقل می‌شود. قبلاً هزینه تولید را بر اساس IP و گیگابایت محاسبه می‌کردند. حالا به آن ثانیه‌ها برای هر صفحه و بارگذاری هسته‌ها اضافه می‌شود. باید قیمت به ازای هر گیگابایت را اندازه‌گیری کرد، بلکه هزینه یک ثبت موفق را — در دیوار PoW این دو معیار به شدت متفاوت می‌شوند.
  3. جلسه به یک دارایی تبدیل می‌شود. Anubis یک کوکی JWT برای مدت زمان مشخص می‌دهد. اگر پس از هر درخواست IP را تغییر دهید، دوباره باید مالیات PoW را برای هر صفحه بپردازید. جلسات چسبنده بر روی پروکسی‌های مقیم در اینجا نه در «ناشناس بودن»، بلکه به طور مستقیم در محاسبات سود می‌دهند: یک حل مسئله بر روی ده‌ها صفحه توزیع می‌شود. چرخش تهاجمی در دنیای PoW از یک عمل خوب به یک مصرف بیش از حد تبدیل می‌شود.
  4. حل‌کننده رفتار را جایگزین نمی‌کند. دقیقاً همان منطقی که حل‌کننده‌های کپچا دیگر مسئله را حل نمی‌کنند: شما یک مسئله قابل مشاهده را حل می‌کنید، اما حکم بر اساس سیگنال‌های نامرئی اطراف آن صادر می‌شود.
  5. فرکانس را کاهش دهید — این ارزان‌تر از هر دیواری است. موج PoW از داستان‌هایی مانند 73 ترابایت در یک ماه از یک خزنده رشد کرده است. کش، درخواست‌های شرطی، فاصله معقول و احترام به robots.txt شما را از رادار خارج می‌کند قبل از اینکه چالش فعال شود. آدرس‌های داده‌مرکزی ارزان به علاوه headless در بالاترین فرکانس — دقیقاً همان پروفایلی است که دیوارها برای آن نصب می‌شوند.

نتیجه‌گیری

CrowdSec 1.8 — نه «پایان خزیدن»، و Anubis نیز اینطور نشد: حل‌کننده نیتیو مسئله با سختی 5 را در 0.017 ثانیه حل می‌کند، در حالی که یک انسان بر روی یک تلفن قدیمی تا دو دقیقه منتظر می‌ماند. خبر واقعی در چیز دیگری است. اولاً، تشخیص به وضوح اعتراف کرده است که IP مقیم و TLS تمیز دیگر هیچ چیزی را اثبات نمی‌کند. ثانیاً، لایه «ثابت کن که تو یک مرورگر هستی» دیگر امتیاز سایت‌های بزرگ با بودجه برای Kasada نیست و به دنیای متن باز منتقل شده است که بر روی سایت‌های معمولی نصب می‌شود.

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