Skip to content
ეს გვერდი შეიქმნა და ითარგმნა ხელოვნური ინტელექტის დახმარებით. თუ შეამჩნევთ უზუსტობას, გთხოვთ, დაგვეხმარეთ გაუმჯობესებაში. GitHub-ზე რედაქტირება

YAML წეს-სინტაქსი

ეს გვერდი PRX-WAF-ის მიერ გამოყენებულ YAML წეს-სქემას სრულად დოკუმენტირებს. ყოველი წეს-ფაილი ამ სტრუქტურას მიჰყვება.

ფაილის სტრუქტურა

ყოველ 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წეს-შემჯამებისას ქმედება (ქმედებ-ცნობარი იხ.)

სურვილისამებრ ველები

ველიტიპინაგულისხმევიაღწერა
paranoiainteger1Paranoia დონე 1-4
tagsstring[][]ტეგები ფილტრაციისა და dashboard-ის ჩვენებისთვის
crs_idinteger--OWASP CRS-ის ორიგინალი რიცხვითი ID
referencestring--URL CVE-ზე, OWASP-ის სტატიაზე ან დასაბუთებაზე

ველის ცნობარი

field მნიშვნელობა განსაზღვრავს HTTP მოთხოვნის რომელი ნაწილი შემოწმდება:

ველიამოწმებს
pathმოთხოვნის URI path (query string-ის გარეშე)
queryQuery string (ყველა პარამეტრი, გაშიფრული)
bodyმოთხოვნის body (გაშიფრული)
headersყველა მოთხოვნის header (სახელი: მნიშვნელობა)
user_agentმხოლოდ User-Agent header
cookiesმოთხოვნის cookies
methodHTTP მეთოდი (GET, POST, PUT და სხვ.)
content_typeContent-Type header
content_lengthContent-Length მნიშვნელობა (რიცხვით შედარებისთვის)
path_lengthURI path-ის სიგრძე (რიცხვით შედარებისთვის)
query_arg_countquery პარამეტრების რაოდენობა (რიცხვით შედარებისთვის)
allყველა ზემოხსენებული ველი გაერთიანებული

ოპერატორის ცნობარი

operator მნიშვნელობა განსაზღვრავს value-ის შემოწმებულ ველთან შემჯამების გზას:

ოპერატორიაღწერამნიშვნელობის ფორმატი
regexPCRE-თავსებადი regular expressionRegex შაბლონი
containsველი შეიცავს ლიტერალ სტრიქონსლიტერალი სტრიქონი
equalsველი ზუსტად უდრის მნიშვნელობას (case-sensitive)ლიტერალი სტრიქონი
not_inველის მნიშვნელობა სიაში არ არისმძიმ-გამოყოფილი სია
gtველის მნიშვნელობა (რიცხვი) მეტიარიცხვ-სტრიქონი
ltველის მნიშვნელობა (რიცხვი) ნაკლებიარიცხვ-სტრიქონი
geველის მნიშვნელობა (რიცხვი) მეტი ან ტოლიარიცხვ-სტრიქონი
leველის მნიშვნელობა (რიცხვი) ნაკლები ან ტოლიარიცხვ-სტრიქონი
detect_sqliSQL injection-ის გამოვლენა libinjection-ის გავლით"true" ან ""
detect_xssXSS-ის გამოვლენა libinjection-ის გავლით"true" ან ""
pm_from_fileსიტყვ-სია-ფაილთან ფრაზ-შემჯამებაფაილ-სახელი owasp-crs/data/-ში
pmშიდა სიასთან ფრაზ-შემჯამებამძიმ-გამოყოფილი ფრაზები

ქმედებ-ცნობარი

action მნიშვნელობა განსაზღვრავს წეს-შემჯამებისას ქმედებას:

ქმედებააღწერა
blockმოთხოვნის 403 Forbidden პასუხით უარყოფა
logმოთხოვნის გაშვება, მაგრამ შემჯამების ჟურნალირება (მონიტორინგის რეჟიმი)
allowმოთხოვნის ცალსახა გაშვება (სხვა წესებს გადაფარავს)
denyblock-ის ალიასი
redirectმოთხოვნის გადამისამართება (ძრავ-სპეციფიკური კონფიგურაცია)
dropკავშირის ჩუმ-ჩუმად გაწყვეტა

TIP

ახალი წესები action: log-ით დაიწყე action: block-ზე გადასვლამდე მცდარ-დადებითებისთვის სამონიტორინგოდ.

ID-ის სახელ-სივრცის კონვენცია

წეს-ID-ები დადგენილ prefix-კონვენციას უნდა მიჰყვეს:

დირექტორიაID prefixმაგალითი
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
# Validate all rules
python rules/tools/validate.py rules/

# Validate a specific file
python rules/tools/validate.py rules/custom/myapp.yaml

ვალიდატორი ამოწმებს:

  • სავალდებულო ველები მოიძებნება
  • ყველა ფაილში წეს-ID-ის დუბლიკატები არ არის
  • სიმძიმისა და ქმედების მნიშვნელობები სწორია
  • Paranoia დონეები 1-4 დიაპაზონში მოიძებნება
  • Regex-ები სწორად კომპილირდება
  • რიცხვითი ოპერატორები სტრიქონ-მნიშვნელობებთან არ გამოიყენება

შემდეგი ნაბიჯები

Released under the Apache-2.0 License.