عنوان:

‫استفاده از reCAPTCHA در ASP.NET


نویسنده: علیرضا اسم‌رام
تاریخ: ۱۳۹۱/۰۴/۲۹ ۱۹:۳۹
آدرس: www.dntips.ir
CAPTCHA جهت تشخیص انسان در وب استفاده می‌شود. در حقیقت می‌توان CAPTCHA را مانعی مابین منابع یک سایت و روبات‌های مخرب دانست. گوگل یک CAPTCHA رایگان جهت استفاده توسعه دهندگان وب مهیا کرده است که استفاده از آن را به چند دلیل می‌توان مثبت دانست:
 
  1. فراگیر بودن آن و استفاده سایت‌های مختلف از آن (بیش از 200.000 سایت).
  2. سهولت استفاده برای کاربران.
  3. سهولت استفاده توسط برنامه نویسان.
  4. دسترسی پذیری مناسب بدلیل وجود تلفظ و پخش عبارت، بصورت صوتی.
  5. امنیت بالا. بسیاری از CAPTCHA‌ها به سادگی قابل شکستن هستند!

حال اجازه دهید نگاهی به نحوه استفاده از reCAPTCHA در ASP.NET داشته باشیم:
 
1. پس از اینکه به حساب کاربری خود در Google وارد شدید به این صفحه + مراجعه کنید تا یک API Key جدید برای سایت خود ایجاد کنید. برای استفاده از reCAPTCHA اولین پیش نیاز داشتن یک API Key معتبر است.
 
2. دانلود reCAPTCHA ASP.NET Library. این کتابخانه شامل کنترل reCAPTCHA است. پس از دریافت، Recaptcha.dll را توسط گزینه Add Reference به پروژه خود اضافه کنید.
 
3. جهت استفاده از این کنترل، در بالای صفحه از دستور زیر استفاده کنید:
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
سپس کنترل reCAPTCHA را در محل مناسب قرار دهید:
  <recaptcha:RecaptchaControl
    ID="recaptcha"
    runat="server"
    PublicKey="your_public_key"
    PrivateKey="your_private_key"
    />
4. حال جهت بررسی و اعتبار سنجی فرم باید از متد IsValid کلاس Page استفاده شود. نمونه کد مورد نظر در VB.NET بصورت زیر است:
      Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
          If Page.IsValid Then
              lblResult.Text = "You Got It!"
              lblResult.ForeColor = Drawing.Color.Green
          Else
              lblResult.Text = "Incorrect"
              lblResult.ForeColor = Drawing.Color.Red
          End If
      End Sub

نظرات

  • مهمان در ۱۳۹۱/۰۴/۳۱ ۹:۱۴

    با سلام

    آیا این dll اپن سورس هست؟ از کجا میشه فهمید که درون این dll کدهای مخرب وجود ندارد؟

    • وحید نصیری در ۱۳۹۱/۰۴/۳۱ ۹:۳۶
      دقت کردید در code.google.com هاست شده؟ یعنی سورس باز است.
    • علیرضا اسم‌رام در ۱۳۹۱/۰۴/۳۱ ۹:۴۸
      سلام. جهت تکمیل نظر آقای نصیری و همچنین پاسخ به شما در مورد کدهای مخرب باید عرض کنم که بیش از 200.000 سایت معتبر در مقاطع زمانی مختلف از این سرویس تا به حال بهره گرفته اند. در این لیست می‌توان به سایت‌های بزرگی چون Twitter، Facebook و eBay اشاره کرد.
      جای نگرانی نیست.
  • وحید نصیری در ۱۳۹۱/۰۴/۳۱ ۹:۳۸
    اگر دسترسی به گوگل کد ندارید، می‌شود از طریق NuGet نیز آن‌را دریافت کرد.
  • مهمان در ۱۳۹۱/۰۵/۱۲ ۱۹:۵۸
    سلام. من از این سیستم استفاده کردم . رو تست لوکال، ناقص لود میشه. با کروم و فایرفاکس هم تست کردم . قضیه چیه ؟


    • وحید نصیری در ۱۳۹۱/۰۵/۱۲ ۲۳:۴۳
      این مورد بیشتر به تداخل css کلی سایت با این کنترل مربوط می‌شود. بهترین کار استفاده از firebug است. ابتدا در برگه net آن بررسی کنید پیام 404 ایی مشاهده می‌شود؟ ممکن است چیزی از قلم افتاده باشد. سپس به وسیله firebug به صورت live شروع به ویرایش css المان انتخاب شده کنید تا به نتیجه برسید.

      • مهمان در ۱۳۹۱/۰۵/۱۳ ۱۳:۴۳
        ممنون از راهنمایی تون. مشکلم حل شد مینویسم که اگه دوستام دیگه هم به این مشکل خوردن بدونن از چیه. اولین مشکل از این بود که من به سلول‌های جدولم طول داده بودم که کمی بزرگ باشه(height) که برش داشتم و دومین مورد هم مربوط به تگ body بود که direction=rtl بود. این دو مود نباید در مورد جایی که این کنترل قرار داره اعمال بشه. ممنون استاد نصیری.
  • مهمان در ۱۳۹۱/۰۵/۱۷ ۲۲:۳۱
    سلام
         دوستان من نمیتونم فایل دل ال الشو دانلود کنم، تو رو خدا فایلشو بذارین منم بردارم. با اینکه تو لاگین جی میلم هستم ازم پسورود میخاد که هر چی میزنم میگه اشتباهه ... !    با اینکه من داخل جی میلم شدم و در تب دیگه مرورگرم دارم میل هامو میخونم.
    دوستان منتظرم کمکم کنید لطفا.  با تشکر از مطالب مفیدتون
    • وحید نصیری در ۱۳۹۱/۰۵/۱۷ ۲۲:۳۶
      بالاتر توضیح دادم. از NuGet استفاده کنید. (دسترسی به گوگل کد با IP ایرانی میسر نیست؛ ولی NuGet محدودیتی ندارد)
  • مهمان در ۱۳۹۳/۰۲/۲۱ ۱۴:۵۲
    با عرض سلام.
    ببخشید من کارهایی که گفته بودیدو انجام دادم، و در کد پشت باتن enterLogin  نوشتم :

     protected void enterLogin_Click( object sender, EventArgs e )
            {
                if(Page.IsValid)
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('خوش آمدید !');", true);
                    
                }
    
                ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('خطا !');", true);

    CAPTCHA  نمایش داده میشود اما بررسی نمیکنه که عدد  وارد شده درست است یا نه؟ میشه بهم بگید مشکله کار کجاست؟
    • محسن خان در ۱۳۹۳/۰۲/۲۱ ۱۶:۵۶
      کد شما قسمت else نداره یا حداقل اینجا نوشته نشده. بنابراین حتی اگر صفحه معتبر هم باشه، قسمت نمایش خطا اجرا میشه.