حماية WAF والحقن
1) لماذا WAF في عصر API
حتى مع التحقق الصارم والبارامترات، تحدث الحقن بسبب:- «ذيول طويلة» من التكامل (رمز قديم، خطوط ويب تابعة)،
- تحليل التناقضات (إطار ↔ بالوكالة)،
- تقنيات تجاوز البروتوكول/التشويش الجديدة.
- يعطي WAF حدًا مبكرًا للإنكار و «التصحيح الافتراضي» قبل إصدار الكود، لكنه لا يحل محل التطوير الآمن.
2) نموذج التهديد: أنواع حقن واجهة برمجة التطبيقات
SQLi/ORMi: كلاسيكية/منبثقة/قائمة على الزمن/مكدسة ؛ أعمى بسبب التأخير.
NoSQLi (Mongo/Elastic): المشغلون «ne $/$ gt»، حقن JSON، regex-DoS.
Command Injection/RCE: shell metacharacters، استبدال الحجة، التصحر غير الآمن → code exec.
XXE: الكيانات الخارجية/DTDs في XML.
SSRF: الوصول إلى 169. 254. 169. 254 '/الخدمات الداخلية ؛ إعادة دمج DNS.
حقن القالب: Jinja/Thymeleaf/Handlebars ؛ '{{77}}.
حقن LDAP/EL، XPath، حقن الرأس (CRLF)، تجاوز المسار.
رسم بياني محدد QL: استبطان «مخطط __» وعمق/تعقيد الاستفسارات.
JSON/JS-specific: Prototype Pollution ('__ proto __', 'constructor').
gRPC/Protobuf: رسائل كبيرة الحجم، تهريب ميداني من خلال عدم تطابق المخطط.
3) بنية WAF
محيط CDN-WAF: تصفية جغرافية/ASN سريعة، والتحكم الأساسي في الروبوت، والذاكرة المخبأة/الحشوة المضادة.
المحيط L7 (NGINX/Envoy/APISIX/Kong): تحليل دقيق، وقواعد عميقة، وتكامل مع PDP/حدود.
Sidecar/mash (المبعوث WASM/Filter): لكل خدمة، بالقرب من البيانات، أقل إيجابية خاطئة لواجهات برمجة التطبيقات الداخلية.
التوصية: نموذج الطبقة المزدوجة (CDN-WAF + L7 WAF).
4) التحليل والتطبيع ومكافحة التجاوز
يجب أن يرى WAF نفس التمثيل القانوني مثل التطبيق:- تطبيع المسار ('/% 2e% 2e/b 'فشل →،' UTF-8 '/Unicode confusables، NUL bytes.
- فك التشفير الفردي: URL-/HTML-/Unicode-/Base64-layers، حظر فك التشفير المزدوج.
- القيود: «max _ headers'،» max _ header _ size «،» max _ body _ size «،» max _ args'، عمق JSON، حد متعدد الأجزاء، 2x gzip/zip قنابل ممنوعة.
- سياسات نوع المحتوى: «تطبيق/جسون» فقط على نقاط نهاية JSON ؛ رفض «متعدد اللغات».
5) نماذج القواعد
سلبية (التوقيعات): OWASP CRS (SQLi/XSS/SSRF/Java/Node RCE، إلخ). البداية السريعة.
إيجابي (السماح بالقائمة): مخططات صارمة (مخطط JSON/Protobuf)، الأنواع والنطاقات ؛ على الطرق.
غير طبيعي/تسجيل: تلخيص العلامات «المشبوهة» → سد العتبة.
السياق: نبذات مختلفة عن 'البريد/المدفوعات' و 'GET/status' ؛ ناقص FP.
6) وحدات الحماية (في حزمة)
1. المخططات والأنواع: JSON Schema/Protobuf التحقق من صحة منطق الأعمال.
2. Parameterization: premissions prepresented expressions, ORM bindings, concatention promotion.
3. الهروب من المخرجات: سياق HTML/JS/SQL.
4. سياسات الجسم: نوع المحتوى، الحجم، القيود متعددة الأجزاء، حظر الثنائيات على مقابض JSON.
5. قواعد WAF: CRS + السلبية/الإيجابية المخصصة.
6. السعر/الحصة/التوافق: قمع DDoS الوحشي/السلحفاة، الكابتشاس الوقائي/التحديات للأشكال العامة.
7. عزل الشبكة: سياسات الخروج لـ SSRF (رفض RFC1918/metadata/Unix المقابس).
8. Headers-hygiene: «X-Content-Type-Options: nosniff» و «Content-Security-Policy» for front و «Referrer-Policy».
9. حارس الرسم البياني QL: حدود العمق/التعقيد، حظر الاستبطان في الحث (أو بوابة الدور).
7) أمثلة التكوين
7. 1 NGINX + ModSecurity (OWASP CRS)
nginx load_module modules/ngx_http_modsecurity_module.so;
modsecurity on;
modsecurity_rules_file /etc/modsecurity/modsecurity.conf;
modsecurity_rules '
SecRuleEngine On
Подключаем CRS
Include /etc/modsecurity/crs/crs-setup.conf
Include /etc/modsecurity/crs/rules/.conf
Позитивные правила: только JSON и ограничение размера
SecRule REQUEST_HEADERS:Content-Type "!@rx ^application/json($;)" "id:10001,phase:1,deny,status:415,msg:'Only JSON allowed'"
SecRequestBodyLimit 1048576
SecRequestBodyNoFilesLimit 1048576
Блок локальных адресов (SSRF)
SecRule REQUEST_HEADERS:Host "@ipmatch 127.0.0.0/8 10.0.0.0/8 169.254.0.0/16 192.168.0.0/16" \
"id:10002,phase:1,deny,status:403,msg:'Blocked private range'"
';
server {
listen 443 ssl http2;
server_name api.example.com;
client_max_body_size 1m;
proxy_request_buffering on; # защита от slow-POST proxy_read_timeout 300ms;
proxy_connect_timeout 100ms;
location /v1/ {
proxy_pass http://app_backends;
}
}
7. 2 مبعوث HTTP WAF (WASM + JSON Schema + SSRF exe-exny)
yaml http_filters:
- name: envoy.filters.http.wasm typed_config:
config:
vm_config: { vm_id: waf, code: { local: { filename: /plugins/waf.wasm } } }
configuration:
"@type": type.googleapis.com/google.protobuf.Struct value:
crs_profile: "strict"
deny_patterns: ["(?i)union.select", "(?i)(sleep benchmark)\\s\\("]
json_schema:
"/v1/payments:create": "/schemas/payments_create.json"
- name: envoy.filters.http.router
Egress SSRF guard (L4): deny private ranges from gateway filter_chains:
- filters:
- name: envoy.filters.network.tcp_proxy typed_config:
stat_prefix: egress cluster: internet access_log: [...]
tunneling_config:
hostname: "%REQ(:authority)%"
transport_socket:
name: envoy.transport_sockets.tls
7. 3 APISIX: تقييد النوع ومكافحة التشويش
yaml routes:
- uri: /v1/
plugins:
cors: { allow_origins: "https://app.example.com" }
request-validation:
body_schema:
{"type":"object","properties":{"amount":{"type":"number","minimum":1}},"required":["amount"]}
uri-blocker:
block_rules: ["..","%2e%2e","%2f..","\\x00"] # traversal/NULL proxy-rewrite:
headers:
set:
X-Content-Type-Options: "nosniff"
8) ضبط الإيجابيات الخاطئة وتقليلها (FP)
ملفات تعريف المسار: قواعد صارمة فقط عند الاقتضاء (على سبيل المثال '/البحث 'يسمح '/'%').
Shadow/Report-Only: log responses before the block; ألف/باء مقارنة المقاييس.
يسمح العرف بقوائم المعلمات المشروعة «الصاخبة».
الدرجات: حظر فقط عندما يكون مجموع المؤشر> العتبة.
التجارب: نسبة صغيرة من حركة المرور لقواعد جديدة → التراجع التلقائي.
9) إمكانية الملاحظة والحدوث
Метрики: 'waf _ block _ total {rule}', 'waf _ anomaly _ score', 'request _ body _ resolved _ total', 'schema _ value _ total', 'srf _ block _ total'.
الجذوع (مأخوذة عينات): القاعدة، جزء من الطلب (محرر)، 'تتبع - معرف'، 'مستأجر'، 'مسار'، سبب. تنكر PII/الأسرار.
لوحات القيادة: القواعد/المسارات العليا، مجموعات FP، الديناميكيات بعد الإصدار.
الحوادث: حفظ القطع الأثرية (الحمولة، pcap إذا لزم الأمر)، منتجات RCA و «البقع الافتراضية».
10) سيناريوهات الاختبار والفوضى
حاويات تجاوز WAF (SQLi/XSS/SSRF)، ترميزات يونيكود المختلطة المزدوجة/الثلاثية.
تحليل الاختلافات: إرسال الحمولة، حيث يمكن أن يتباعد الوكيل والإطار (تكرار المعلمة، المصفوفات، '؛' مقابل '&').
بطيء البريد/كبير الحجم، قنابل مضغوطة، أشكال متعددة الأجزاء، حدود خاطئة.
الرسم البياني QL: مولد العمق/التعقيد، والتحقق من الحدود والوقت.
11) أنتيباترن
«تشغيل CRS ونسيان»: بدون مخططات، دون ضبط على طول الطرق.
سجلات مع جسم الطلب الخام و PII.
لا يحد التطبيع/الحجم → التجاوزات، DoS للتحليل.
تخطي فحوصات «نوع المحتوى »/تشارست → هجمات متعددة اللغات.
لا توجد مرشحات للخروج → SSRF إلى البيانات الوصفية السحابية.
موجز مشترك لواجهات برمجة التطبيقات الخارجية والداخلية.
الاستثناءات غير المنضبطة «للشريك» → الثقوب في المحيط.
12) تفاصيل iGaming/Finance
موجزات معززة عن مقابض الدفع/النواتج: حدود صغيرة للجسم، مخططات صارمة، قوائم الرفض لحقول الحساب/IBAN/PAN (إخفاء، شيكات الشكل).
خطوط الويب من PSP/KYC: توقيع HMAC/TLS المتبادل، ملفات تعريف WAF الفردية، مكافحة إعادة التشغيل.
مرشحات Geo/ASN والحدود السلوكية لمنع تسجيل الروبوتات وإساءة استخدام المكافآت.
سجلات الحوادث غير قابلة للتغيير (التدقيق)، والتخزين حسب الولاية القضائية.
13) قائمة التحقق من الاستعداد
- الطبقة المزدوجة WAF (CDN + L7)، التطبيع الفردي وحدود الحجم.
- تمكين OWASP CRS، قواعد مخصصة لكل مسار ؛ مخطط JSON/Protobuf على أقلام الكتابة.
- سياسات نوع المحتوى/المخطط ؛ عدم السماح بفك التشفير المزدوج/NULL/اجتياز.
- كتلة خروج SSRF للنطاقات الخاصة/البيانات الوصفية ؛ حماية إعادة تعبئة DNS.
- معدل/حصة/مواءمة (تحديات) مكافحة الروبوت على الأشكال العامة.
- Shadow/Report-Only → canary → enforce; التراجع التلقائي من قبل SLO و FP.
- المقاييس/السجلات/المسارات مع القناع ؛ لوحات القيادة «القواعد العليا «/FP.
- التصحيح الافتراضي وكتيبات اللعب RCA ؛ اختبارات تجاوز منتظمة.
- ملامح منفصلة لخطافات الويب PSP/KYC وأقلام الدفع وواجهات برمجة التطبيقات الداخلية.
14) TL ؛ د
بناء الحماية حسب الطبقات: التطبيع والحد → المخططات/الأنواع → بارامترات → WAF (CRS + caste) → مرشحات المعدل/الروبوت → SSRF extroduction block. قم بضبط كل مسار، وقم بتشغيل قواعد جديدة في الظل → الكناري، وراقب المقاييس/FP وقم بعمل «تصحيحات افتراضية» قبل إصلاح الكود. لمسارات الدفع/الخطاف الشبكي - ملفات تعريف صارمة منفصلة، HMAC/mTLS ونوافذ الثقة الدنيا.