آموزش استفاده آسان از Google reCaptcha در کد PHP جهت جلوگیری از اسپم

29 دیدگاه

گوگل جدیدا سرویس تشخیص اسپمر های خود یا همان Google reCaptcha قدیمی را نونوار کرده است و دیگر از کدهای درهم و پیچ خورده و ناخوانا خبری نیست . فقط کافی است یک تیک بزنید و قضیه تمام است . در این پست می خواهیم به شما بگوییم که چگونه می توانید این سرویس جذاب گوگل را در برنامه خود استفاده کنید .

hero-recaptcha-demo

ثبت وبسایت و دریافت Secret Code

اولین چیزی که نیاز دارید این است که سایت خود را در Google reCaptcha به ثبت برسانید .برای این کار به این آدرس مراجعه کنید.

به حساب جیمیل تان وارد شوید و سپس فرم زیر را تکمیل نمایید

capcha1

بعد از تکمیل و ارسال فرم بالا گوگل دو مورد مهم را برای شما نشان می دهد :

  • Site key
  • Secret key

قرار دادن reCaptcha در سایت شما

برای اینکه این سرویس در سایت شما فعال شود باید هم در سمت کاربر و هم در سمت سرور تغییراتی ایجاد کنید . در سمت کاربر فایل HTML را باز کرده و کد زیر را قبل از تگ پایانی <head> قرار دهید :

<script src='https://www.google.com/recaptcha/api.js'></script>

و برای اینکه ویجت سرویس مربوطه در داخل فرم نمایش یابد باید کد زیر را در فرم قرار دهید :

<div class="g-recaptcha" data-sitekey="== Your site Key =="></div>

هنگامی که فرم ارسال می شود یک مقدار با نام “g-recaptcha-response” به سمت سرور ارسال می گردد که می توانید از آن برای تشخیص اینکه کاربر تیک کپچا را زده است یا خیر استفاده کنید .

ایجاد یک فرم ارسال نظر با استفاده از reCaptcha

<html>
  <head>
    <title>Google recapcha demo - Codeforgeek</title>
    <script src='https://www.google.com/recaptcha/api.js'></script>
  </head>
  <body>
    <h1>Google reCAPTHA Demo</h1>
    <form id="comment_form" action="form.php" method="post">
      <input type="email" placeholder="Type your email" size="40"><br><br>
      <textarea name="comment" rows="8" cols="39"></textarea><br><br>
      <input type="submit" name="submit" value="Post comment"><br><br>
      <div class="g-recaptcha" data-sitekey="=== Your site key ==="></div>
    </form>
  </body>
</html>

این کدها فرم زیر را تولید می کنند:

در همین رابطه :   امنیت برنامه خود را تضمین کنید (قسمت اول )

Screenshot-from-2014-12-05-103646

در سمت سرویس دهنده از زبان PHP استفاده می کنیم و داده هایی را که توسط فرم ارسال شده اند و در داخل متغیر سراسری $_POST هستند را چک می کنیم

<?php

        $email;$comment;$captcha;
        if(isset($_POST['email'])){
          $email=$_POST['email'];
        }if(isset($_POST['comment'])){
          $email=$_POST['comment'];
        }if(isset($_POST['g-recaptcha-response'])){
          $captcha=$_POST['g-recaptcha-response'];
        }
        if(!$captcha){
          echo '<h2>Please check the the captcha form.</h2>';
          exit;
        }
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
        if($response.success==false)
        {
          echo '<h2>You are spammer ! Get the @$%K out</h2>';
        }else
        {
          echo '<h2>Thanks for posting comment.</h2>';
        }
?>

همانطور که می بینید در کد بالا اطلاعات مربوطه را به آدرس سرویس recaptcha ارسال می کنیم و اطلاعات دریافتی از گوگل را که به صورت json هستند چک می کنیم تا مطمئن شویم کاربر اسپمر نیست

        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);

 

منبع

دسته بندی : AjaxPHPمديريت سايتامنيت

29 نظر

  1. سلام خطای زیر چطور رفع میشه من دامین رو به صورت صحیح وارد کردم و سایت کی هم درست هستش اما ارور زیر میادش
    خطا برای مالک سایت: نوع کلید معتبر نیست.

    1. سلام
      شاید نوع کلید با نوع کپچا همخوانی نداره. مثلا کلید برای ریکپچا قدیمی هست ولی کد استفاده شده برای نسخه جدید هست

    1. سلام. شاید یک کد دیگه هم هست که تداخل ایجاد میشه. تو یه صفحه دیگه این رو تست کنین اگه مشکل حل شد ایراد از کدهای شما بوده حتما

    1. سلام دوست عزیز
      site key کدی هست که بعد از ثبت نام در سایت google recaptcha دریافت می کنید و مخصوص سایت شماست

  2. سلام راهی هست که قبل از ارسال فرم به گوگل تشخیص بدیم اصلن کاربر روی کپچا کلیک کرده تا دکمه ارسال برایش فعال بشه یا بهتر بگم تا قبل از زدن تیک اطلاعاتی به سرور ارسال نشه

  3. سلام؛

    کد php سایت من برای فرم مربوطه به شکل زیر هست ؛
    برای جایگزینی این کد با کد فعلی همه کارها رو بلدم ،
    فقط نمیدونم این تکه کد اخر php رو کجای کد php خودم اضافه کنم !
    کد php من:
    if(isset($post[‘NB_FormC’]) AND $post[‘NB_FormC’] == 1 ){

    if($_SESSION[‘my_captcha’] == $post[‘NB_Formcode’] AND isset($post[‘NB_Formcode’])){

    $queryC = mysql_query(‘SELECT * FROM `config` WHERE `config_id` = “1” LIMIT 1’) or trigger_error(“Query Failed: ” . mysql_error());
    $config = mysql_fetch_assoc($queryC);

    $table .= ‘ فرم تماس با ما جدید با اطلاعات زیر در سایت ارسال شده است : ‘;
    $table .= ‘عنوان : ‘.$post[‘NB_FormSUB’].”;
    $table .= ‘نام : ‘.$post[‘NB_FormNAME’].”;
    $table .= ‘ایمیل : ‘.$post[‘NB_FormMAIL’].”;
    $table .= ‘همراه : ‘.$post[‘NB_FormTel’].”;
    $table .= ‘پیغام : ‘.$post[‘NB_FormTXT’].”;

    $Netbanan_Send = NetBanan_send_mail($config[config_admin_email],$post[‘NB_FormSUB’],$table);

    if($Netbanan_Send) echo ‘alert(“اطلاعات شما با موفقیت برای ما ارسال شد. اگر پیام شما نیاز به پاسخ داشته باشد با شما در تماس خواهیم بود.”);’ ;
    }else{
    echo ‘alert(“کد امنیتی را اشتباه وارد کردید .”);’;
    }
    }

    ممنون از لطف شما

    1. سلام دوست من
      در انتهای کدتون وقتی می خواین اطلاعات رو ذخیره کنین قبلش باید این کدها رو بزارین تا صحت کپچا هم بررسی بشه.


      if(isset($_POST['g-recaptcha-response'])){
      $captcha=$_POST['g-recaptcha-response'];
      }
      if(!$captcha){
      echo '

      Please check the the captcha form.

      ';
      exit;
      }
      $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
      if($response.success==false)
      {
      echo '

      You are spammer ! Get the @$%K out

      ';
      }else
      {
      echo '

      Thanks for posting comment.

      ';
      }

  4. اونجایی که نوشتید «در سمت سرویس دهنده از زبان PHP استفاده می کنیم» اون کد php رو دقیقا در کدام فایل باید بذاریم.
    مرسی

    1. سلام
      action فرم هر فایلی باشه باید داخل همون فایل قرار بدیم . مثلا اگه اکشن فرم اینطوری هست : action="form.php" باید داخل فایل form.php قرار بدید

  5. سلام یه سوالی دارم
    چه طور میتونم با استفاده از php و mysql یه همچین سیستم کامنت گذاری رو درست کنم

  6. کد هارو قرار دادم ولی چنتا مشکل دارم
    1) صفحه اول سایت من شده همون فرم کپتچا http://www.aryabux.ir
    2) میخوام کد تو صفحه ثبت نام و ورود کاربران نمایش داده بشه چیکار کنم؟
    3) تو سایت گوگل کپتچا مرحه دومی هم هست (server side integration)
    و شما فقط تا مرحله اول گفتید

  7. سلام
    من نمیتونم توی اسکریپتم کد هارو قرار بدم اماکن داره اطلاعات رو برای شما بفرستم
    برام درست کنید؟
    ممنون

  8. و برای اینکه ویجت سرویس مربوطه در داخل فرم نمایش یابد باید کد زیر را در فرم قرار دهید :
    برای فرم ورود به وردپرس این کد رو کجا قرار بدیم؟

      1. خدا خیرت بده این افزونه از همه راهها ساده تره. از صبح درگیر کپچا و فرمای مختلفش بودم همش نصب میکردم یا نشون نمیداد یا ارور میداد. این افزونه خیلی کارو راحت کرد

  9. سلام ممنون از راهنمایی و آموزشه خوبتون ولی من نمیدونم html کجاست و از کجا باید دستکاریش کنم
    برای اینکه این سرویس در سایت شما فعال شود باید هم در سمت کاربر و هم در سمت سرور تغییراتی ایجاد کنید . در سمت کاربر فایل HTML را باز کرده و کد زیر را قبل از تگ پایانی قرار دهید :
    اینو به من یاد بدین خیلی ساده صحبت کنید.
    سایت من وردپرسی هست و همش php داره من head رو نمیدونم از کجا پیدا کنم اصلا html رواز کجای ورد پرس میشه پیدا کرد؟
    ممنون از زحماتتون

    1. سلام
      داخل پوشه قالب فعال وردپرس بشید . یک فایل با نام header.php هست که می تونید کدهای html رو داخلش ببینید

  10. سلام ، چرا من در خط 15 فرم خطا دریافت میکنم !!!!!

    Warning: file_get_contents(https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY&response=03AHJ_Vuv1aUu2xUAWKeBfHkHhLi8d-xmxTGMzfivlZ9Ggtx-NhRpQDCpMui6aQ05Jmp3BxowEPhNVGjWcp1lADdJ2yitf8OiTMzU5JJ8wgYP26NsVKC7kZnZ1clTMfNaDyZUzvvU-Oz1sGKRNflr8CZHdzwS2ShuscYpfg4KzJBenfcL5l0wIqV6-PWkdwhA6ZSZDqSkydQl5DUrtWLzkb0qe4KxKP90XAJYJNxYnZJDLtr__c9PXozbmSHhuGVniqmpG9MNtgeR0AcGo-3CE2-evwH4r78h2ljwndxHMheS6HbB9Znn95UH-9GK1viAZkOQ5mSWbORGwOGnSoVs3TMF1iHrKL2FWe0sYRqsv8BeXBbMvMUfXEDP2R8-fQOMUTG8QQYydr5aOw2QL4vVWZEbjheMyxOvB1d2Ka0eSea4Q6InQ5D6VMYHeZaSfLXawRBqq-CkolHEnxxdq_w5xwipDdgA82UWz-Hn1DGLFzzGEcxK7afsjrcf14fiTEeCu5VOue6fD7lLgAnHzAazVYwLhVvbyCdDvWQixHXUY8SvfD1kQlSeqQLYbAeDJYfY7coMq5OFuvnvlfNxl-SnoaSPrE4w980GrQ9KbwjdZDVyWQ8SUwus8u12qrKxa_fYWsicKXADWfhR-4hz1-hdkW9rFJ9GusWdiNVzxiDg1vnIuguubRmxglclIdcztT-iIjbKMe1NUzAX_&remoteip=::1): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in C:\xampp\htdocs\test\form.php on line 14

    Notice: Use of undefined constant success – assumed ‘success’ in C:\xampp\htdocs\test\form.php on line 15
    Thanks for posting comment..

    اینم کامنتی که دریافت میکنم .

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *