Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

بنية قاعدة YAML

توثِّق هذه الصفحة مخطط قاعدة YAML الكامل المستخدم في PRX-WAF. كل ملف قاعدة يتبع هذه البنية.

بنية الملف

كل ملف قاعدة YAML لديه قسم بيانات وصفية على المستوى الأعلى يليه قائمة من القواعد:

yaml
version: "1.0"                     # Schema version (required)
description: "Short description"   # Human-readable label (required)
source: "OWASP CRS v4.25.0"       # Origin of the rules (optional)
license: "Apache-2.0"             # SPDX license identifier (optional)

rules:
  - <rule>
  - <rule>

مخطط القاعدة

كل قاعدة في قائمة rules لها الحقول التالية:

yaml
- id: "CRS-942100"              # Unique string ID (REQUIRED)
  name: "SQL injection attack"  # Short description (REQUIRED)
  category: "sqli"              # Category tag (REQUIRED)
  severity: "critical"          # Severity level (REQUIRED)
  paranoia: 1                   # Paranoia level 1-4 (optional, default: 1)
  field: "all"                  # Request field to inspect (REQUIRED)
  operator: "regex"             # Match operator (REQUIRED)
  value: "(?i)select.+from"     # Pattern or threshold (REQUIRED)
  action: "block"               # Action on match (REQUIRED)
  tags:                         # String tags (optional)
    - "owasp-crs"
    - "sqli"
  crs_id: 942100                # Original CRS numeric ID (optional)
  reference: "https://..."      # CVE or documentation link (optional)

الحقول المطلوبة

الحقلالنوعالوصف
idstringمعرِّف فريد عبر جميع ملفات القواعد. التنسيق: <PREFIX>-<CATEGORY>-<NNN>
namestringوصف قصير قابل للقراءة (بحد أقصى ~120 حرفاً)
categorystringوسم الفئة للتصفية والإبلاغ
severitystringأحد: critical وَhigh وَmedium وَlow وَinfo وَnotice وَwarning وَerror وَunknown
fieldstringأي جزء من الطلب يتم فحصه (انظر مرجع الحقول)
operatorstringكيفية مطابقة القيمة (انظر مرجع العوامل)
valuestringالنمط أو العتبة أو اسم ملف قائمة الكلمات
actionstringما يجب فعله عند تطابق القاعدة (انظر مرجع الإجراءات)

الحقول الاختيارية

الحقلالنوعالافتراضيالوصف
paranoiainteger1مستوى الذعر 1-4
tagsstring[][]وسوم للتصفية وعرض لوحة التحكم
crs_idinteger--المعرِّف الرقمي الأصلي لـ OWASP CRS
referencestring--URL للـ CVE أو مقالة OWASP أو المنطق

مرجع الحقول

تُحدِّد قيمة field أي جزء من طلب HTTP يتم فحصه:

الحقليفحص
pathمسار URI للطلب (بدون سلسلة الاستعلام)
queryسلسلة الاستعلام (جميع المعاملات مُفككة الترميز)
bodyجسم الطلب (مُفكَّك الترميز)
headersجميع رؤوس الطلب (أزواج الاسم: القيمة)
user_agentرأس User-Agent فقط
cookiesملفات تعريف الارتباط في الطلب
methodأسلوب HTTP (GET وPOST وPUT وغيرها)
content_typeرأس Content-Type
content_lengthقيمة Content-Length (للمقارنة الرقمية)
path_lengthطول مسار URI (للمقارنة الرقمية)
query_arg_countعدد معاملات الاستعلام (للمقارنة الرقمية)
allجميع الحقول أعلاه مجتمعةً

مرجع العوامل

تُحدِّد قيمة operator كيفية مطابقة value مع الحقل المفحوص:

العاملالوصفتنسيق القيمة
regexتعبير نمطي متوافق مع PCREنمط Regex
containsالحقل يحتوي على السلسلة الحرفيةسلسلة حرفية
equalsالحقل يساوي القيمة تماماً (حساس لحالة الأحرف)سلسلة حرفية
not_inقيمة الحقل ليست في القائمةقائمة مفصولة بفواصل
gtقيمة الحقل (رقمية) أكبر منسلسلة رقمية
ltقيمة الحقل (رقمية) أصغر منسلسلة رقمية
geقيمة الحقل (رقمية) أكبر من أو تساويسلسلة رقمية
leقيمة الحقل (رقمية) أصغر من أو تساويسلسلة رقمية
detect_sqliكشف حقن SQL عبر libinjection"true" أو ""
detect_xssكشف XSS عبر libinjection"true" أو ""
pm_from_fileمطابقة عبارات مع ملف قائمة كلماتاسم ملف في owasp-crs/data/
pmمطابقة عبارات مع قائمة مضمَّنةعبارات مفصولة بفواصل

مرجع الإجراءات

تُحدِّد قيمة action ما يحدث عند تطابق القاعدة:

الإجراءالوصف
blockرفض الطلب باستجابة 403 Forbidden
logالسماح بالطلب لكن تسجيل التطابق (وضع المراقبة)
allowالسماح صراحةً بالطلب (يتجاوز القواعد الأخرى)
denyاسم بديل لـ block
redirectإعادة توجيه الطلب (إعداد خاص بالمحرك)
dropإسقاط الاتصال بصمت

TIP

ابدأ القواعد الجديدة بـ action: log لمراقبة النتائج الإيجابية الخاطئة قبل التبديل إلى action: block.

اتفاقية مساحة الاسم للمعرِّفات

يجب أن تتبع معرِّفات القواعد اتفاقية البادئة المعتمدة:

الدليلبادئة المعرِّفمثال
owasp-crs/CRS-<number>CRS-942100
modsecurity/MODSEC-<CATEGORY>-<NNN>MODSEC-IP-001
cve-patches/CVE-<YEAR>-<SHORT>-<NNN>CVE-2021-LOG4J-001
custom/CUSTOM-<CATEGORY>-<NNN>CUSTOM-API-001

مثال كامل

yaml
version: "1.0"
description: "Application-specific access control rules"
source: "custom"
license: "Apache-2.0"

rules:
  - id: "CUSTOM-API-001"
    name: "Block access to internal admin API"
    category: "access-control"
    severity: "high"
    paranoia: 1
    field: "path"
    operator: "regex"
    value: "(?i)^/internal/"
    action: "block"
    tags: ["custom", "access-control"]

  - id: "CUSTOM-BOT-001"
    name: "Log suspicious automated tool user-agents"
    category: "scanner"
    severity: "medium"
    paranoia: 2
    field: "user_agent"
    operator: "regex"
    value: "(?i)(masscan|zgrab|python-requests/|go-http-client)"
    action: "log"
    tags: ["custom", "bot", "scanner"]

  - id: "CUSTOM-RATE-001"
    name: "Block requests with excessive query parameters"
    category: "dos"
    severity: "medium"
    paranoia: 1
    field: "query_arg_count"
    operator: "gt"
    value: "50"
    action: "block"
    tags: ["custom", "dos"]

التحقق من القواعد

تحقق من ملفات قواعدك قبل النشر:

bash
# التحقق من جميع القواعد
python rules/tools/validate.py rules/

# التحقق من ملف محدد
python rules/tools/validate.py rules/custom/myapp.yaml

يتحقق أداة التحقق من:

  • وجود الحقول المطلوبة
  • عدم تكرار معرِّفات القواعد عبر جميع الملفات
  • صحة قيم الخطورة والإجراءات
  • أن مستويات الذعر في النطاق 1-4
  • أن التعابير النمطية تُجمَّع بشكل صحيح
  • عدم استخدام العوامل الرقمية مع قيم سلسلة نصية

الخطوات التالية

Released under the Apache-2.0 License.