تنظیم حرفهای HTTP Protocol Constraints در FortiWeb 7.6 بدون ایجاد False Positive
HTTP Protocol Constraints در FortiWeb
درخواست HTTP فقط شامل URL و Body نیست؛ Method، Version، Header، Cookie، Content-Length، Transfer-Encoding، Parameter، Range، Multipart Boundary و Frameهای HTTP/2 یا HTTP/3 همگی بخشی از ساختار پروتکل هستند. مهاجم میتواند با ساخت Request غیرعادی یا مبهم، Parserهای FortiWeb، Reverse Proxy و Backend را وادار کند یک Request را به شکلهای متفاوت تفسیر کنند.
این اختلاف تفسیر میتواند در حملاتی مانند HTTP Request Smuggling، Malformed Request، Oversized Header، Resource Exhaustion، Range-based DoS یا دورزدن کنترلهای Upload استفاده شود. HTTP Protocol Constraints در FortiWeb برای محدودکردن همین رفتارهای غیرعادی طراحی شده است.
مشکل اصلی در Production این است که برنامههای واقعی همیشه رفتار یکسانی ندارند. SAML و JWT میتوانند Headerهای بزرگ تولید کنند، Upload به Body بزرگ نیاز دارد و بعضی APIها یا WebDAV از Methodهای غیرمعمول استفاده میکنند. بنابراین Profile باید بر اساس Baseline واقعی ساخته شود، نه با فعالکردن کورکورانه تمام گزینهها.
این مقاله بر اساس FortiWeb 7.6.9 نوشته شده است. ساختار اصلی HTTP Protocol Constraints در Patchهای 7.6 مشابه است، اما FortiWeb 7.6.9 سختسازی بیشتری برای HTTP/2 و HTTP/3 اضافه کرده است و بعضی Field Nameها یا Constraintها میان 7.6.0 تا 7.6.9 تفاوت دارند. در FortiWeb 7.4 برخی کنترلهای HTTP/3 وجود ندارند و در FortiWeb 8.0 گزینهها توسعه یافتهاند. قبل از Paste کردن CLI، داخل Context مربوطه از set ? و show full-configuration استفاده کنید.
اصل طراحی: Profile را ابتدا با Action برابر Alert اجرا کنید، ترافیک عادی را اندازهگیری کنید، Exception را فقط برای Host و URL ضروری بسازید و سپس Constraintها را مرحلهای به Alert & Deny منتقل کنید.
مروری بر این مقاله
- حملات و ناهنجاریهای پروتکل HTTP
- FortiWeb Request را چگونه بررسی میکند؟
- معماری Profile و Exception
- Action، Severity، Threat Weight و Trigger
- Content-Length و Transfer-Encoding
- Header Constraints
- URL، Parameter و Cookie Constraints
- Method، Version، Range و Multipart
- HTTP/2 و HTTP/3 Constraints
- HTTP Cache Size و Request Buffer
- دلایل رایج False Positive
- روش جمعآوری Baseline
- سناریوی عملی Portal، SSO، API و Upload
- ساخت Exception در GUI
- ساخت Constraint Profile در GUI
- اتصال Profile به Web Protection Profile
- پیکربندی کامل در CLI
- روش انتقال از Alert به Block
- روش تست امن
- تحلیل Log و Tune کردن
- Troubleshooting
- Best Practice و چکلیست اجرایی
1. حملات و ناهنجاریهای پروتکل HTTP
HTTP Request Smuggling
این حمله زمانی ممکن میشود که دو مؤلفه زنجیره، مرز Request را متفاوت تشخیص دهند. مثال کلاسیک وجود همزمان Content-Length و Transfer-Encoding یا چند Content-Length متفاوت است. یک Proxy ممکن است یکی را مبنا قرار دهد و Backend دیگری را.
Oversized Header و Resource Exhaustion
Header یا Cookie بسیار بزرگ میتواند Memory و CPU Parser را مصرف کند. با این حال، SAML، Kerberos، JWT و Application Gatewayهای واقعی نیز ممکن است Header بزرگ تولید کنند؛ بنابراین Limit باید اندازهگیری شود.
Malformed Request
Request دارای Syntax ناقص، Character غیرمجاز، Chunk Size نامعتبر، Multipart Boundary خراب یا Header بدون ساختار صحیح است. بعضی Clientهای قدیمی Request غیرمعمول ولی عملیاتی تولید میکنند و میتوانند False Positive ایجاد کنند.
Range-based DoS
تعداد زیاد Range یا Rangeهای همپوشان میتواند Backend را مجبور به تولید پاسخهای پیچیده و مصرف Resource کند.
Parameter Pollution
وجود Parameterهای تکراری با یک نام میتواند میان Frameworkها رفتار متفاوت ایجاد کند؛ یک لایه اولین مقدار را بخواند و لایه دیگر آخرین مقدار را.
دفاع چندلایه: HTTP Protocol Constraints جای Patch کردن Web Server، Reverse Proxy و Framework را نمیگیرد. تمام اجزای زنجیره باید Syntax یکسان و امن داشته باشند.
2. FortiWeb Request را چگونه بررسی میکند؟
FortiWeb بعد از دریافت Request، ساختار پروتکل را Parse میکند و Constraintهای فعال را بررسی میکند. نتیجه Match میتواند فقط Log شود یا Request را Block کند. Exception مشخص میکند بعضی Checkها برای Host، URL یا Source خاص اجرا نشوند.
جریان ساده پردازش
- اتصال Client به Virtual Server یا Server Policy
- تشخیص HTTP Version و Parse Request
- بررسی HTTP Protocol Constraints
- بررسی Exceptionهای Matchشده
- اجرای Action برای Constraintهایی که Exception نشدهاند
- ادامه سایر کنترلهای Web Protection Profile
- ارسال Request مجاز به Backend
3. معماری Profile و Exception
| Object |
وظیفه |
مثال |
| HTTP Protocol Constraint Profile |
تعریف Check، Threshold، Action و Severity |
Header Length حداکثر 16 KB |
| HTTP Constraint Exception |
Omit کردن Check مشخص برای Scope محدود |
عدم بررسی Body Length فقط روی /upload/large |
| Web Protection Profile |
اتصال Constraint Profile به Policy |
PARTIAN-INLINE-PROFILE |
| Server Policy |
اعمال Profile روی ترافیک واقعی |
پرتال portal.example.com |
Scopeهای Exception
- Protected Host
- URL بهصورت Simple String یا Regular Expression
- Source IPv4، IPv6 یا IP Range در Buildهای پشتیبانیشده
- Constraintهای انتخابشده برای Omit
اشتباه خطرناک: Exception عمومی برای /* یا تمام Hostها عملاً Constraint را سراسری غیرفعال میکند. Exception باید تا حد ممکن کوچک باشد.
4. Action، Severity، Threat Weight و Trigger
| Action |
رفتار |
زمان استفاده |
ریسک |
| Alert |
Request عبور میکند و Log ایجاد میشود. |
Baseline و Tune |
حمله واقعی Block نمیشود. |
| Alert & Deny |
Request Block و Log ثبت میشود. |
پس از Regression Test |
False Positive باعث اختلال میشود. |
| Deny No Log |
Request بدون Log Block میشود. |
سناریوی خاص |
Troubleshooting دشوار میشود. |
| Block Period |
Client IP برای مدت مشخص Block میشود. |
حملات تکراری |
پشت NAT چند کاربر Block میشوند. |
Severity برای اولویت Event و Threat Weight برای محاسبه Risk Score یا Triggerهای تجمعی استفاده میشود. Trigger Action میتواند Email، SNMP، FortiAnalyzer یا Integration دیگر را فعال کند.
5. Content-Length و Transfer-Encoding
| Constraint |
چه چیزی را تشخیص میدهد؟ |
چرا مهم است؟ |
منبع False Positive |
| Illegal Content Length |
مقدار غیرعددی، منفی یا نامعتبر |
جلوگیری از Parser Confusion |
Client یا SDK خراب |
| Multiple Content-Length |
چند Header Content-Length |
کاهش ریسک Smuggling |
Proxy ناسازگار |
| CL/TE Coexistence |
وجود Content-Length و Transfer-Encoding با هم |
الگوی مهم Smuggling |
Gateway قدیمی |
| Maximum Body Length |
Body بزرگتر از Limit |
کنترل Resource و Upload |
Upload یا API Bulk |
| Illegal Chunk Size |
Chunk Size نامعتبر |
جلوگیری از Parse مبهم |
Client سفارشی معیوب |
- Illegal Content Length و CL/TE Coexistence معمولاً Candidate خوبی برای Block زودهنگام هستند.
- Body Length باید برای هر Application Class اندازهگیری شود.
- Upload Endpoint بهتر است Exception محدود داشته باشد، نه افزایش سراسری Limit.
6. Header Constraints
| کنترل |
شرح |
بررسی عملیاتی |
| Maximum Total Header Length |
مجموع طول تمام Headerها |
SAML، JWT، Kerberos و Cookie را اندازه بگیرید. |
| Maximum Header Count |
تعداد Headerها |
APM، CDN و Gateway ممکن است Header اضافه کنند. |
| Header Name Length |
طول نام یک Header |
Header سفارشی Application را بررسی کنید. |
| Header Value Length |
طول مقدار Header |
Authorization و Cookie ریسک بالاتری دارند. |
| Illegal Header Name/Value |
Characterهای غیرمجاز |
Clientهای قدیمی یا Encoding نادرست |
| Missing Host |
نبود Host در HTTP/1.1 |
Scanner یا Client غیر استاندارد |
نکته SSO
SAML Response معمولاً داخل Body است، اما Cookie، Relay State، JWT یا Headerهای Reverse Proxy میتوانند حجم زیادی ایجاد کنند. قبل از افزایش Header Limit، مشخص کنید کدام Header عامل افزایش است.
7. URL، Parameter و Cookie Constraints
URL Length
Search و Filterهای پیچیده ممکن است Query String طولانی داشته باشند. APIهای طراحیشده با GET برای Payload بزرگ بهتر است بازطراحی شوند، اما تغییر FortiWeb نباید بدون هماهنگی Application Team انجام شود.
Parameter Count و Length
Formهای Dynamic، Data Grid و GraphQL میتوانند تعداد Parameter یا Body بزرگ تولید کنند. Constraint باید با Endpoint واقعی Tune شود.
Duplicate Parameter Name
بعضی Frameworkها Array را با نام تکراری ارسال میکنند؛ برای مثال item=1&item=2. قبل از Block مشخص کنید این رفتار بخشی از طراحی برنامه است یا Parameter Pollution.
Null Character و Illegal Character
وجود Null Byte در URL یا Parameter معمولاً مشکوک است و میتواند در Bypass یا Truncation استفاده شود. این کنترل معمولاً Candidate خوبی برای Block است، مگر Application Legacy رفتار خاصی داشته باشد.
Cookie Count و Length
پرتالهایی که چند Application روی یک Domain دارند ممکن است Cookieهای زیادی ارسال کنند. Domain و Path Cookieها باید توسط Application Team اصلاح شود؛ افزایش نامحدود Limit راهحل بلندمدت نیست.
8. Method، Version، Range و Multipart
HTTP Method
| Method |
کاربرد رایج |
تصمیم |
| GET/HEAD |
دریافت Resource |
معمولاً مجاز |
| POST |
Form و API |
مجاز در URLهای لازم |
| PUT/PATCH/DELETE |
REST API |
فقط Endpointهای API |
| OPTIONS |
CORS Preflight |
برای API Browser ممکن است لازم باشد. |
| PROPFIND/MKCOL |
WebDAV |
فقط در صورت استفاده WebDAV |
| TRACE |
Diagnostic قدیمی |
معمولاً Block |
Range
برای Video Streaming و Download Resume، Range لازم است. تعداد Range یا Overlap باید محدود شود، اما حذف کامل Range میتواند Streaming را مختل کند.
Multipart
Upload فایل از multipart/form-data استفاده میکند. Boundary نامعتبر، Header ناقص یا Part غیرعادی میتواند Malformed تشخیص داده شود. Endpointهای Upload باید با Browser، Mobile App و SDK واقعی تست شوند.
9. HTTP/2 و HTTP/3 Constraints
HTTP/2 و HTTP/3 Request را به Frame یا Stream تقسیم میکنند و محدودیتهای متفاوتی نسبت به HTTP/1.1 دارند. FortiWeb 7.6.9 سختسازی بیشتری برای این پروتکلها ارائه میدهد.
موارد مهم HTTP/2
- Maximum Header List Size
- Maximum Frame Size
- Concurrent Streams
- Header Compression و Dynamic Table
- Protocol Error و Invalid Frame Sequence
موارد مهم HTTP/3
- QUIC Stream Limit
- Header/QPACK Limit
- Connection و Stream Behavior
- UDP Path، Load Balancer و Client Compatibility
روش تست: در Browser DevTools ستون Protocol را بررسی کنید و مطمئن شوید Traffic واقعاً با h2 یا h3 عبور میکند. تست HTTP/1.1 بهتنهایی برای Profile 7.6.9 کافی نیست.
10. HTTP Cache Size و Request Buffer
FortiWeb برای Parse و Scan بعضی Requestها به Buffer نیاز دارد. اگر Request بزرگتر از Cache یا Scan Buffer باشد، ممکن است رفتار Check تغییر کند یا Request بهصورت Malformed دیده شود.
- افزایش Buffer مصرف Memory را بالا میبرد.
- مقدار باید با Model، Concurrent Connection و Request Size هماهنگ باشد.
- برای Upload بزرگ، Exception یا معماری Streaming ممکن است بهتر از افزایش سراسری Buffer باشد.
- قبل از تغییر HTTP-cachesize مستندات CLI همان Build و ظرفیت Appliance را بررسی کنید.
11. دلایل رایج False Positive
| سناریو |
Constraint محتمل |
راهحل درست |
| SAML Login |
Header/Cookie/Body Length |
اندازهگیری Callback و Exception محدود |
| Upload فایل |
Body Length یا Multipart |
Exception فقط روی Upload URL |
| WebDAV |
Illegal Method |
مجازکردن Method فقط روی مسیر WebDAV |
| API Bulk |
Body/Parameter Count |
Profile جدا برای API یا URL خاص |
| Search پیچیده |
URL Length |
اندازهگیری و ترجیح POST در طراحی Application |
| CDN/APM |
Header Count |
حذف Header غیرضروری یا افزایش محدود |
| Legacy Client |
Malformed/Illegal Character |
اصلاح Client؛ Exception آخرین گزینه |
12. روش جمعآوری Baseline
- Flowهای برنامه را فهرست کنید.
- حداقل یک چرخه کاری شامل Peak Business را مشاهده کنید.
- Requestهای Chrome، Firefox، Edge، Mobile App و Integration را جمعآوری کنید.
- برای هر URL حداکثر Header، Body، URL Length، Parameter Count و Cookie را ثبت کنید.
- Requestهای خطادار واقعی را جدا از Traffic Attack دستهبندی کنید.
- مقدار P95، P99 و Maximum را بررسی کنید.
- Margin منطقی اضافه کنید، نه چند برابر نامحدود.
| Flow |
Header Max |
Body Max |
URL Max |
Method |
| Login معمولی |
6 KB |
8 KB |
250 Byte |
POST |
| SAML Callback |
14 KB |
350 KB |
300 Byte |
POST |
| REST API |
5 KB |
2 MB |
700 Byte |
GET/POST/PATCH |
| Large Upload |
4 KB |
50 MB |
180 Byte |
POST |
13. سناریوی عملی Portal، SSO، API و Upload
دامنه portal.example.com چهار Flow دارد:
| URL |
رفتار |
Profile Decision |
| /login |
Form کوچک |
همه Constraintهای عمومی |
| /sso/callback |
SAML Body بزرگ و Cookie بیشتر |
Limit اندازهگیریشده |
| /api/v1/* |
JSON و PATCH/DELETE |
Profile API یا Exception Method محدود |
| /upload/large |
فایل تا 50 MB |
Omit فقط Maximum Body Length |
- Header Length: 16 KB
- Body Length عمومی: 10 MB
- Illegal Content Length: Alert
- CL/TE Coexistence: Alert
- Malformed Request: Alert
- Upload Exception: فقط Body Length
اعداد نمونهاند: این مقدارها Baseline رسمی Fortinet نیستند. حتماً با داده واقعی Application جایگزین شوند.
14. ساخت Exception در GUI
Web Protection > Protocol > HTTP Constraints Exceptions
- روی Create New کلیک کنید.
- Name را PARTIAN-UPLOAD-BODY-EXCEPTION قرار دهید.
- یک Rule Entry بسازید.
- Host Status را فعال کنید.
- Protected Host برابر portal.example.com را انتخاب کنید.
- Request Type را Simple String انتخاب کنید.
- Request URL را /upload/large وارد کنید.
- فقط Maximum HTTP Body Length را فعال کنید.
- تنظیم را ذخیره کنید.
Exception محدود: اگر مشکل فقط Body Length است، Malformed Request، Header Length و Multipart Bad Request را غیرفعال نکنید.
15. ساخت Constraint Profile در GUI
Web Protection > Protocol > HTTP Protocol Constraints
- Name را PARTIAN-HPC-MONITOR وارد کنید.
- Exception ساختهشده را انتخاب کنید.
- برای هر Constraint ابتدا Status را فعال و Action را Alert قرار دهید.
- Severity را بر اساس ریسک تنظیم کنید.
- Trigger Action را برای Eventهای High یا Critical انتخاب کنید.
- Limitهای Header، Body، URL، Parameter و Cookie را از Baseline وارد کنید.
- Methodهای لازم را بر اساس Application مشخص کنید.
- HTTP/2 و HTTP/3 را با Traffic واقعی تست کنید.
- Profile را ذخیره کنید.
| Constraint |
Severity اولیه |
دلیل |
| CL/TE Coexistence |
High |
ریسک Smuggling |
| Illegal Content Length |
High |
Parser Confusion |
| Null Character |
High |
Bypass و Truncation |
| Header Length |
Medium |
ممکن است Legitimate باشد. |
| Body Length |
Medium |
وابسته به Upload و API |
| Malformed Request |
High |
نیازمند تحلیل Request خام |
16. اتصال Profile به Web Protection Profile
Policy > Web Protection Profile > Inline Protection Profile > Edit
- Profile متصل به Server Policy واقعی را پیدا کنید.
- در بخش Protocol، HTTP Protocol Constraints را فعال کنید.
- PARTIAN-HPC-MONITOR را انتخاب کنید.
- Profile را Save کنید.
- در Server Policy تأیید کنید همین Web Protection Profile اعمال شده است.
- از Revision یا Backup قبل از تغییر نگهداری کنید.
در Offline Protection نیز قابلیت میتواند استفاده شود، اما Actionهای قابل اجرا و رفتار Block با Mode استقرار متفاوت است. برای Enforcement واقعی، Inline Mode لازم است.
17. پیکربندی کامل در CLI
نام گزینهها: Field Name دقیق بعضی Constraintها در Patchهای 7.6 تفاوت دارد. نمونه زیر ساختار استاندارد را نشان میدهد؛ روی دستگاه با set ? کنترل کنید.
Exception محدود برای Upload
config waf HTTP-constraints-exceptions
edit "PARTIAN-UPLOAD-BODY-EXCEPTION"
config HTTP_constraints-exception-list
edit 1
set host-status enable
set host "portal.example.com"
set request-type plain
set request-file "/upload/large"
set max-HTTP-body-length enable
next
end
next
end
Profile اولیه در Alert Mode
config waf HTTP-protocol-parameter-restriction
edit "PARTIAN-HPC-MONITOR"
set exception "PARTIAN-UPLOAD-BODY-EXCEPTION"
set illegal-content-length-check enable
set illegal-content-length-action alert
set illegal-content-length-severity High
set cl-te-coexist-check enable
set cl-te-coexist-action alert
set cl-te-coexist-severity High
set max-HTTP-header-length-check enable
set max-HTTP-header-length 16384
set max-HTTP-header-length-action alert
set max-HTTP-header-length-severity Medium
set max-HTTP-body-length-check enable
set max-HTTP-body-length 10485760
set max-HTTP-body-length-action alert
set max-HTTP-body-length-severity Medium
set block-malformed-request-check enable
set block-malformed-request-action alert
set block-malformed-request-severity High
next
end
اتصال به Inline Protection Profile
config waf web-protection-profile inline-protection
edit "PARTIAN-INLINE-PROFILE"
set HTTP-protocol-parameter-restriction "PARTIAN-HPC-MONITOR"
next
end
بررسی Optionهای Build
config waf HTTP-protocol-parameter-restriction
edit "PARTIAN-HPC-MONITOR"
set ?
end
end
show waf HTTP-constraints-exceptions
show waf HTTP-protocol-parameter-restriction
show waf web-protection-profile inline-protection
انتقال کنترلهای ساختاری به Block
config waf HTTP-protocol-parameter-restriction
edit "PARTIAN-HPC-MONITOR"
set illegal-content-length-action alert_deny
set cl-te-coexist-action alert_deny
set block-malformed-request-action alert_deny
next
end
18. روش انتقال از Alert به Block
| فاز |
Action |
خروجی لازم |
| Discovery |
Alert |
فهرست Flow و Maximumها |
| Tuning |
Alert |
Exception محدود و حذف Noise |
| Pilot |
Alert & Deny برای چند Constraint |
عدم اختلال و Log قابل تحلیل |
| Enforcement |
Alert & Deny |
Monitoring و Rollback |
- Illegal Content-Length
- CL/TE Coexistence
- Illegal Chunk Size
- Null Character
- Illegal Header Character
- Malformed Request پس از تحلیل
- Length و Count Thresholdها بعد از Baseline
19. روش تست امن
تست Functional
- Login Local و SSO
- Upload کوچک، نزدیک Limit و بالاتر از Limit
- REST API با GET، POST، PATCH و DELETE
- CORS Preflight با OPTIONS
- Download Resume و Range
- Chrome، Firefox، Edge و Mobile App
- HTTP/1.1، HTTP/2 و HTTP/3
تست Negative در محیط مجاز
- Content-Length غیرعددی
- دو Content-Length متفاوت
- Content-Length همراه Transfer-Encoding
- Header بزرگتر از Limit
- URL بزرگتر از Limit
- Null Byte یا Character غیرمجاز
- Multipart Boundary خراب
مجوز تست: Requestهای Malformed و Smuggling Test فقط روی سامانهای انجام شوند که مجوز کتبی تست آن را دارید.
20. تحلیل Log و Tune کردن
- Rule Name و Constraint Name
- Action و Severity
- Host و URL
- Client IP و X-Forwarded-For معتبر
- HTTP Method و Version
- Request Length و Limit
- User Agent و Client Type
- Timestamp و تعداد تکرار
| وضعیت |
تصمیم |
| Request حمله واضح است. |
Block و Trigger |
| Request Legitimate و فقط یک URL است. |
Exception محدود |
| Request Legitimate در کل Application است. |
Limit Profile را افزایش دهید. |
| Client غیر استاندارد است. |
اصلاح Client ترجیح دارد. |
| علت نامشخص است. |
Alert باقی بماند و Packet جمع شود. |
21. Troubleshooting
| مشکل |
علت محتمل |
بررسی |
راهحل |
| SSO Fail |
Header، Cookie یا Body Limit |
Callback و Log |
Limit یا Exception محدود |
| Upload Block |
Body Length یا Multipart |
URL و Body Size |
Exception فقط Constraint لازم |
| Exception Match نمیشود. |
Host، URL، Regex یا Order |
Protected Host و Slash |
Simple String و Rule بالاتر |
| API Method Block |
PATCH/DELETE/OPTIONS |
Method و CORS |
Profile API یا Scope محدود |
| Malformed روی Request بزرگ |
Buffer یا Cache |
Request Size و Cache |
تنظیم ظرفیت یا معماری Upload |
| HTTP/2 مشکل دارد. |
Frame یا Stream Limit |
Browser Protocol |
Tune کنترل HTTP/2 |
| چند کاربر Block میشوند. |
NAT و Block Period |
Client IP واقعی |
Alert & Deny یا XFF صحیح |
| CLI Error |
نام Field متفاوت |
set ? |
CLI Reference همان Build |
22. Best Practice و چکلیست اجرایی
- تمام Flowهای Application فهرست شدهاند.
- Baseline شامل Peak Business است.
- Browser، Mobile و Integration تست شدهاند.
- HTTP/1.1، HTTP/2 و HTTP/3 بررسی شدهاند.
- Profile ابتدا در Alert Mode اجرا شده است.
- Header، Body، URL، Parameter و Cookie اندازهگیری شدهاند.
- Illegal Content-Length و CL/TE جداگانه بررسی شدهاند.
- Malformed Request بدون تحلیل Block نشده است.
- Exception قبل از Profile ساخته شده است.
- Exception فقط Host و URL لازم را پوشش میدهد.
- فقط Constraint لازم Omit شده است.
- Regex غیرضروری استفاده نشده است.
- Rule Order بررسی شده است.
- Upload و SSO Scope جدا دارند.
- HTTP Cache Size با ظرفیت Model هماهنگ است.
- Block Period پشت NAT بدون بررسی استفاده نشده است.
- Attack Log و Trigger Action فعالاند.
- بعد از هر Release Regression Test انجام میشود.
- Backup و Rollback Plan وجود دارد.
<grammarly-desktop-integration data-grammarly-shadow-root="true" style="visibility: visible !important;"></grammarly-desktop-integration>