אל תחשפו את מפתח ה-API שלכם ל-CAPTCHA ב-JavaScript בדפדפן
שמרו את מפתח ה־API של סביבת העבודה ב־solvethree בשרת שלכם. הדפדפן אחראי לטופס ולסשן האפליקציה; השרת שלכם, שמאמת את הפונים אליו, אחראי ליצירת משימות ולאחזורן. אל תחליפו מפתח שנחשף בדפדפן בנתיב שרת בלתי מוגבל שכל אחד יכול להשתמש בו כדי לנצל את יתרת סביבת העבודה שלכם.
בדף הזה
NEXT_PUBLIC אינו המקום למפתח סביבת עבודה
מפתח סביבת עבודה מאמת בקשות ל־solvethree באמצעות Authorization: Bearer. הצבתו בקוד JavaScript בדפדפן, גם באמצעות משתנה סביבה ציבורי שנכלל בחבילה כמו NEXT_PUBLIC_SOLVETHREE_API_KEY, חושפת את פרטי הגישה האלה לדפדפן. ערפול הערך או הוספתו רק בעת ביצוע fetch ישיר אינם הופכים אותו לפרטי.
שמרו את SOLVETHREE_API_KEY בתצורה שזמינה לשרת בלבד, והשתמשו בו רק מקוד שרת מהימן. הדפדפן צריך לקרוא לנתיב באפליקציה שלכם, ולעולם לא ל־API המשימות של solvethree עם מפתח סביבת העבודה שלכם.
שמירת קלט המשימה בפונקציית עזר לשרת בלבד
// Import only from trusted server code. Your application authenticates the caller.
import { Solvethree } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
export async function createCaptchaForLogin(requestId) {
return client.createTask({
site: process.env.CAPTCHA_SITE,
action: 'login',
proxy: process.env.SOLVETHREE_PROXY,
requestId,
}, { waitMs: 0, signal: AbortSignal.timeout(20000) });
}
// The browser calls your authenticated application route, not the solver API.
// Save the returned task ID; retrieve that ID from server code with getTask.
// Submit a ready token using the proxy/browser identity attached to that solve.
// Merely moving the key server-side does not configure the browser's proxy.הגדירו בשרת את SOLVETHREE_API_KEY, את CAPTCHA_SITE ואת SOLVETHREE_PROXY. הערך של CAPTCHA_SITE הוא שם המארח של היעד, ולא כתובת URL מלאה. פונקציית העזר קובעת את הפעולה ל־login ומספקת פרוקסי אחד; הדפדפן אינו בוחר אף אחד מערכי הקלט האלה.
הגדירו בסביבת העבודה פרופיל פעיל לשם המארח הזה לפני הקריאה לפונקציית העזר. שליחת site ו־action אינה יוצרת פרופיל. ראו הגדרת פרופיל אתר.
waitMs: 0 מבקש ליצור משימה בלי להמתין לסיום הפתרון. שמרו את מזהה המשימה שהוחזר ואחזרו אותה מקוד השרת באמצעות getTask. אות הביטול של פונקציית העזר מגביל את הבקשה ל־20 שניות; אין בכך הבטחה שהפתרון יסתיים בתוך 20 שניות.
חשפו פעולת התחברות, לא שירות פתרון לשימוש חופשי
פונקציית העזר אינה נתיב מאומת בפני עצמה. הוסיפו סביבה את הבדיקות הבאות לפני קבלת בקשות מהדפדפן:
| פעולה | הדפדפן שולח | השרת מבצע |
|---|---|---|
| התחלת פתרון לצורך התחברות | סשן האפליקציה ו־requestId עבור ניסיון ההתחברות הזה. | מאמת את הפונה, בודק את תקינות הניסיון, בודק מגבלות יצירה וקורא לפונקציית העזר בעלת ההגדרות הקבועות. שומר את מזהה המשימה בשיוך לפונה ולניסיון הזה; מחזיר רק את מזהה המשימה והסטטוס הדרושים לממשק המשתמש. |
| בדיקת התקדמות | סשן האפליקציה ומזהה המשימה שהוחזר עבור הניסיון הזה. | בודק שהמשימה שייכת לפונה לפני אחזורה. מחזיר התקדמות, תגובת כשל מבוקרת או את התוצאה המוכנה הדרושה ללקוח המורשה שישלח אותה. |
אל תעבירו הלאה גוף משימה שסופק מהדפדפן. דחו ניסיונות לבחור שם מארח, פעולה, פרוקסי או סוג משימה אחרים. החילו מגבלת יצירה לכל פונה או סשן אפליקציה: גם פונה מאומת יכול לרוקן את היתרה באמצעות הפעלת משימות חדשות. אם הנתיב משתמש באימות באמצעות עוגיות, הגנו על בקשות ליצירת משימות מפני זיוף בקשות בין אתרים.
מזהה משימה אינו הרשאה. בדקו בעלות בכל בקשת התקדמות, ואל תחזירו בתגובות לדפדפן פרטי גישה לסביבת העבודה או פרטי גישה לפרוקסי שבשרת.
שחזור המשימה הקיימת לפני יצירת משימה נוספת
- שמרו requestId אחד לניסיון ההתחברות הלוגי. ודאו שהוא תואם לפורמט המתועד: 1–64 אותיות ASCII, ספרות, קווים תחתונים או מקפים. שייכו אותו לניסיון של הפונה; הוא אינו פרט גישה לצורך אימות.
- אם הזמן הקצוב ליצירה מסתיים, שמרו את ה־requestId ואת ערכי הקלט המקוריים של המשימה. חזרה על אותה בקשה עם אותו מזהה משחזרת את המשימה הקיימת. שינוי ערכי הקלט תוך שימוש חוזר במזהה גורם להתנגשות.
- טפלו בתגובות HTTP שאינן מציינות הצלחה לפני פירוש תוכן של תגובת הצלחה. במשימה שאוחזרה, pending ו־solving פירושם שיש להמשיך בתשאול; ready פירושו שפתרון זמין.
לאחר שיש בידיכם מזהה משימה, אחזרו אותה במקום להתחיל פתרון נוסף בכל רענון דפדפן או בקשת התקדמות. ראו טיפול בשגיאות API לאבחון כשלים.
החליטו איזה לקוח ישלח את הטוקן
לפני החזרת טוקן מוכן לדפדפן, החליטו היכן תתבצע הבקשה ליעד. הלקוח השולח חייב להשתמש בזהות userAgent ו־secChUa שהוחזרה ובפרוקסי ששימש לפתרון המוצלח הזה. העברת מפתח סביבת העבודה לשרת אינה מגדירה את הפרוקסי של הדפדפן.
אם הדפדפן אינו יכול לשלוח עם ההגדרות האלה, העברת הטוקן בלבד אליו אינה אינטגרציה מלאה. השתמשו בלקוח שולח שתוכלו להגדיר באופן עקבי, בלי לשלב זהות, פרוקסי או כתובת URL של יעד מסשן אחר. משימה מוכנה פירושה ש־solvethree יצר פתרון — לא שהיעד קיבל את הבקשה שנשלחה לאחר מכן.
מקורות ותיעוד API
הפעלת המשימה הראשונה שלך.
התחילו עם $5 בקרדיט לסביבת העבודה.