דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. התקנת recaptcha בphp

התקנת recaptcha בphp

מתוזמן נעוץ נעול הועבר תכנות
16 פוסטים 4 כותבים 687 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid
    ניהול
    כתב ב נערך לאחרונה על ידי
    #2

    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 על רמת האמינות של התנועה.

    אם בכל זאת אתה רוצה ספריה, אין לי מושג מה הספריה הרשמית, לא כתבת מאיפה הורדת את הקוד.

    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
    תגובה 1 תגובה אחרונה
    4
    • chagoldC chagold

      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
      

      מה יכול להיות הבעיה?

      yossizY מנותק
      yossizY מנותק
      yossiz
      כתב ב נערך לאחרונה על ידי
      #3

      @chagold אם זה מה שהורדת אז אין שם כלל מחלקה זו Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      1
      • chagoldC מנותק
        chagoldC מנותק
        chagold
        כתב ב נערך לאחרונה על ידי chagold
        #4

        @dovid זה בהדרכה הרשמית

        image.png

        אין לי בעיה לעשות משהו שעובד שלא רשמי. לא הבנתי איזה פוסט הקליינט שולח לכתובת הנ"ל.

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid
          ניהול
          כתב ב נערך לאחרונה על ידי
          #5

          @chagold לא הבנתי,
          הצילום מסך שהבאת מתייחס להטמעה בצד הלקוח, אני דיברתי על הספריה צד שרת.
          בצד לקוח בהחלט צריך את שורות הקוד שהראת (או בשיטה שונה של attribute לform) אבל למה זה מצריך ספריה לצד שרת.
          (אגב הבאת בצילום מסך את ההדרכה לכאורה של גירסת אנטרפרייס, זה מה שיש לך?)

          אני אסביר לך את סדר הדברים:

          1. הלקוח נכנס לדף שלך
          2. בדף שלך נטענת ספריית צד לקוח של גוגל (לא את הספריה הזו ניסיתי לחסוך)
          3. בעת לחיצה על submit של טופס (בדרך כלל) אז לפני השליחה של הפרמטרים שלך (למשל מיל משתמש והודעה) הספריה של גוגל מבצעת תקשורת עם שרתי גוגל בקשר לאומדן האמינות של הפעילות, והיא מהם קוד זיהוי לצורך זיהוי עתידי של הפעולה שנבחנה.
          4. הפרמטר של הקוד זיהוי + הפרמטרים של הטופס שלך נשלחים לשרת שלך. אתה יכול לראות את זה בvar_dump($_POST);

          מכאן ואילך אתה אמור להמשיך עם הצעדים שכתבתי לעיל ולהחליט לפי זה אם להמשיך ולתת לללקוח את מבוקשו או שלא וכולי.

          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
          תגובה 1 תגובה אחרונה
          5
          • chagoldC מנותק
            chagoldC מנותק
            chagold
            כתב ב נערך לאחרונה על ידי chagold
            #6

            @dovid איך שהבנתיך, אני אמור לפנות ל-https://www.google.com/recaptcha/api/siteverify מהצד שרת עם ערכים מהקליינט (שנוספו אליו ע"י הrecaptcha).
            בדקתי בצד השרת עם var_dump($_POST) אבל לא נוסף כל משתנה מעבר למה שמוגדר בטופס (למרות שדף הקליינט חתום ע"י הספריה של גוגל שהיא מוגנת)
            image.png

            dovidD תגובה 1 תגובה אחרונה
            0
            • chagoldC chagold

              @dovid איך שהבנתיך, אני אמור לפנות ל-https://www.google.com/recaptcha/api/siteverify מהצד שרת עם ערכים מהקליינט (שנוספו אליו ע"י הrecaptcha).
              בדקתי בצד השרת עם var_dump($_POST) אבל לא נוסף כל משתנה מעבר למה שמוגדר בטופס (למרות שדף הקליינט חתום ע"י הספריה של גוגל שהיא מוגנת)
              image.png

              dovidD מנותק
              dovidD מנותק
              dovid
              ניהול
              כתב ב נערך לאחרונה על ידי
              #7

              @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>
              
              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              תגובה 1 תגובה אחרונה
              2
              • chagoldC מנותק
                chagoldC מנותק
                chagold
                כתב ב נערך לאחרונה על ידי chagold
                #8

                2 דברים שאני מסתבך.

                1. יש 2 מקומות שונים באתר של recaptcha שניתן לקבל מפתחות.
                  א. בפאנל הראשי של recaptcha (משם הצילום מסך דלעיל), ושם יש מפתח אחד שמשמש גם עבור צד הקליינט (מול השרת) וגם עבור צד השרת (מול recaptcha).

                  ב. בכתובת זו יש 2 מפתחות שונים, אחד לאתר והשני בין הצד שרת לrecaptcha.

                  מה עלי להכניס?

                2. כל אחת מהמפתחות שאני שותל לקוד, הקריאה (מהצד שרת) ל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;
                
                צדיק תמיםצ תגובה 1 תגובה אחרונה
                0
                • chagoldC chagold

                  2 דברים שאני מסתבך.

                  1. יש 2 מקומות שונים באתר של recaptcha שניתן לקבל מפתחות.
                    א. בפאנל הראשי של recaptcha (משם הצילום מסך דלעיל), ושם יש מפתח אחד שמשמש גם עבור צד הקליינט (מול השרת) וגם עבור צד השרת (מול recaptcha).

                    ב. בכתובת זו יש 2 מפתחות שונים, אחד לאתר והשני בין הצד שרת לrecaptcha.

                    מה עלי להכניס?

                  2. כל אחת מהמפתחות שאני שותל לקוד, הקריאה (מהצד שרת) ל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;
                  
                  צדיק תמיםצ מנותק
                  צדיק תמיםצ מנותק
                  צדיק תמים
                  כתב ב נערך לאחרונה על ידי צדיק תמים
                  #9

                  @chagold לא הבנתי מה זה הפאנל הראשי, אבל אתה צריך להשתמש במפתחות שבניהול (ב')
                  לגבי השגיאת missing-input-secret, אני לא מכיר PHP אבל נראה שצריך לשלוח בapplication/x-www-form-urlencoded ולא בJSON
                  יש לך דוגמה כאן: https://gist.github.com/jonathanstark/dfb30bdfb522318fc819

                  Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                  טיפים

                  תגובה 1 תגובה אחרונה
                  1
                  • dovidD מנותק
                    dovidD מנותק
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי dovid
                    #10

                    @chagold אתה שולח עם http_build_query, אבל הצהרת סוג application/json.
                    תשנה לapplication/x-www-form-urlencoded או שבמקום http_build_query תשמש עם מתודה שתעצב את $data לJSON.

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    צדיק תמיםצ תגובה 1 תגובה אחרונה
                    2
                    • dovidD dovid

                      @chagold אתה שולח עם http_build_query, אבל הצהרת סוג application/json.
                      תשנה לapplication/x-www-form-urlencoded או שבמקום http_build_query תשמש עם מתודה שתעצב את $data לJSON.

                      צדיק תמיםצ מנותק
                      צדיק תמיםצ מנותק
                      צדיק תמים
                      כתב ב נערך לאחרונה על ידי
                      #11

                      @dovid כתב בהתקנת recaptcha בphp:

                      או שבמקום http_build_query תשמש עם מתודה שתעצב את $data לJSON

                      הAPI הזה של גוגל לא מקבל JSON

                      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                      טיפים

                      chagoldC תגובה 1 תגובה אחרונה
                      2
                      • צדיק תמיםצ צדיק תמים

                        @dovid כתב בהתקנת recaptcha בphp:

                        או שבמקום http_build_query תשמש עם מתודה שתעצב את $data לJSON

                        הAPI הזה של גוגל לא מקבל JSON

                        chagoldC מנותק
                        chagoldC מנותק
                        chagold
                        כתב ב נערך לאחרונה על ידי
                        #12

                        @צדיק-תמים
                        מאידך

                        'header' => "application/x-www-form-urlencoded",
                        

                        מחזיר שגיאה

                        Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in /path/to/file.php on line 40
                        

                        (הפתרון כאן,לא עזר).

                        צדיק תמיםצ תגובה 1 תגובה אחרונה
                        0
                        • chagoldC chagold

                          @צדיק-תמים
                          מאידך

                          'header' => "application/x-www-form-urlencoded",
                          

                          מחזיר שגיאה

                          Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in /path/to/file.php on line 40
                          

                          (הפתרון כאן,לא עזר).

                          צדיק תמיםצ מנותק
                          צדיק תמיםצ מנותק
                          צדיק תמים
                          כתב ב נערך לאחרונה על ידי
                          #13

                          @chagold צריך לכתוב ככה, לא?

                          'header'  => 'Content-type: application/x-www-form-urlencoded'
                          

                          Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                          טיפים

                          chagoldC תגובה 1 תגובה אחרונה
                          2
                          • צדיק תמיםצ צדיק תמים

                            @chagold צריך לכתוב ככה, לא?

                            'header'  => 'Content-type: application/x-www-form-urlencoded'
                            
                            chagoldC מנותק
                            chagoldC מנותק
                            chagold
                            כתב ב נערך לאחרונה על ידי
                            #14

                            @צדיק-תמים כתב בהתקנת recaptcha בphp:

                            @chagold צריך לכתוב ככה, לא?

                            'header'  => 'Content-type: application/x-www-form-urlencoded'
                            

                            אכן. עשיתי והשגיאה הקודמת חזרה

                            {"success":false,"error-codes":["invalid-input-secret"]}
                            
                            צדיק תמיםצ תגובה 1 תגובה אחרונה
                            0
                            • chagoldC chagold

                              @צדיק-תמים כתב בהתקנת recaptcha בphp:

                              @chagold צריך לכתוב ככה, לא?

                              'header'  => 'Content-type: application/x-www-form-urlencoded'
                              

                              אכן. עשיתי והשגיאה הקודמת חזרה

                              {"success":false,"error-codes":["invalid-input-secret"]}
                              
                              צדיק תמיםצ מנותק
                              צדיק תמיםצ מנותק
                              צדיק תמים
                              כתב ב נערך לאחרונה על ידי
                              #15

                              @chagold קודם זה היה missing-input-secret
                              עכשיו זה invalid-input-secret
                              תוודא שאתה שולח את הkey הנכון של צד השרת (מכאן)

                              Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                              טיפים

                              תגובה 1 תגובה אחרונה
                              1
                              • chagoldC מנותק
                                chagoldC מנותק
                                chagold
                                כתב ב נערך לאחרונה על ידי chagold
                                #16

                                @צדיק-תמים הצליח. תודה רבה!

                                תגובה 1 תגובה אחרונה
                                2
                                תגובה
                                • תגובה כנושא
                                התחברו כדי לפרסם תגובה
                                • מהישן לחדש
                                • מהחדש לישן
                                • הכי הרבה הצבעות


                                בא תתחבר לדף היומי!
                                • התחברות

                                • אין לך חשבון עדיין? הרשמה

                                • התחברו או הירשמו כדי לחפש.
                                • פוסט ראשון
                                  פוסט אחרון
                                0
                                • דף הבית
                                • קטגוריות
                                • פוסטים אחרונים
                                • משתמשים
                                • חיפוש
                                • חוקי הפורום