במאמר הזה מוסבר איך לשלב את התכונות של reCAPTCHA עם Cloud Armor באפליקציות לנייד.
כדי להשלים את השילוב, צריך להטמיע תכונה אחת או יותר של reCAPTCHA ולהגדיר כללי מדיניות אבטחה של Cloud Armor. עם זאת, אתם יכולים להטמיע רק טוקנים של פעולות reCAPTCHA כדי לבצע שילוב עם Cloud Armor באפליקציות לנייד.
לפני שמתחילים
מפעילים את reCAPTCHA Enterprise API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםמזהים את הפעולות שרוצים להגן עליהן.
הטמעה של טוקנים של פעולות reCAPTCHA
כדי ליצור טוקנים של פעולות, צריך להפעיל את reCAPTCHA באפליקציה לנייד.
אחרי ש-reCAPTCHA יוצר טוקן פעולה, צריך לצרף אותו לכותרת בקשה מוגדרת מראש בכל מקום שבו רוצים להגן על פעולת משתמש, כמו checkout. כברירת מחדל, תוקף האסימונים לפעולות הוא 30 דקות, אבל הוא עשוי להשתנות בהתאם לתנועה.
כדי ש-Cloud Armor יוכל להעריך את מאפייני האסימון, צריך לצרף את אסימון הפעולה לכותרת בקשה מוגדרת מראש לפני שהתוקף של האסימון יפוג.
כדי להטמיע טוקן פעולה של reCAPTCHA:
יוצרים מפתח של טוקן פעולה לאפליקציה לנייד.
המסוף
נכנסים לדף Google Cloud Fraud Defense במסוף Google Cloud .
מוודאים ששם הפרויקט מופיע בבורר המשאבים בחלק העליון של הדף.
אם שם הפרויקט לא מופיע, לוחצים על בורר המשאבים ובוחרים את הפרויקט.
- לוחצים על הכרטיסייה Keys.
- לוחצים על Create key.
- בשדה שם לתצוגה, מזינים שם לתצוגה של המפתח.
- בהתאם לסוג האפליקציה שעבורה רוצים ליצור את מפתחות ה-reCAPTCHA עבור WAF, מבצעים את הפעולה המתאימה:
- בקטע Application type, בוחרים באפשרות iOS.
- בקטע רשימת מזהי חבילות ל-iOS, לוחצים על הוספת מזהה חבילה ל-iOS.
בשדה Bundle ID (מזהה החבילה), מזינים את השם של מזהה החבילה של iOS.
- אופציונלי: כדי להוסיף מזהה חבילה נוסף, לוחצים על הוספת מזהה חבילה ל-iOS ומזינים את השם של מזהה החבילה ל-iOS בשדה מזהה החבילה.
- כדי להגן על מפתח reCAPTCHA למזהי החבילות, מוודאים שהמתג השבתת אימות מזהה החבילה מושבת. אם משביתים את אימות מזהה החבילה, צריך לאמת את השדה
tokenProperties.iosBundleIdבבדיקות שיוצרים. אופציונלי: מספקים הגדרות למפתחים של אפל.
מומלץ לספק את הנתונים האלה כי הם מאפשרים ל-Fraud Defense לספק ציוני סיכון מדויקים יותר לגבי התנועה שלכם.
מזינים את פריטי המידע האלה:
- מפתח פרטי (.p8): המפתח הזה נוצר ב-Apple Developer Center בקטע Certificates, Identifiers & Profiles (אישורים, מזהים ופרופילים).
- מזהה המפתח: מזהה מפתח המפתחים של אפל (מחרוזת בת 10 תווים).
- מזהה צוות: מזהה הצוות של אפל (מחרוזת בת 10 תווים) שבבעלותו פרופיל ההקצאה שמשמש ליצירת האפליקציה.
- אופציונלי: לוחצים על השלב הבא (אופציונלי).
- כדי ליצור מפתח reCAPTCHA ל-WAF, מבצעים את הפעולות הבאות:
- בהגדרות נוספות, מפעילים את
- בקטע הגדרות נוספות, מפעילים את המתג האם תפרסו את המפתח הזה בחומת אש של אפליקציית אינטרנט (WAF)?.
- באפשרויות Service, בוחרים באפשרות Cloud Armor.
- באפשרויות של תכונה, בוחרים באפשרות פעולה.
-
אם רוצים לציין ציון שהמפתח יחזיר כשייווצרו הערכות כלשהן עבור הסביבה שאינה סביבת ייצור, צריך לבצע את הפעולות הבאות:
- בקטע הגדרות נוספות, לוחצים על המתג האם אתה יוצר את המפתח הזה למטרות בדיקה בלבד?.
- משתמשים בפס ההזזה הגדרת ציון כדי לציין ציון בין 0 ל-1.0.
- לוחצים על Create key.
- בקטע סוג האפליקציה, בוחרים באפשרות Android.
- בקטע רשימת חבילות Android, לוחצים על הוספת חבילת Android.
- בשדה Android package (חבילת Android), מזינים את השם של חבילת Android.
- אופציונלי: כדי להוסיף חבילה נוספת, לוחצים על הוספת חבילת Android ומזינים את השם של חבילת Android נוספת בשדה חבילת Android.
- כדי לוודא שמפתח reCAPTCHA ישמש רק באפליקציה שלכם, משביתים את המתג השבתת אימות שם החבילה. אם משביתים את אימות שם החבילה, צריך לאמת את השדה
tokenProperties.androidPackageNameבבדיקות שיוצרים. - אם רוצים ליצור מפתח לאפליקציה שזמינה בחנויות אפליקציות אחרות בנוסף לחנות Google Play, מפעילים את האפשרות תמיכה באפליקציות שמופצות מחוץ לחנות Google Play.
- אופציונלי: לוחצים על השלב הבא (אופציונלי).
- כדי ליצור מפתח reCAPTCHA ל-WAF, מבצעים את הפעולות הבאות:
- בהגדרות נוספות, מפעילים את
- בקטע הגדרות נוספות, מפעילים את המתג האם תפרסו את המפתח הזה בחומת אש של אפליקציית אינטרנט (WAF)?.
- באפשרויות Service, בוחרים באפשרות Cloud Armor.
- באפשרויות של תכונה, בוחרים באפשרות פעולה.
-
אם רוצים לציין ציון שהמפתח יחזיר כשייווצרו הערכות כלשהן עבור הסביבה שאינה סביבת ייצור, צריך לבצע את הפעולות הבאות:
- בקטע הגדרות נוספות, לוחצים על המתג האם אתה יוצר את המפתח הזה למטרות בדיקה בלבד?.
- משתמשים בפס ההזזה הגדרת ציון כדי לציין ציון בין 0 ל-1.0.
- לוחצים על Create key.
יצירת מפתחות reCAPTCHA ל-WAF עבור אפליקציות ל-iOS
מומלץ ליצור מפתח reCAPTCHA אחד לכל אפליקציית iOS.
המפתח החדש שנוצר מופיע בדף מפתחות reCAPTCHA.
יצירת מפתחות reCAPTCHA ל-WAF עבור אפליקציות ל-Android
המפתח החדש שנוצר מופיע בדף מפתחות reCAPTCHA.
gcloud (iOS)
כדי ליצור מפתחות reCAPTCHA, משתמשים בפקודה gcloud recaptcha keys create.
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- DISPLAY_NAME: השם של המפתח. בדרך כלל שם האתר.
- BUNDLE_IDs: מזהי החבילות של אפליקציות ל-iOS שמורשות להשתמש במפתח. מציינים כמה מזהי חבילות כרשימה מופרדת בפסיקים.
- WAF_FEATURE: השם של התכונה ב-WAF.
מציינים את
action-token. - WAF_SERVICE: השם של ספק שירותי ה-WAF.
מציינים את
CAל-Cloud Armor.
מריצים את הפקודה gcloud recaptcha keys create:
Linux, macOS או Cloud Shell
gcloud recaptcha keys create \ --display-name=DISPLAY_NAME \ --ios --bundle-ids=BUNDLE_IDs \ --waf-feature=WAF_FEATURE \ --waf-service=WAF_SERVICE
Windows (PowerShell)
gcloud recaptcha keys create ` --display-name=DISPLAY_NAME ` --ios --bundle-ids=BUNDLE_IDs ` --waf-feature=WAF_FEATURE ` --waf-service=WAF_SERVICE
Windows (cmd.exe)
gcloud recaptcha keys create ^ --display-name=DISPLAY_NAME ^ --ios --bundle-ids=BUNDLE_IDs ^ --waf-feature=WAF_FEATURE ^ --waf-service=WAF_SERVICE
התשובה תכיל את מפתח reCAPTCHA החדש שנוצר.
gcloud (Android)
כדי ליצור מפתחות reCAPTCHA, משתמשים בפקודה gcloud recaptcha keys create.
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- DISPLAY_NAME: השם של המפתח. בדרך כלל שם האתר.
- PACKAGE_NAMES: שמות החבילות של אפליקציות ל-Android שמורשות להשתמש במפתח. מציינים כמה שמות של חבילות ברשימה שמופרדת בפסיקים.
- WAF_FEATURE: השם של התכונה ב-WAF.
מציינים את
action-token. - WAF_SERVICE: השם של ספק שירותי ה-WAF.
מציינים את
CAל-Cloud Armor.
מריצים את הפקודה gcloud recaptcha keys create:
Linux, macOS או Cloud Shell
gcloud recaptcha keys create \ --display-name=DISPLAY_NAME \ --android --package-names=PACKAGE_NAMES \ --waf-feature=WAF_FEATURE \ --waf-service=WAF_SERVICE
Windows (PowerShell)
gcloud recaptcha keys create ` --display-name=DISPLAY_NAME ` --android --package-names=PACKAGE_NAMES ` --waf-feature=WAF_FEATURE ` --waf-service=WAF_SERVICE
Windows (cmd.exe)
gcloud recaptcha keys create ^ --display-name=DISPLAY_NAME ^ --android --package-names=PACKAGE_NAMES ^ --waf-feature=WAF_FEATURE ^ --waf-service=WAF_SERVICE
התשובה תכיל את מפתח reCAPTCHA החדש שנוצר.
REST (iOS)
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- DISPLAY_NAME: השם של המפתח. בדרך כלל שם האפליקציה.
- BUNDLE_IDs: מזהי החבילות של אפליקציות ל-iOS שמורשות להשתמש במפתח. מציינים כמה מזהי חבילות כרשימה מופרדת בפסיקים.
- WAF_FEATURE: השם של התכונה ב-WAF.
מציינים את
action-token. - WAF_SERVICE: השם של ספק שירותי ה-WAF.
מציינים את
CAל-Cloud Armor.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
גוף בקשת JSON:
{ "displayName": "DISPLAY_NAME", "iosSettings": { "allowedBundleIds": "BUNDLE_IDS" }, 'wafSettings': " { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.jsonומריצים את הפקודה הבאה:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.jsonומריצים את הפקודה הבאה:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
{ "name": "projects/project-id/keys/6LfhtywnAAAAABY3sCS2duZ6A55kmDXz-PNEgKgT", "displayName": "DISPLAY_NAME", "iosSettings": { "allowAllBundleIds": false, "allowedBundleIds": [ BUNDLE_IDS ] }, "labels": {}, "wafSettings": { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }REST (Android)
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- DISPLAY_NAME: השם של המפתח. בדרך כלל שם האפליקציה.
- PACKAGE_NAMES: שמות החבילות של אפליקציות ל-Android שמורשות להשתמש במפתח. מציינים כמה שמות של חבילות ברשימה שמופרדת בפסיקים.
- WAF_FEATURE: השם של התכונה ב-WAF.
מציינים את
action-token. - WAF_SERVICE: השם של ספק שירותי ה-WAF.
מציינים את
CAל-Cloud Armor.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
גוף בקשת JSON:
{ "displayName": "DISPLAY_NAME", "androidSettings": { "allowedPackageNames":"PACKAGE_NAMES" }, 'wafSettings': " { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
curl
שומרים את גוף הבקשה בקובץ בשם
request.jsonומריצים את הפקודה הבאה:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.jsonומריצים את הפקודה הבאה:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Contentאתם אמורים לקבל תגובת JSON שדומה לזו:
{ "name": "projects/project-id/keys/6LcioSknAAAAABrjlMuZv2fjIGYMqwaAFC9izhoy", "displayName": "DISPLAY_NAME", "androidSettings": { "allowAllPackageNames": false, "allowedPackageNames": [ PACKAGE_NAMES ], "supportNonGoogleAppStoreDistribution": false }, "labels": {}, "wafSettings": { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }משלבים את reCAPTCHA Mobile SDK באפליקציות לנייד עם מפתח action-token שיצרתם. הוראות מפורטות מופיעות במסמך שמתאים לסוג האפליקציה לנייד.
- ל-Android, אפשר לעיין במאמר שילוב של Google Cloud Fraud Defense עם אפליקציות ל-Android.
- ל-iOS, אפשר לעיין במאמר בנושא שילוב של Google Cloud Fraud Defense עם אפליקציות ל-iOS.
אחרי שמקבלים את הטוקן מ-reCAPTCHA, מצרפים אותו לכותרת בקשה מוגדרת מראש בפורמט הבא:
X-Recaptcha-Token: value-of-your-action-token
בדוגמת קוד לדוגמה הבאה אפשר לראות איך לצרף את האסימון:
Android
קוד לדוגמה ב-Java
// This example shows how to send an HTTP request to the backend server // attached with the reCAPTCHA token in the header. // // @param serverUrl: the URL of the backend server. // @param rceToken: reCAPTCHA token that is attached to the header of the // HTTP request. public static void sendRequestToServerWithRceToken( String serverUrl, String rceToken) throws JSONException, IOException { URL url = new URL(String.format("http://%s/decryptcaptchacookie/accesswafserver", serverUrl)); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("X-Recaptcha-Token", rceToken); try { String requestBody = "['']"; sendRequest(connection, requestBody, "AccessWithRceToken", "GET"); } finally { connection.disconnect(); } } private static void sendRequest( HttpURLConnection connection, String requestString, String requestName, String action) throws IOException { connection.setConnectTimeout(HTTP_CONNECT_TIMEOUT_MS); connection.setReadTimeout(HTTP_READ_TIMEOUT_MS); connection.setRequestProperty("Content-type", CONTENT_TYPE); connection.setRequestProperty( "Content-Length", Integer.toString(Utf8.encodedLength(requestString))); connection.setRequestMethod(action); connection.setDoOutput(true); connection.connect(); try (OutputStream postStream = connection.getOutputStream()) { postStream.write(requestString.getBytes(UTF_8)); } int responseCode = connection.getResponseCode(); String response = connection.getResponseMessage(); if (responseCode != HttpURLConnection.HTTP_OK) { throw new IOException( String.format( "Failed to complete request.\nResponse code:%s\nError Detail:\n%s", responseCode, response)); } }
iOS
קוד לדוגמה ב-Swift
// This example shows how to send an HTTP request to the backend server // attached with the reCAPTCHA token in the header. // @param serverUrl: the URL of the backend server. // @param rceToken: reCAPTCHA token that is attached to the header of // the HTTP request. public static func accessWafServer(rceToken: String, serverUrl: String) async throws -> String { let requestURL = try HttpHelper.createRequestURL(endpoint: serverUrl) var request = try HttpHelper.createRequest(requestURL: requestURL, action: "GET") request.setValue(rceToken, forHTTPHeaderField: "X-Recaptcha-Token") let data = try await HttpHelper.getDataFromServer(request) return String(decoding: data, as: UTF8.self) }
הגדרת כללי מדיניות האבטחה של Cloud Armor
אחרי שמטמיעים את התכונות של reCAPTCHA עבור WAF, צריך להגדיר כללי מדיניות אבטחה של Cloud Armor שמעריכים טוקנים של reCAPTCHA לצורך ניהול בוטים.
במאמר הגדרת כללים לניהול בוטים מוסבר איך להגדיר מדיניות אבטחה של Cloud Armor ואיך להשתמש במפתחות של טוקן פעולה עם מדיניות האבטחה.
קבלת תוצאות reCAPTCHA
במקרה של טוקנים של פעולות reCAPTCHA, אפשר לקבל את ציוני reCAPTCHA מהכותרת X-Recaptcha-Wafdata.
על סמך הניקוד הזה, אתם יכולים להגדיר פעולה בהתאמה אישית שצריך לבצע עבור בקשות של משתמשים.
בדוגמה הבאה מוצגת כותרת לדוגמה של X-Recaptcha-Wafdata:
X-Recaptcha-Wafdata: waf_service="Google Cloud Armor", action_token;score=0.9\r\n
אפשר גם לראות את הציונים של reCAPTCHA ביומנים של Google Cloud Armor.