התקנת recaptcha בphp
-
php -v 7.4
הורדתי ידנית מהגיטהאב את recaptcha-1.2.4.zipהקוד
require './recaptcha/src/autoload.php'; // Include Google Cloud dependencies using Composer use Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient; use Google\Cloud\RecaptchaEnterprise\V1\Event; use Google\Cloud\RecaptchaEnterprise\V1\Assessment; use Google\Cloud\RecaptchaEnterprise\V1\TokenProperties\InvalidReason; /** * Create an assessment to analyze the risk of a UI action. * @param string $recaptchaKey The reCAPTCHA key associated with the site/app * @param string $token The generated token obtained from the client. * @param string $project Your Google Cloud Project ID. * @param string $action Action name corresponding to the token. */ function create_assessment( string $recaptchaKey, string $token, string $project, string $action ): void { // Create the reCAPTCHA client. // TODO: Cache the client generation code (recommended) or call client.close() before exiting the method. $client = new RecaptchaEnterpriseServiceClient(); $projectName = $client->projectName($project); ....
נתקע כדלהלן:
Fatal error: Uncaught Error: Class 'Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient' not found in C:\xampp\site\classes\recaptcha.class.php:26 Stack trace: #0 C:\xampp\site\classes\recaptcha.class.php(72): create_assessment('6LfnWHQpAAAAADK...', 'YOUR_USER_RESPO...', 'site-site-66...', 'YOUR_RECAPTCHA_...') #1 C:\xampp\site\index.php(7): require_once('C:\\xampp\\site..') #2 {main} thrown in C:\xampp\site\classes\recaptcha.class.php on line 26
מה יכול להיות הבעיה?
-
recaptcha בקושי צריך ספריה, זה כמה שורות קוד פשוטות,
אתה מקבל בPOST שמגיע מהאתר שלך (עם הריקאפצה) ערך נוסף בשם g-recaptcha-response ואתה שולח בקשת POST לכתובת הבאה
https://www.google.com/recaptcha/api/siteverify
עם הפרמטרים 1. secret שהוא הקוד הקבוע הסודי 2. response שזה הקוד שהגיע בפרמטר g-recaptcha-response הנ"ל.
בתשובה יש success של כןלא עבור גירסה V2
ובגירסה 3 יש score שזה בין 0.0 ל 0.9 על רמת האמינות של התנועה.אם בכל זאת אתה רוצה ספריה, אין לי מושג מה הספריה הרשמית, לא כתבת מאיפה הורדת את הקוד.
-
@chagold לא הבנתי,
הצילום מסך שהבאת מתייחס להטמעה בצד הלקוח, אני דיברתי על הספריה צד שרת.
בצד לקוח בהחלט צריך את שורות הקוד שהראת (או בשיטה שונה של attribute לform) אבל למה זה מצריך ספריה לצד שרת.
(אגב הבאת בצילום מסך את ההדרכה לכאורה של גירסת אנטרפרייס, זה מה שיש לך?)אני אסביר לך את סדר הדברים:
- הלקוח נכנס לדף שלך
- בדף שלך נטענת ספריית צד לקוח של גוגל (לא את הספריה הזו ניסיתי לחסוך)
- בעת לחיצה על submit של טופס (בדרך כלל) אז לפני השליחה של הפרמטרים שלך (למשל מיל משתמש והודעה) הספריה של גוגל מבצעת תקשורת עם שרתי גוגל בקשר לאומדן האמינות של הפעילות, והיא מהם קוד זיהוי לצורך זיהוי עתידי של הפעולה שנבחנה.
- הפרמטר של הקוד זיהוי + הפרמטרים של הטופס שלך נשלחים לשרת שלך. אתה יכול לראות את זה בvar_dump($_POST);
מכאן ואילך אתה אמור להמשיך עם הצעדים שכתבתי לעיל ולהחליט לפי זה אם להמשיך ולתת לללקוח את מבוקשו או שלא וכולי.
-
@dovid איך שהבנתיך, אני אמור לפנות ל-https://www.google.com/recaptcha/api/siteverify מהצד שרת עם ערכים מהקליינט (שנוספו אליו ע"י הrecaptcha).
בדקתי בצד השרת עם var_dump($_POST) אבל לא נוסף כל משתנה מעבר למה שמוגדר בטופס (למרות שדף הקליינט חתום ע"י הספריה של גוגל שהיא מוגנת)
-
@chagold כתב בהתקנת recaptcha בphp:
בדקתי בצד השרת עם var_dump($_POST) אבל לא נוסף כל משתנה מעבר למה שמוגדר בטופס (למרות שדף הקליינט חתום ע"י הספריה של גוגל שהיא מוגנת)
@dovid כתב בהתקנת recaptcha בphp:
בעת לחיצה על submit של טופס (בדרך כלל) אז לפני השליחה של הפרמטרים שלך (למשל מיל משתמש והודעה) הספריה של גוגל מבצעת תקשורת עם שרתי גוגל בקשר לאומדן האמינות של הפעילות, והיא מהם קוד זיהוי לצורך זיהוי עתידי של הפעולה שנבחנה.
זה לא קורה לבד.
אתה צריך ליזום את זה בJS, או להשתמש בattributes בלחצן Submit.
למשל<form method="POST" action="sendMessage.php"> <input type="text"> <button class="g-recaptcha" data-sitekey="reCAPTCHA_site_key" data-callback='onSubmit' data-action='submit'>שלח!</button> </form>
-
2 דברים שאני מסתבך.
-
יש 2 מקומות שונים באתר של recaptcha שניתן לקבל מפתחות.
א. בפאנל הראשי של recaptcha (משם הצילום מסך דלעיל), ושם יש מפתח אחד שמשמש גם עבור צד הקליינט (מול השרת) וגם עבור צד השרת (מול recaptcha).ב. בכתובת זו יש 2 מפתחות שונים, אחד לאתר והשני בין הצד שרת לrecaptcha.
מה עלי להכניס?
-
כל אחת מהמפתחות שאני שותל לקוד, הקריאה (מהצד שרת) לrecaptcha מחזירה
{"success":false,"error-codes":["missing-input-secret"]}
הקוד בצד שרת הוא
$recaptcha_secret = "6LfnWHQpAAAAADKdo8pJsd3BBDXayhALFfbLqv0P"; //$recaptcha_response = $_POST['g-recaptcha-response']; $recaptcha_response =$token ; $url = 'https://www.google.com/recaptcha/api/siteverify'; $data = array( 'secret' => $recaptcha_secret, 'response' => $recaptcha_response ); $options = array( 'http' => array ( 'header' => "Content-type: application/json", 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $verify = file_get_contents($url, false, $context); $captcha_success = json_decode($verify); echo json_encode($captcha_success);die;
-
-
@chagold לא הבנתי מה זה הפאנל הראשי, אבל אתה צריך להשתמש במפתחות שבניהול (ב')
לגבי השגיאת missing-input-secret, אני לא מכיר PHP אבל נראה שצריך לשלוח בapplication/x-www-form-urlencoded
ולא בJSON
יש לך דוגמה כאן: https://gist.github.com/jonathanstark/dfb30bdfb522318fc819 -
@צדיק-תמים כתב בהתקנת recaptcha בphp:
@chagold צריך לכתוב ככה, לא?
'header' => 'Content-type: application/x-www-form-urlencoded'
אכן. עשיתי והשגיאה הקודמת חזרה
{"success":false,"error-codes":["invalid-input-secret"]}
-
@צדיק-תמים הצליח. תודה רבה!