پیام خطایی را در فرم پشتیبانی میچسبانید، دکمه ارسال را میزنید و صفحهای سفید و خالی میبینید: 403 Forbidden و زیر آن Microsoft-Azure-Application-Gateway/v2. جای دیگری، اسکریپت پایش قیمتی که یک ماه بیسروصدا کار کرده است، ناگهان بهجای داده محصولات صفحههای «Request blocked» دریافت میکند. در هیچکدام از این دو مورد کد خود سایت تصمیم نگرفته است. تصمیم را فایروال برنامه وبی گرفته که جلوی سایت قرار دارد.
در این نوشته توضیح میدهیم WAF کجا قرار میگیرد، چه چیزی را میخواند و قاعدههایش چگونه تصمیم میگیرند. آن را با فایروال شبکه و ریورس پروکسی مقایسه میکنیم، صفحههای مسدودی رایج را فهرست میکنیم و در پایان بخشی برای کسانی آوردهایم که ابزار پایش یا اسکرپرشان به یک WAF برخورد میکند.
WAF چیست؟
فایروال برنامه وب یک لایه امنیتی برای HTTP است، پروتکلی که مرورگرها و برنامهها با آن با وبسایتها حرف میزنند. OWASP، پروژه امنیتی متنباز، آن را فایروالی برای برنامههای HTTP تعریف میکند که مجموعهای از قاعدهها را روی یک گفتوگوی HTTP اعمال میکند.
واژه کلیدی «برنامه» است. فایروال شبکه بر پایه آدرسها و پورتها تصمیم میگیرد، پس نمیتواند ورود عادی به حساب را از فرم ورودی که با فرمانهای پایگاه داده پر شده تشخیص دهد: هر دو روی پورت 443 میرسند. WAF درخواست را باز میکند، میخواند و با قاعدههایی که برای حملههای وب نوشته شدهاند مقایسه میکند.
WAF از وبسایت محافظت میکند، نه از بازدیدکننده. این لایه بهصورت ریورس پروکسی کار میکند؛ یعنی جای سرور میایستد و هر درخواست را زودتر از آن دریافت میکند.
WAF کجا قرار میگیرد؟
WAF همیشه میان اینترنت و سرور وب قرار دارد. چهار جای معمول برای آن هست:
- در لبه یک CDN (شبکه توزیع محتوا). Cloudflare، Akamai و Imperva شبکههایی از سرورها را جلوی سایتهای مشتریان خود اداره میکنند. دامنه به ارائهدهنده اشاره میکند، پس بازدیدکنندگان ابتدا به WAF او میرسند.
- در متعادلکننده بار ابری. AWS WAF به CloudFront، Application Load Balancer و API Gateway متصل میشود؛ Azure هم WAF خود را در Application Gateway و Front Door اجرا میکند.
- روی یک دستگاه سختافزاری مانند F5 BIG-IP، جلوی سرورهای خود شرکت.
- درون سرور وب. ModSecurity، موتور WAF متنباز برای Apache، IIS و Nginx که اکنون زیر چتر OWASP نگهداری میشود، ماژول کلاسیک این دسته است. بسیاری از شرکتهای میزبانی آن را برای همه مشتریان روشن میکنند.
WAF برای خواندن درخواست باید آن را بهصورت متن ساده در اختیار داشته باشد. پس گواهی سایت را نگه میدارد، اتصال HTTPS مرورگر را پایان میدهد و اتصال جداگانهای به سرور مبدأ (origin) باز میکند. مرورگر همچنان نماد قفل را نشان میدهد، چون از دید مرورگر WAF همان سایت است.
WAF چگونه کار میکند؟
درخواست در شش گام از WAF میگذرد:
- اتصال در WAF پایان مییابد. WAF رمز HTTPS را میگشاید و درخواست کامل را دریافت میکند.
- درخواست به اجزایش تقسیم و کدگشایی میشود تا حمله نتواند پشت
%27بهجای آپاستروف پنهان شود. - ابتدا قاعدههای سفارشی صاحب سایت اجرا میشوند: اجازه به محدوده IP دفتر، مسدود کردن یک کشور، خصوصی نگه داشتن
/admin. - قاعدههای حمله و شمارندههای نرخ به درخواست امتیاز میدهند. قاعدههای مربوط به تزریق SQL، اسکریپتنویسی میانسایتی (XSS) و نقض پروتکل امتیاز میافزایند؛ شمارندهها درخواستها را بهازای هر IP یا نشست میشمارند.
- حکم اجرا میشود: ارسال به سرور، مسدود کردن با صفحه خطا، نشان دادن چالش یا فقط ثبت در گزارش.
- رویداد با یک شناسه ثبت میشود، مانند Ray ID در Cloudflare یا شماره مرجع (reference number) در Akamai. همین شناسه شکایت بازدیدکننده را به قاعدهای که اجرا شده پیوند میدهد.
WAF چه چیزی را بازرسی میکند؟
فایروال شبکه فقط بر پایه سطر آخر این جدول میتواند کاری انجام دهد؛ بقیه سطرها در لایه برنامه دیده میشوند.
| بخش درخواست | WAF به دنبال چه میگردد | نمونهای از تطابق |
|---|---|---|
| مسیر و URL | مسیرهای حساس یا غیرمنتظره | /wp-admin از خارج از کشور، پیمایش مسیر با ../ |
| رشته پرسوجو، فیلدهای فرم | کد در جایی که باید داده باشد | فرمانهای پایگاه داده در کادر جستوجو |
| هدرها و کوکیها | مقدارهای غایب، عجیب یا دستکاریشده | نبودن هدر User-Agent |
| بدنه (فرم، JSON، XML) | محمولههای حمله، فایلهای بیش از حد بزرگ | فیلد JSONی که یک فرمان پوسته (shell) را حمل میکند |
| نرخ | درخواستهای بیش از حد بهازای هر IP یا نشست | صدها تلاش ورود در دقیقه |
| IP مبدأ و کشور | فهرستهای اعتبار، قاعدههای جغرافیایی | آدرسی که در یک فهرست تهدید آمده است |
WAF از چه قاعدههایی استفاده میکند؟
امضاها (signatures) با تکنیکهای شناختهشده حمله جور درمیآیند، مانند تکههای SQL در یک فیلد فرم یا برچسبهای <script> در یک دیدگاه. در برابر حملههای شناختهشده دقیقاند و در برابر حملههای تازه کور. شناختهشدهترین مجموعه متنباز OWASP Core Rule Set (CRS) است: قاعدههای عمومی حمله برای ModSecurity و موتورهای سازگار با آن مانند Coraza. WAF در Azure بر پایه آن ساخته شده و Cloudflare پیادهسازی خودش را از آن ارائه میدهد.
قاعدههای مدیریتشده (managed rules) را فروشنده WAF مینویسد و بهروز میکند: وقتی نقصی جدی در یک نرمافزار پرکاربرد علنی میشود، قاعدهای تازه همه مشتریان را پوشش میدهد. قاعدههای سفارشی (custom rules) را خود صاحب سایت مینویسد، مانند مسدود کردن یک مسیر یا اجازه دادن به IP یک شریک تجاری.
محدودیت نرخ (rate limiting) درخواستها را بهازای هر IP، نشست یا کلید در یک بازه زمانی میشمارد. صفحه محدودیت نرخ Cloudflare بهجای 403 کد 429 Too Many Requests برمیگرداند.
مدیریت ربات (bot management) که معمولاً افزونهای پولی است، کلاینتها را در سه دسته میگذارد: انسانها، رباتهای تأییدشده مانند خزندههای موتورهای جستوجو و بقیه. Cloudflare این را به شکل امتیاز ربات از 1 (خودکار) تا 99 (انسان) بیان میکند.
وصله مجازی (virtual patching) در راهنمای خلاصه وصله مجازی از OWASP چنین تعریف شده است: لایهای که تلاشهای بهرهبرداری از یک آسیبپذیری شناختهشده را بدون تغییر کد آسیبپذیر مسدود میکند. وصله مجازی زمان میخرد، اما حفره را از بین نمیبرد.
امتیازدهی ناهنجاری چگونه تصمیم میگیرد؟
CRS با نخستین تطابق مسدود نمیکند و از امتیازدهی ناهنجاری (anomaly scoring) استفاده میکند. هر قاعدهای که جور دربیاید امتیاز میافزاید: 5 برای بحرانی (critical)، 4 برای خطا (error)، 3 برای هشدار (warning) و 2 برای اطلاع (notice). وقتی مجموع به آستانه ورودی (inbound threshold) برسد، که مستندات CRS تنظیم آن را روی 5 پیشنهاد میکند، درخواست رد میشود. یک تطابق بحرانی کافی است؛ یک هشدار بهتنهایی کافی نیست، اما یک هشدار همراه با یک اطلاع کافی است.
CRS چهار سطح پارانویا (paranoia level) هم دارد. هر سطح بالاتر از 1 قاعدههای سختگیرانهتری میافزاید که هم حملههای بیشتر و هم بازدیدکنندگان قانونی بیشتری را میگیرند.
مقایسه WAF، فایروال شبکه و ریورس پروکسی
هر سه میتوانند در یک دستگاه اجرا شوند. نوشته پروکسی و فایروال تفاوت پایه میان فیلتر کردن ترافیک و ارسال آن از طرف دیگری را توضیح میدهد؛ اینجا جایگاه WAF را میبینیم.
| فایروال شبکه | WAF | ریورس پروکسی | |
|---|---|---|---|
| لایه | شبکه، انتقال | برنامه (HTTP) | برنامه (HTTP) |
| چه میخواند | IP، پورت، وضعیت اتصال | URL، هدرها، بدنه، نرخ | میزبان و مسیر، برای مسیریابی |
| کار اصلی | اجازه دادن به اتصال یا دور انداختن آن | متوقف کردن حمله و سوءاستفاده | توزیع بار، کش، پایان دادن به TLS |
| نمونه | فایروال روتر دفتر | ModSecurity همراه با CRS | Nginx جلوی سرورهای برنامه |
WAF ریورس پروکسیای است با قاعدههای امنیتی. ریورس پروکسی بدون این قاعدهها یک حمله را با همان دقتی ارسال میکند که یک درخواست عادی را. محافظت در برابر سیلهای DDoS در سطح شبکه لایهای جداگانه است.
صفحه مسدودی WAF چه شکلی دارد؟
صفحه پیشفرض معمولاً نشان میدهد کدام محصول جلوی شما را گرفته است.
| محصول | متن صفحه | شناسهای که برای سایت میفرستید |
|---|---|---|
| Cloudflare | «Sorry, you have been blocked» یا Error 1020 | Ray ID |
| Akamai | «Access Denied. You don't have permission to access …» | Reference # |
| Imperva | «Request unsuccessful. Incapsula incident ID» | Incident ID |
| AWS WAF از راه CloudFront | «The request could not be satisfied. Request blocked.» | زمان و URL |
| Azure Application Gateway | 403 Forbidden، Microsoft-Azure-Application-Gateway/v2 | زمان و URL |
| F5 BIG-IP | «The requested URL was rejected» | Support ID |
بیشتر آنها 403 Forbidden برمیگردانند: سرور درخواست را فهمیده و از انجام آن سر باز میزند. برای اینکه 403 ناشی از WAF را از 403 ناشی از بررسی ورود یا مجوز فایلها تشخیص دهید، راهنمای خطای 403 Forbidden را ببینید.
شما بهعنوان بازدیدکننده نمیتوانید قاعده را تغییر دهید، اما میتوانید محرکهای رایج را کنار بگذارید:
- VPN یا افزونه پروکسی را خاموش کنید و صفحه را دوباره بارگذاری کنید؛ آدرسهای مشترک VPN اغلب اعتبار پایینی دارند.
- پنجره ناشناس را امتحان کنید. این پنجره بدون کوکیهای قدیمی و با خاموش بودن بیشتر افزونهها باز میشود.
- اگر مسدودی پس از فرستادن یک فرم پیش آمد، آنچه را نوشتهاید بررسی کنید: کد یا متنی شبیه SQL ممکن است با یک قاعده حمله جور دربیاید.
- هنوز مسدودید؟ شناسه، زمان و کاری را که انجام میدادید برای سایت بفرستید. فقط گرداننده سایت میتواند ببیند کدام قاعده اجرا شده است.
چرا WAF بازدیدکنندگان واقعی را مسدود میکند؟
مثبت کاذب (false positive) درخواستی قانونی است که یک قاعده آن را حمله به حساب میآورد. منشأهای معمول آن اینهاست:
- محتوایی که شبیه کد است: انجمن برنامهنویسان، فرم پشتیبانی که کاربران در آن لاگ میچسبانند، ویرایشگری که HTML ذخیره میکند.
- آدرسهای مشترک: شبکه یک دفتر یا اپراتور موبایل میتواند هزاران نفر را پشت چند IP جمع کند، پس محدودیت نرخی که برای یک نفر تنظیم شده برای همه فعال میشود.
- فهرستهای اعتبار: خروجیهای VPN و سرورهای ابری مشترکاند و برخی از کاربرانشان بدرفتاری میکنند.
- تنظیمات سختگیرانه: سطح پارانویای بالاتر مشتریان بیشتری را هم میگیرد.
صاحبان سایت میتوانند بدون خاموش کردن محافظت این مشکل را حل کنند:
- با حالت فقط ثبت شروع کنید. صفحه نمای کلی WAF در Azure توصیه میکند WAF تازه را پیش از رفتن به حالت Prevention (پیشگیری) مدت کوتاهی در حالت Detection (تشخیص) اجرا کنید. کنش Count (فقط شمارش) در AWS WAF همین کار را انجام میدهد.
- قاعده را پیدا کنید. در گزارش WAF، Ray ID، شماره مرجع یا زمان مسدودی را جستوجو کنید.
- استثنایی محدود بنویسید. بهجای غیرفعال کردن کل مجموعه قاعده، یک فیلد را از یک قاعده مستثنا کنید.
- از بیرون آزمایش کنید. قاعدههای جغرافیایی و فهرستهای اعتبار با بازدیدکنندگان خارج از کشور رفتار متفاوتی دارند. یک پروکسی مسکونی در کشور هدف سایت شما را همانطور نشان میدهد که یک کاربر خانگی در آن کشور میبیند.
چرا WAFها اسکرپرها و ابزارهای پایش را مسدود میکنند؟
ابزار پایش قیمت، ابزار بررسی آپتایم یا خزنده پژوهشی پیش از رسیدن به سایت به WAF میرسد و چند قاعده مشخصاً ترافیک خودکار را هدف گرفتهاند:
- قاعدههای پروتکل. WAF در Azure در برابر درخواستهایی که هدر
Host،User-AgentیاAcceptندارند محافظت میکند و برای خزندهها و اسکنرهای امنیتی قاعده دارد؛ پس یک کلاینت HTTP خام ممکن است در همان ابتدا متوقف شود. - گروههای قاعده ربات. گروه قاعده Bot Control در AWS کتابخانههای HTTP، فریمورکهای اسکرپینگ، سرویسهای پایش و مرورگرهای خودکار را برچسب میزند و آنهایی را که نمیتواند تأیید کند مسدود میکند. رباتهای تأییدشده، مانند خزندههای موتورهای جستوجوی بزرگ، عبور میکنند.
- سیگنالهای شبکه و نرخ. ترافیک مراکز دادهای که رباتها زیاد از آنها استفاده میکنند علامتگذاری میشود و خزندهای که هر 200 میلیثانیه یک صفحه میگیرد، نیتش هر چه باشد، شبیه حمله به نظر میرسد.
نوشته تشخیص بات چگونه کار میکند سمت تشخیص را لایه به لایه بررسی میکند. مسدودی پاسخ سایت است و واکنش مشروع با همین پاسخ کار میکند:
- اگر سایت API رسمی، خوراک داده یا برنامه همکاری دارد، از آن استفاده کنید.
- به robots.txt و شرایط استفاده سایت پایبند باشید.
- کلاینت خود را صادقانه معرفی کنید: یک
User-Agentواقعی همراه با نشانی تماس. - سرعت را کم کنید و وقتی
429یا403میبینید، فاصله میان تلاشها را بیشتر کنید. - درخواست کنید در فهرست مجاز (allow-list) قرار بگیرید. بسیاری از گردانندگان سایتها اگر راه تماس و یک آدرس IP ثابت در اختیارشان بگذارید، به ابزار پایشی که درست رفتار میکند اجازه عبور میدهند. یک پروکسی ISP آدرسی اختصاصی در اختیار شما میگذارد که تغییر نمیکند.
برای عبور از مسدودی آدرس IP را نچرخانید و از ابزارهایی که اثر انگشت مرورگر را جعل میکنند استفاده نکنید. این کار تصمیم سایت را نادیده میگیرد و دقیقاً همان رفتاری است که این قاعدهها برای یافتنش تنظیم شدهاند.
چه کسانی از WAF استفاده میکنند؟
- فروشگاههای اینترنتی و صفحههای پرداخت. الزام 6.4.2 در PCI DSS 4.0، استاندارد امنیتی صنعت کارتهای پرداخت، راهکاری خودکار جلوی برنامههای وب در دسترس عموم میخواهد که حملههای وب را تشخیص دهد و جلوی آنها را بگیرد. خلاصه تغییرات PCI DSS این الزام را تا 31 مارس 2025 روش توصیهشده (best practice) اعلام کرده بود؛ از آن تاریخ اجباری است.
- صفحههای ورود، جایی که محدودیت نرخ حمله credential stuffing را کند میکند؛ یعنی آزمودن رمزهای نشتکرده روی حسابهای فراوان.
- APIها، که با همان خطرهای تزریقی روبهرو هستند که فرمهای وب.
- سایتهای ساختهشده با وردپرس یا نرمافزارهای پرکاربرد دیگر، که در آنها نقص یک افزونه هزاران سایت را همزمان در معرض خطر قرار میدهد.
اشتباهات رایج
- استفاده از WAF بهجای اصلاح کد. وصله مجازی فقط ترافیکی را پوشش میدهد که WAF میبیند.
- در دسترس گذاشتن مستقیم سرور مبدأ. اگر سرور به درخواستهایی که مستقیم به آدرس IP آن فرستاده میشوند پاسخ دهد، مهاجمان از کنار WAF میگذرند.
- مسدود کردن از روز اول بدون دورهای که فقط ثبت میکند.
- غیرفعال کردن کل یک مجموعه قاعده برای رفع یک مثبت کاذب.
- تازهسازی پشتسرهم صفحه مسدودی از سوی بازدیدکننده، که شمارنده نرخ را بالا میبرد.
راهنمای انتخاب
| وضعیت شما | چه کنید |
|---|---|
| صفحه مسدودی با یک شناسه میبینید | شناسه، زمان و URL را برای سایت بفرستید |
| سایت کوچکی روی هاست اشتراکی دارید | بپرسید میزبان ModSecurity را همراه با CRS اجرا میکند یا نه، یا از WAF یک CDN استفاده کنید |
| پرداخت آنلاین با کارت میگیرید | الزام 6.4.2 در PCI DSS یک WAF یا راهکار همارز میخواهد |
| در حال افزودن WAF به سایتی فعال هستید | ابتدا آن را در حالت تشخیص (Detection) یا شمارش (Count) اجرا کنید |
| مشتریان واقعی مسدود میشوند | شناسه قاعده را پیدا کنید و استثنایی محدود بنویسید |
| ابزار پایش یا خزنده شما 403 میگیرد | سرعت را کم کنید، خودتان را معرفی کنید و درخواست قرار گرفتن در فهرست مجاز بدهید |
| میخواهید سایتتان را همانطور ببینید که بازدیدکنندگان خارج از کشور میبینند | از راه یک IP مسکونی در همان کشور آزمایش کنید |
پرسشهای متداول
آیا WAF همان فایروال است؟
WAF نوعی فایروال است. فایروال شبکه اتصالها را بر پایه آدرس و پورت مجاز یا رد میکند؛ WAF محتوای درخواستهای HTTP را میخواند. بیشتر سایتها به هر دو نیاز دارند، چون هر کدام چیزی را میبیند که دیگری نمیبیند.
آیا Cloudflare یک WAF است؟
Cloudflare شبکهای از سرورهای ریورس پروکسی است که جلوی وبسایتها قرار دارد. WAF آن، با قاعدههای سفارشی، محدودیت نرخ و مجموعهقاعدههای مدیریتشده، یکی از سرویسهای روی این شبکه است و کنار کش و محافظت DDoS ارائه میشود.
آیا WAF میتواند جلوی حمله DDoS را بگیرد؟
تا حدی. میتواند سیل درخواستهای HTTP را با محدودیت نرخ و چالش مهار کند. سیلهایی که خود اتصال شبکه را پر میکنند به محافظت ویژه DDoS نیاز دارند.
آیا WAF رایگان یا متنباز وجود دارد؟
بله. ModSecurity همراه با OWASP Core Rule Set شناختهشدهترین جفت متنباز است و Coraza موتور تازهتری است که همان قاعدهها را اجرا میکند. برخی CDNها هم یک مجموعهقاعده مدیریتشده پایه را در پلنهای رایگان خود ارائه میدهند.
چرا وقتی از VPN استفاده میکنم WAF مرا مسدود میکند؟
سرورهای VPN میان افراد زیادی مشترکاند، پس آدرسهایشان به فهرستهای اعتبار راه مییابد و برخی سایتها کل کشورها یا شبکههای ابری را مسدود میکنند. اگر پس از قطع VPN صفحه باز شد، قاعده به آدرس مربوط بوده است، نه به شما.
آیا WAF میتواند ترافیک HTTPS را بخواند؟
بله، و باید بتواند. WAF گواهی سایت را در اختیار دارد، درخواست را رمزگشایی و بازرسی میکند و سپس آن را، معمولاً از راه یک اتصال رمزگذاریشده تازه، به سرور میفرستد. میان مرورگر شما و WAF ترافیک رمزگذاریشده باقی میماند.
خلاصه
فایروال برنامه وب ریورس پروکسیای است با قاعدههای امنیتی که هر درخواست HTTP را پیش از خود وبسایت میخواند. درخواستها را با امضاها، امتیاز ناهنجاری، قاعدههای سفارشی، محدودیت نرخ و سیگنالهای ربات میسنجد و صفحههای مسدودیاش شناسهای دارند که فقط گرداننده سایت میتواند ردش را بگیرد. بازدیدکنندگان بهتر است محرکهای آشکار را کنار بگذارند و با سایت تماس بگیرند؛ صاحبان سایت بهتر است اول ثبت کنند، بعد مسدود کنند و استثناها را محدود بنویسند. برای آدرسی ثابت که بتوان آن را در فهرست مجاز گذاشت، یا IPهای محلی برای آزمودن قاعدههای خودتان از خارج از کشور، صفحه پروکسیهای ما را ببینید.




