לכל כלל במדיניות האבטחה של Google Cloud Armor יש עדיפות, תנאי התאמה ופעולה. Cloud Armor מבצע את הפעולה של הכלל עם העדיפות הכי גבוהה שתואם לבקשה. המערכת לא בודקת כללים עם עדיפות נמוכה יותר מהכלל התואם עם העדיפות הכי גבוהה, גם אם יש להם את אותם תנאי התאמה.
כל כלל במדיניות האבטחה תומך בשני סוגים של תנאי התאמה:
- תנאי התאמה בסיסי מכיל רשימות של כתובות IP או רשימות של טווחי כתובות IP. כשיוצרים כלל באמצעות Google Cloud CLI, מגדירים תנאי התאמה בסיסיים באמצעות הדגל
--src-ip-ranges. - תנאי מתקדם להתאמה מכיל ביטוי עם עד חמישה ביטויי משנה שיכולים להתאים למגוון מאפיינים של בקשה נכנסת.
תנאי התאמה מתקדמים מוגדרים באמצעות הדגל
--expressionכשיוצרים כלל באמצעות Google Cloud CLI.
בדף הזה נסביר על תנאי התאמה מתקדמים ועל שפת הכללים המותאמים אישית של Cloud Armor, שמשמשת לכתיבת ביטויים בתנאי ההתאמה המתקדמים של כללי מדיניות האבטחה. השפה של הכללים בהתאמה אישית ב-Cloud Armor היא קבוצת משנה של Common Expression Language (CEL). ביטויים שנכתבים בשפה של כללים בהתאמה אישית ב-Cloud Armor דורשים שני רכיבים:
- המאפיין: הנתונים לבדיקה
- הפעולה: איך משתמשים בנתונים
לדוגמה, הביטוי הבא משתמש במאפיינים origin.ip ו-9.9.9.0/24 בפעולה inIpRange(). במקרה הזה, הביטוי מחזיר True אם origin.ip נמצא בטווח כתובות ה-IP 9.9.9.0/24.
inIpRange(origin.ip, '9.9.9.0/24')
למרות שביטוי הדוגמה הקודם תואם רק לכתובת ה-IP של הלקוח, כשמשתמשים בביטוי הדוגמה בכלל של מדיניות אבטחה של Cloud Armor, הכלל נחשב לכלל עם תנאי התאמה מתקדמים מבחינת מכסת השימוש. מידע נוסף מופיע במאמר בנושא מכסות ומגבלות של Cloud Armor.
תפעול
במאמר הבא מוסבר על האופרטורים שאפשר להשתמש בהם עם מאפיינים (שמיוצגים על ידי x, y ו-k) כדי להגדיר ביטויי כללים.
| תפעול | ביטויים | תיאור |
|---|---|---|
| שוויון | x == y |
הפונקציה מחזירה את הערך True אם x שווה ל-y. |
| שוויון, מחרוזת מילולית | x == "foo" |
הפונקציה מחזירה את הערך True אם x שווה למחרוזת הקבועה שצוינה. |
| שוויון, מחרוזת גולמית מילולית | x == R"fo'o" |
הפונקציה מחזירה את הערך True אם x שווה למחרוזת הליטרלית הגולמית שצוינה, שלא מפרשת רצפי escape. ליטרלים של מחרוזות גולמיות נוחים לשימוש כשצריך להשתמש בתווי בריחה כדי לייצג מחרוזות. |
| שלילה לוגית | !x |
הפונקציה מחזירה את הערך True אם הערך הבוליאני x הוא False, או מחזירה את הערך False אם הערך הבוליאני x הוא True. |
| אי-שוויון | x != y |
הפונקציה מחזירה את הערך True אם x לא שווה ל-y. |
| שרשור | x + y |
הפונקציה מחזירה את המחרוזת המחוברת xy. |
| וגם לוגי | x && y |
הפונקציה מחזירה את הערך True אם גם x וגם y נכונים. |
| OR לוגי | x || y |
הפונקציה מחזירה את הערך True אם x, y או שניהם נכונים. |
| מכיל מחרוזת משנה | x.contains(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x מכילה את מחרוזת המשנה y. |
| מתחיל עם מחרוזת משנה | x.startsWith(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x מתחילה במחרוזת המשנה y. |
| מסתיים במחרוזת משנה | x.endsWith(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x מסתיימת במחרוזת המשנה y. |
| התאמה של ביטוי רגיל | x.matches(y) |
הפונקציה מחזירה את הערך True אם המחרוזת x תואמת באופן חלקי לתבנית y שצוינה של RE2. התבנית RE2 עוברת קומפילציה באמצעות האפשרות RE2::Latin1 שמשביתה תכונות Unicode. |
| כתובת IP בטווח | inIpRange(x, y) |
הפונקציה מחזירה את הערך True אם כתובת ה-IP x כלולה בטווח כתובות ה-IP y. |
| אותיות קטנות | x.lower() |
הפונקציה מחזירה את הערך באותיות קטנות של המחרוזת x. |
| אותיות רישיות | x.upper() |
הפונקציה מחזירה את הערך באותיות רישיות של המחרוזת x. |
| ערך מפוענח בקידוד Base64 | x.base64Decode() |
הפונקציה מחזירה את הערך המפוענח של x בקידוד base64. התווים
_ - מוחלפים קודם ב-/ + בהתאמה.
הפונקציה מחזירה "" (מחרוזת ריקה) אם x הוא לא ערך Base64 תקין. |
| ערך של מיפוי מקשים | m['k'] |
הפונקציה מחזירה את הערך במפתח k במפה m של מחרוזת למחרוזת אם k זמין. אחרת, הפונקציה מחזירה שגיאה. הגישה המומלצת היא קודם לבדוק את הזמינות באמצעות "has(m['k'])==true". |
| בדיקת הזמינות של מפתחות במפה | has(m['k']) |
הפונקציה מחזירה את הערך True אם המפתח k זמין במפה m. |
| המרה למספר שלם | int(x) |
הפונקציה ממירה את תוצאת המחרוזת של x לסוג int. אחר כך אפשר להשתמש בו כדי לבצע השוואה בין מספרים שלמים באמצעות אופרטורים אריתמטיים רגילים כמו > ו-<=. הפעולה הזו אפשרית רק עבור ערכים שאמורים להיות מספרים שלמים. |
| אורך | size(x) |
הפונקציה מחזירה את האורך של המחרוזת x. |
| פענוח כתובת URL | x.urlDecode() |
הפונקציה מחזירה את הערך של x אחרי פענוח כתובת ה-URL. רצפי תווים בפורמט %## מוחלפים במקבילות שאינן ASCII, ו-+ מוחלף ברווח. קידודים לא תקינים מוחזרים כמו שהם. |
| פענוח כתובת URL (Unicode) | x.urlDecodeUni() |
הפונקציה מחזירה את הערך של x אחרי פענוח כתובת ה-URL. בנוסף ל-urlDecode(), היא מטפלת גם ברצפים של תווים ב-Unicode בפורמט %u###. קידודים לא תקינים מוחזרים כמו שהם. |
| המרת utf8 ל-Unicode | x.utf8ToUnicode() |
הפונקציה מחזירה את הייצוג ב-Unicode של אותיות קטנות בקידוד UTF-8 של x. |
מאפיינים
מאפיינים מייצגים מידע מבקשה נכנסת, כמו כתובת ה-IP של הלקוח או נתיב כתובת ה-URL המבוקשת.
| שדה | סוג | תיאור |
|---|---|---|
origin.ip |
מחרוזת | כתובת ה-IP של הלקוח שיזם את הבקשה. |
origin.user_ip |
מחרוזת | כתובת ה-IP של הלקוח המקורי, שנכללת ב-HTTP-HEADER על ידי שרת Proxy במעלה הזרם. לפני שמשתמשים במאפיין הזה, צריך להגדיר את האפשרות userIpRequestHeaders[] בשדה advancedOptionsConfig של מדיניות האבטחה כך שתתאים למקור כמו True-Client-IP, X-Forwarded-For או X-Real-IP. מידע נוסף זמין במאמר בנושא סקירה כללית של כתובות ה-IP של משתמשים.
אם לא מגדירים את האפשרות |
origin.tls_ja4_fingerprint |
מחרוזת | טביעת אצבע של JA4 TLS/SSL
אם הלקוח מתחבר באמצעות
HTTPS, HTTP/2 או HTTP/3. אם הוא לא זמין, מוחזרת מחרוזת ריקה. |
origin.tls_ja3_fingerprint |
מחרוזת | טביעת אצבע של JA3 TLS/SSL
אם הלקוח מתחבר באמצעות
HTTPS, HTTP/2 או HTTP/3. אם הוא לא זמין, מוחזרת מחרוזת ריקה. |
request.headers |
מפה | מיפוי של כותרות בקשת HTTP ממחרוזת למחרוזת. אם כותרת מכילה כמה ערכים, הערך במפה הזו יהיה מחרוזת מופרדת בפסיקים של כל הערכים של הכותרת. כל המפתחות במפה הזו הם אותיות קטנות. כל הכותרות שמתקבלות על ידי מאזני עומסים חיצוניים של אפליקציות נבדקות, וחלות עליהן אותן הגבלות. הגישה המומלצת היא קודם לבדוק את הזמינות באמצעות |
request.method |
מחרוזת | ה-method של בקשת ה-HTTP. |
request.path |
מחרוזת | נתיב כתובת ה-URL מסוג HTTP שהתבקש. כשכותבים כללים שמתאימים ל-request.path, מומלץ לבצע נורמליזציה של הנתיב כדי להקל על התאמת התחביר במקרה של קידוד כתובת URL, וריאציות של אותיות רישיות או לוכסנים הפוכים.
מידע נוסף ודוגמאות זמינים במאמר בנושא Path traversal and normalization (מעבר בין נתיבים ונרמול). |
request.scheme |
מחרוזת | סכימת כתובת ה-URL מסוג HTTP, כמו http או https.
הערכים של המאפיין הזה הם באותיות קטנות. |
request.query |
מחרוזת | שאילתת כתובת URL מסוג HTTP בפורמט
name1=value&name2=value2, כפי שהיא מופיעה בשורה הראשונה של
בקשת ה-HTTP. לא מתבצע פענוח.
|
origin.region_code |
מחרוזת | קוד המדינה ב-Unicode שמשויך לכתובת ה-IP של הלקוח, לדוגמה US. אם יוצרים כלל או ביטוי שמשתמשים בקודי מדינה או אזור לפי ISO 3166-1 alpha 2, Cloud Armor מתייחס לכל קוד בנפרד. הכללים והביטויים של Cloud Armor משתמשים בקודים האזוריים האלה באופן מפורש כדי לאשר או לדחות בקשות.
|
origin.asn |
מספר שלם | מספר המערכת האוטונומית (ASN) שמשויך לכתובת ה-IP של הלקוח. מספר ה-ASN הייחודי הגלובלי נקבע על סמך מפעיל הרשת שתומך בקידומות של כתובות ה-IP שמכילות את כתובת ה-IP של הלקוח. |
מאפייני reCAPTCHA
בקטע הזה מפורטים מאפיינים שרלוונטיים רק לטוקנים של reCAPTCHA או לקובצי Cookie של פטור. ביטוי משנה שמבוסס על המאפיינים האלה מחזיר false אם טוקן reCAPTCHA או קובץ Cookie של פטור להערכה לא זמינים או לא תקינים בגלל אחת מהסיבות הבאות:
- האסימון פגום ואי אפשר לפענח אותו.
- הטוקן מכיל מאפיינים לא תקינים. לדוגמה, האסימון נוצר באמצעות מפתח reCAPTCHA שלא תואם למפתחות reCAPTCHA שמשויכים לכלל.
- פג התוקף של הטוקן.
מאפייני עוגיית הפטור
| שדה | סוג | תיאור |
|---|---|---|
token.recaptcha_exemption.valid |
bool |
קובץ Cookie תקף של פטור מ-reCAPTCHA. |
מאפיינים של טוקן פעולה
| שדה | סוג | תיאור |
|---|---|---|
token.recaptcha_action.score |
float |
הציון מטוקן פעולה של reCAPTCHA. הניקוד התקין נע בין 0.0 ל-1.0, כאשר 0.0 מציין משתמש לא לגיטימי ו-1.0 מציין משתמש לגיטימי. |
token.recaptcha_action.captcha_status |
string |
סטטוס ה-CAPTCHA מטוקן פעולה של reCAPTCHA. סטטוס תקין הוא NONE, PASS או FAIL, כאשר NONE מתייחס למצב שבו לא נדרש אתגר במהלך בדיקת reCAPTCHA, כך ששדה ה-CAPTCHA חסר בטוקן הפעולה. |
token.recaptcha_action.action |
string |
שם הפעולה (עד 100 תווים) מטוקן פעולה של reCAPTCHA. שמות הפעולות |
token.recaptcha_action.valid |
bool |
נוכחות של טוקן פעולה תקין של reCAPTCHA. |
מאפיינים של טוקן הסשן
| שדה | סוג | תיאור |
|---|---|---|
token.recaptcha_session.score |
float |
הציון מאסימון הפעלה של reCAPTCHA. הניקוד התקין נע בין 0.0 ל-1.0, כאשר 0.0 מציין משתמש לא לגיטימי ו-1.0 מציין משתמש לגיטימי. |
token.recaptcha_session.valid |
bool |
נוכחות של טוקן תקף של סשן reCAPTCHA. |
ביטויים לדוגמה
עבור כל אחד מהביטויים האלה, הפעולה שתתבצע תלויה בשאלה אם הביטוי נכלל בכלל דחייה או בכלל הרשאה.
אישור או דחייה של גישה על סמך טווח כתובות IP ב-IPv4 או ב-IPv6
הביטוי הבא תואם לבקשות מטווח כתובות ה-IP:
198.51.100.0/24inIpRange(origin.ip, '198.51.100.0/24')
הביטוי הבא תואם לבקשות מטווח כתובות ה-IP:
2001:db8::/32inIpRange(origin.ip, '2001:db8::/32')
אישור או דחייה של גישה על סמך טווח כתובות IP מותאם אישית של לקוחות מאחורי שרת proxy במעלה הזרם
אם הגדרתם את האופרטור origin.user_ip, תוכלו להתאים על סמך ערכי הכותרת שציינתם בשדה advancedOptionsConfig.userIpRequestHeaders[].
הביטוי הבא תואם לבקשות שמקורן בטווח כתובות ה-IP
192.0.2.0/24:inIpRange(origin.user_ip, '192.0.2.0/24')
הביטוי הבא תואם לבקשות שמקורן בטווח כתובות ה-IP
2001:db8::/32:inIpRange(origin.user_ip, '2001:db8::/32')
אישור או דחייה של תעבורה עם קובץ Cookie ספציפי
הביטוי הבא תואם לבקשות שיש להן קובץ Cookie שמכיל את הערך
80=BLAH:has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')
אישור או דחייה של תנועת גולשים עם כותרת referer לא ריקה
הביטוי הבא תואם לבקשות עם כותרת
refererלא ריקה:has(request.headers['referer']) && request.headers['referer'] != ""
אישור או דחייה של תנועה על סמך כותרת המארח
אפשר לאשר או לדחות תנועה על סמך הערך של הכותרת Host בבקשה.
הביטוי הבא תואם לבקשות לכתובת URL ספציפית באמצעות
==:request.headers['host'].lower() == 'test.example.com'
הביטוי הבא תואם לבקשות לכתובת URL ספציפית באמצעות
endsWith:request.headers['host'].lower().endsWith('.example.com')הביטוי הבא תואם לבקשות לכתובת URL ספציפית באמצעות
contains:request.headers['host'].lower().contains('test.example.com')
הביטוי הבא תואם לבקשות למספר דומיינים באמצעות
contains:request.headers['host'].lower().contains('test.example.com') || request.headers['host'].lower().contains('test22.example.com')הביטוי הבא תואם לבקשות לדומיין ולתת-הדומיינים שלו באמצעות
matches:request.headers['host'].matches('(?i:(sub\.)?test\.example\.com)')
אישור או דחייה של תנועה מאזור ספציפי
אם אפליקציית האינטרנט שלך לא זמינה באזור AU, צריך לחסום את כל הבקשות מהאזור הזה.
בכלל דחייה, משתמשים בביטוי הבא שתואם לבקשות מהאזור
AU:origin.region_code == 'AU'
לחלופין, אם אפליקציית האינטרנט שלכם זמינה רק באזור AU, צריך לחסום בקשות מכל שאר האזורים.
בכלל דחייה, משתמשים בביטוי הבא, שתואם לבקשות מכל האזורים מלבד אזור
AU:origin.region_code != 'AU'
קודי האזורים מבוססים על קודי ISO 3166-1 alpha 2. לפעמים אזור מתאים למדינה, אבל זה לא תמיד המצב. לדוגמה, הקוד US כולל את כל המדינות בארצות הברית, מחוז אחד ושישה אזורים מרוחקים.
אישור או דחייה של תנועה ממספר מערכת אוטונומית (ASN) ספציפי
אם אתם צריכים לחסום את אפליקציית האינטרנט שלכם ללקוחות שמקבלים שירות מספק רשת ספציפי, אתם יכולים להשתמש במספר ה-ASN של ספק הרשת כדי לחסום אותה.
בכלל דחייה, משתמשים בביטוי הבא, שתואם לבקשות מ-ASN ספציפי:
origin.asn == 123
לחלופין, אם אפליקציית האינטרנט שלכם זמינה רק ללקוחות של מפעיל רשת ספציפי, צריך לחסום בקשות מכל שאר מפעילי הרשת.
בכלל דחייה, משתמשים בביטוי הבא, שתואם לכל מפעילי הרשתות האחרים מלבד זה שרוצים לאפשר:
origin.asn != 123
כמה ביטויים
כדי לכלול כמה תנאים בכלל אחד, משלבים כמה ביטויי משנה.
בדוגמה הבאה, בקשות מ-
1.2.3.0/24(למשל, בודקי אלפא) באזורAUתואמות לביטוי הבא:origin.region_code == "AU" && inIpRange(origin.ip, '1.2.3.0/24')
הביטוי הבא תואם לבקשות מ-
1.2.3.4שבהן סוכן המשתמש מכיל את המחרוזתWordPress:inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('WordPress')
אישור או דחייה של תנועה עבור URI של בקשה שתואם לביטוי רגולרי
הביטוי הבא תואם לבקשות שמכילות את המחרוזת
/example_path/במזהה ה-URI:request.path.matches('/example_path/')הביטוי הבא תואם לבקשות שכוללות את
Chromeבשדה הכותרתUser-Agent:request.headers['user-agent'].matches('Chrome')הביטוי הבא מציג התאמה לא תלוית-אותיות בכותרת
User-Agentשמכילה אתwordpress. הוא מתאים ל-User-Agent:WordPress/605.1.15, ל-User-Agent:wordPressולוריאציות אחרות שלwordpress:request.headers['user-agent'].matches('(?i:wordpress)')
התרת תנועה שמכילה ערך מפוענח ספציפי בקידוד base64 או דחיית תנועה כזו
הביטוי הבא תואם לבקשות עם ערך מפוענח ב-Base64 של
myValueבכותרתuser-id:has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')
אישור או דחייה של תנועה שמכילה ערך מחרוזת באורך מסוים
הביטוי הבא תואם לבקשות שבהן אורך כתובת ה-URL גדול מ-10 תווים:
size(request.path) > 10
הביטוי הבא תואם לבקשות עם כותרת
x-dataבאורך של 1,024 תווים או יותר:size(request.headers['x-data']) >= 1024
התרת תנועה או דחייה של תנועה עם 0 content-length בגוף ה-HTTP
הביטוי הבא תואם לבקשות שכוללות אפס
content-lengthבגוף ה-HTTP:int(request.headers["content-length"]) == 0
אישור או דחייה של תנועה שמכילה ערך מקודד ספציפי של כתובת URL
הביטוי הבא תואם לבקשות עם ערך של קובץ Cookie שמכיל
%3c:has(request.headers['cookie']) && request.headers['cookie'].urlDecode().contains('<')
אישור או דחייה של תנועה שמכילה ערך מקודד ספציפי של כתובת URL של מחרוזת Unicode
הביטוי הבא תואם לבקשות שכוללות ערך של קובץ Cookie ששווה ל-
Match%2BValueאו ל-Match%u002BValue:has(request.headers['cookie']) && request.headers['cookie'].urlDecodeUni() == 'Match+Value'
אישור או דחייה של תנועה שמכילה מחרוזת Unicode ספציפית של טקסט UTF-8
הביטוי הבא תואם לבקשות שבהן ערך קובץ ה-Cookie שווה ל-
¬:has(request.headers['cookie']) && request.headers['cookie'].utf8ToUnicode() == '%u00ac'
אישור או דחייה של תנועה על סמך טביעת אצבע מוכרת של JA4
הביטוי הבא תואם לבקשות עם טביעת אצבע של JA4 ששווה ל-
t13d1516h2_8daaf6152771_b186095e22b6:origin.tls_ja4_fingerprint == 't13d1516h2_8daaf6152771_b186095e22b6'
אישור או דחייה של תנועה על סמך רשימה של טביעות אצבע של JA4
הביטוי הבא תואם לבקשות עם טביעת אצבע של JA4 ששווה לאחת מטביעות האצבע הבאות של JA4:
t00d0000h0_000000000000_000000000000t13d1516h2_8daaf6152771_b186095e22b6
origin.tls_ja4_fingerprint == 't00d0000h0_000000000000_000000000000' || origin.tls_ja4_fingerprint == 't13d1516h2_8daaf6152771_b186095e22b6'
כללי WAF שהוגדרו מראש
כללי WAF שהוגדרו מראש משתמשים בחתימות סטטיות שהוגדרו מראש, בביטויים רגולריים או בשניהם כדי להתאים לגוף הבקשה של HTTP, לכותרות הבקשה של HTTP ולפרמטרים של שאילתה. הכללים הזמינים של חומת האפליקציות האינטרנטיות שהוגדרו מראש מבוססים על קבוצת הכללים המרכזית של OWASP בגרסה 3.3. ב-Cloud Armor יש כמה כללי WAF מוגדרים מראש. רשימה מלאה של כללי WAF שהוגדרו מראש זמינה במאמר בנושא סקירה כללית של כללי WAF שהוגדרו מראש ב-Cloud Armor.
כדי לראות רשימה של כל כללי ה-WAF המוגדרים מראש, אפשר לעיין במאמר בנושא רשימת כללי WAF מוגדרים מראש.
מידע נוסף על כללי WAF שהוגדרו מראש זמין בתרחיש לדוגמה צמצום התקפות בשכבת האפליקציה באמצעות כללי WAF שהוגדרו מראש.
שמות של כללי WAF שהוגדרו מראש
השמות של כללי WAF שהוגדרו מראש הם בפורמט
<attack category>-<OWASP CRS version>-<version field>. קטגוריית ההתקפה מציינת את סוג ההתקפות שרוצים להגן מפניהן, כמו xss (פרצת אבטחה XSS (cross-site scripting)) או sqli (הזרקת SQL).
שדות הגרסה הנתמכים הם stable ו-canary. תוספות ושינויים בכללים מתפרסמים קודם בגרסה canary. כאשר תוספות ושינויים נחשבים בטוחים ויציבים, הם מקודמים לגרסה stable.
מזהים של חברים בכלל WAF שהוגדרו מראש
כלל WAF שהוגדר מראש מכיל כמה ביטויים, שלכל אחד מהם יש חתימה משלו.
לדוגמה, כלל ה-WAF שהוגדר מראש xss-v33-stable כולל ביטוי שנקרא owasp-crs-v030301-id941100-xss, שמתאים למזהה הכלל id941100 בגרסה 3.3. אתם יכולים להשתמש בחתימות כדי להחריג ביטויים ספציפיים, וכך למנוע את השימוש בהם. זה שימושי אם ביטוי מסוים מפעיל באופן עקבי תוצאה חיובית שגויה. מידע נוסף זמין במאמר בנושא תוצאות חיוביות שגויות.
מידע על ערכת הכללים הבסיסית ועל שינוי ההגדרות ברמות רגישות שונות זמין במאמר שינוי ההגדרות של כללי WAF ב-Google Cloud Armor.
אופרטור לכללי WAF שהוגדרו מראש
| ביטויים | תיאור |
|---|---|
evaluatePreconfiguredWaf(string, MAP<string, dyn>) |
הפונקציה מחזירה true אם אחת מחתימות ה-WAF בתוך קבוצת כללי ה-WAF שצוינה מחזירה true. הארגומנט הראשון הוא השם של קבוצת הכללים של ה-WAF, למשל xss-v33-stable. הארגומנט השני (אופציונלי) הוא מיפוי שבו המפתח הוא מחרוזת והערך הוא הקלדה דינמית בהתאם למפתח. מטרת הארגומנט הזה היא לכוונן את החתימות של ה-WAF שמוערכות. המפתחות הקבילים כוללים את:
המפתחות opt_out_rule_ids ו-opt_in_rule_ids הם בלעדיים. אתם יכולים להשתמש ב-opt_in_rule_ids אם אתם רוצים לבדוק ולצרף באופן ידני חתימות חדשות של WAF שנוספו מאוחר יותר לקבוצת כללים קיימת. |
evaluatePreconfiguredExpr(string, LIST) |
הפונקציה מחזירה true אם אחד מהביטויים בתוך כלל ה-WAF שצוין מראש מחזיר true. הארגומנט הראשון הוא השם של כלל ה-WAF שהוגדר מראש, למשל |
דוגמאות לכללי WAF שהוגדרו מראש
הביטוי הבא משתמש בכלל WAF שהוגדר מראש
xss-v33-stableכדי לצמצם את הסיכון להתקפות XSS:evaluatePreconfiguredWaf('xss-v33-stable')הביטוי הבא משתמש בכל הביטויים מכלל ה-WAF שהוגדר מראש
xss-v33-stable, חוץ ממזהי החברים941100ו-941110:evaluatePreconfiguredWaf('xss-v33-stable', {'opt_out_rule_ids': ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941110-xss']})הביטוי הבא משתמש בכלל WAF שהוגדר מראש כדי לצמצם את ההשפעה של מתקפות SQLi מטווח כתובות ה-IP
198.51.100.0/24:inIpRange(origin.ip, '198.51.100.0/24') && evaluatePreconfiguredWaf('sqli-v33-stable')
אופרטורים אחרים
| ביטויים | תיאור |
|---|---|
evaluateThreatIntelligence(string)evaluateThreatIntelligence(string, LIST)evaluateThreatIntelligence(string, string, LIST)
|
הפונקציה מחזירה True אם כתובת ה-IP של הלקוח תואמת לטווח כתובות IP כלשהו ברשימת כתובות ה-IP שצוינה, אלא אם היא הוחרגה במפורש באמצעות רשימת ההחרגות. הארגומנט הראשון הוא השם של פיד המידע של Google Threat Intelligence, כמו |
evaluateAddressGroup(string, string)evaluateAddressGroup(string, string, LIST)evaluateOrganizationAddressGroup(string, string)evaluateOrganizationAddressGroup(string, string, LIST)
|
הפונקציה מחזירה את הערך True אם כתובת ה-IP של הלקוח תואמת לאחד מטווח כתובות ה-IP בקבוצת הכתובות שצוינה, אלא אם היא הוחרגה באופן מפורש באמצעות רשימת ההחרגות. הארגומנט הראשון הוא שם קבוצת הכתובות. הארגומנט השני קובע מאיפה כתובת ה-IP מחולצת, והוא יכול להיות |
evaluateAdaptiveProtection(string) |
הפונקציה מחזירה את הערך True אם הבקשה תואמת לחתימת המתקפה שנוצרה על ידי ההגנה האדפטיבית. הארגומנט הוא המזהה של התראה ספציפית שנוצרה על ידי הגנה דינמית אחרי זיהוי של מתקפה. |
evaluateAdaptiveProtectionAutoDeploy() |
הפונקציה מחזירה את הערך True אם הבקשה מגיעה מכתובת IP של תוקף משמעותי שתואמת לחתימת התקפה של התקפה מתמשכת שזוהתה על ידי Adaptive Protection. |
דוגמאות
הביטוי הבא משווה את הבקשה הנכנסת לפיד של Google Threat Intelligence
iplist-known-malicious-ipsכדי להגן מפני רשימה מוכרת של כתובות IP זדוניות:evaluateThreatIntelligence('iplist-known-malicious-ips')הביטוי הבא מתאים לבקשה הנכנסת מול פיד Google Threat Intelligence
iplist-known-malicious-ipsלהגנה מפני רשימת כתובות ה-IP הזדוניות הידועות, למעט כתובות ה-IP ב-104.135.0.0/16:evaluateThreatIntelligence('iplist-known-malicious-ips', ['104.135.0.0/16'])הביטוי הבא מתאים לכותרת הבקשה המותאמת אישית של כתובת ה-IP של המשתמש לקבוצת הכתובות שנקראת
my-own-list-of-bad-ips:evaluateAddressGroup('my-own-list-of-bad-ips', origin.user_ip)
המאמרים הבאים
- הגדרת מדיניות אבטחה ב-Cloud Armor
- שינוי של כללי WAF שהוגדרו מראש ב-Cloud Armor
- פתרון בעיות ב-Cloud Armor
- מכסות ומגבלות