صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 17 من 28

طريقة عمل رمز التحقق captcha

08-04-2008, 11:06 PM
  • ارسال بالبريد
  • حفظ في المفضلة
باسم الله الرحمان الرحيم
وَلَوْ أَرَادُواْ الْخُرُوجَ لأَعَدُّواْ لَهُ عُدَّةً وَلَكِن كَرِهَ اللَّهُ انبِعَاثَهُمْ فَثَبَّطَهُمْ وَقِيلَ اقْعُدُواْ مَعَ الْقَاعِدِينَ
سورة التوبة الآية 46
السلام عليكم و رحمة الله و بركاته

قصد حماية الموقع من الأوامر المزعجة و الــ spam تلجأ الكثير من المواقع إلى نظام captcha أو ما يطلق عليه باللغة العربية : رمز التحقق
ودلك للتأكد من أن المستخدم الذي ادخل البيانات إنسان و ليس برنامج
لاحظ التالي
1
نموذج تسجيل عضوية جديدة في Hotmail يفرض هده العملية



2
نموذج التسجيل في سكربت LayeredPanel كذلك







3
في مجلة يستطيع المشرف العام منع الزائر من تسجيل الدخول إلا بعد كتابة كود التحقق







سأحاول شرح إنجاز هده العملية الهامة على الموقع حسب خبرتي المتواضعة
ودلك بالاستناد إلى مثال بسط جدا لا يسمح لك بمشاهدة محتوى صفحة معينة إلا بعد إدخال رمز التحقق

فعلى بركة الله نبدأ
1 انشاء صورة الكود
أنشء ملفا جديدا و ابدأ البرمجة بفتح الجلسة و تخزين رقم عشوائي في متغير


كود PHP:
<?php
 
 
 session_start
();




قم بتخزين قيمة المتغير $azizsoft_ca في جلسة و لتكن على سبيل المثال

كود PHP:
$_SESSION['azizsoft_ca'] = $azizsoft_ca


نحتاج لبرمجة صورة التحقق التي سيظهر داخلها الكود


1 تحديد اسم و نوع الملف عن طريق دالة header


كود PHP:
header('Content-Disposition: filename="azizsoft.jpg"'); 
كود PHP:
 header('(anti-spam-content-type:) image/jpeg'); 

2 إنشاء إطار الصورة استنادا إلى متغيري الطول و الارتفاع


كود PHP:
$height 25
$width 62
$image_p imagecreate($width$height); 

3 تحديد لون الكتابة و لون الخلفية

كود PHP:
$black imagecolorallocate($image_p000); 
$white imagecolorallocate($image_p255255255); 


4 تحديد حجم الخط


كود PHP:
$font_size 28

5 إنشاء الصورة و كتابة الرقم العشوائي داخلها

كود PHP:
imagestring($image_p$font_size55$azizsoft_ca$white); 


6 تحديد الجودة

كود PHP:
imagejpeg($image_pnull20); 
سنحصل على نتيجة مثل






الكود كاملا
كود PHP:
<?php
session_start
();
$azizsoft_ca rand(100000999999);
$_SESSION['azizsoft_ca'] = $azizsoft_ca;
 
header('Content-Disposition: filename="azizsoft.jpg"'); 
header('(anti-spam-content-type:) image/jpeg'); 
 
 
$height 25
$width 62
$image_p imagecreate($width$height); 
$black imagecolorallocate($image_p000); 
$white imagecolorallocate($image_p255255255); 
$font_size 28
imagestring($image_p$font_size55$azizsoft_ca$white); 
imagejpeg($image_pnull20);
 
 
?>


2 تصميم النموذج
الآن لننتقل إلى برنامج front page لتصميم نموذج إدخال كود التحقق
لا أضن أنني في حاجة لشرح خطوات تصميم نموذج بهده البساطة فكل شخص لديه طريقته الخاصة في العمل على front page أو أي برنامج بديل
النموذج سيكون افتراضيا بهذا الشكل








كما تلاحظون فالنموذج مجرد مثال مبسط :
  1. حقل الإدخال
  2. صورة الكود
  3. رز الإدخال
3 تصميم صفحة الاستقبال

أولا لابد من فتح الجلسة



كود PHP:
<?

كود PHP:
 session_start(); 

إنشاء الشرط الذي يتمحور حوله الموضوع

هل توجد جلسة؟
هل القيمة القادمة من النموذج لا تطابق قيمة متغير الجلسة $azizsoft_ca
و النص البرمجي للشرط سيكون افتراضيا بهدا الشكل



كود PHP:
if(!$_SESSION['azizsoft_ca'] || $_SESSION['azizsoft_ca'] != $_POST['azizsoft_ca']) 

هدا باعتبار أن azizsoft_ca هو اسم حقل إدخال الكود
ادا كانت الشروط الموجودة داخل الدالة الشرطية غير متوفرة فالنتيجة هي



كود PHP:
{
die(
"عفوا ! <br> كود التحقق الدي أدخلته غير صحيح");


بهدا سيتوقف الزائر عند هده العبارة
يمكن جلب صفحة النموذج داخل الشرط عن طريق دالة include و دلك حتى يتمكن الزائر من مشاهدة النموذج دون الحاجة للعودة للصفحة السابقة




كود PHP:
{
echo 
"عفوا ! <br> كود التحقق الدي أدخلته غير صحيح";
include(
"ca.html");
die();



هدا باعتبار أن ca.html هو اسم صفحة النمودج
أسفل هده المنطقة يمكنك برمجة ما تريد أن يشاهده الزائر عند ادخال الكود بشكل صحيح
المتال كاملا



كود PHP:
<?
session_start
();
if(!
$_SESSION['azizsoft_ca'] || $_SESSION['azizsoft_ca'] != $_POST['azizsoft_ca'])
{
 
die(
"ere");
 
}
echo 
"ok<br>";
 
?>


المتال الكامل للدرس مرفق مع الموضوع
التحية للجميع
azizsoft
الملفات المرفقة الملفات المرفقة
  • نوع الملف: zip ca.zip‏ (968 بايت, 562 مشاهدات)
  • أعـجـبـك؟ 0
  • لم يعجبك؟ 0
  • azizsoft
  • منضم للمجتمع من: May 2007
  • لديه عدد مشاركات: 169
  • عدد متابعيه:
  • قوة ترشيحه: 5.0

اكتب تعليقك على هذا الموضوع!

رتب التعليقات حسب:
أو اعرض تعليقات هذا الكاتب فقط:
  • Sharbaji:
    • Sharbaji
    • منضم للمجتمع من: Jan 2008
    • لديه عدد مشاركات: 604
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    09-04-2008, 12:07 AM

    مشكور على الموضوع المهم

    لدي اضافة فقط


    هذا فانكشن جاهز يعمل لك الصورة الخاصة بالتحقق

    كود PHP:
    // دالة كتابة رقم الكود الأمني على الصورة
      
    function Imagen($codigo)
      {
        
    $codigo base64_decode($codigo);
        
    $imagen imagecreatefromjpeg("images/codigo.jpg");
        
    $color_texto imagecolorallocate($imagen808080);
        
    header("(anti-spam-content-type:) image/jpeg");
        
    imagestring ($imagen5122$codigo$color_texto);
        
    imagejpeg($imagen''75);
        
    imagedestroy($imagen);
          die();
      }
    // #############################################################################
    // أمر بدأ الكتابة
      
    $op $_GET["op"];
      switch (
    $op)
      {
        case 
    "Imagen":
          
    $codigo $_GET["codigo"];
          
    Imagen($codigo);
        break;
      } 
    وهذا الكود الذي يوضع في النموذج :



    كود PHP:
    <td>Image Code</td>
                <td>
                  <img src="<? $codigo rand(100000999999); $codigo base64_encode($codigo); echo "$PHP_SELF?op=Imagen&codigo=$codigo"?>" alt="Secure Code">
                  <input type="hidden" name="codigo" value="<?= $codigo ?>">
                  <input type="hidden" name="enviado" value="<?= rand(1111111,9999999?>">
                </td>


    وهذه الجملة الخاصة في التحقق من ان الرقم نفس الصورة
    كود PHP:
      if( base64_decode($_POST["codigo"])== $_POST["codigouser"] ) 



    فقط !!

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • الحارث:
    • الحارث
    • منضم للمجتمع من: May 2006
    • لديه عدد مشاركات: 294
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    سبحان الله وبحمده ، سبحان الله العظيم

    09-04-2008, 12:24 AM

    شكرا اخي الكريم على هذا الدرس

    وجعله الله في موازين اعمالك ..

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • مصطفى فرغلى:
    • مصطفى فرغلى
    • منضم للمجتمع من: Jun 2005
    • لديه عدد مشاركات: 427
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    Keepondev | مدونه شديد التخصص فى الجافاسكربت
    جافاسكربت الموجهه بالكائنات | أنماط تصميم جافاسكربت

    09-04-2008, 04:26 PM

    اكثر من رائع ... شكرا لك عزيز سوفت و بارك الله فيك

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • mas123:
    • mas123
    • منضم للمجتمع من: Apr 2008
    • لديه عدد مشاركات: 12
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    09-04-2008, 04:40 PM

    ما شاء الله
    بارك الله فيك أخي الكريم

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • 09-04-2008, 08:57 PM

    شكرأ كثير

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • azizsoft:
    • azizsoft
    • منضم للمجتمع من: May 2007
    • لديه عدد مشاركات: 169
    • عدد متابعيه:
    • قوة ترشيحه: 5.0
    09-04-2008, 11:35 PM

    مشكورين كتير على مروركم و الحمد لله أن الدرس نال اعجابكم

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • Sharbaji:
    • Sharbaji
    • منضم للمجتمع من: Jan 2008
    • لديه عدد مشاركات: 604
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    10-04-2008, 03:53 PM

    العفو يا شباب ...

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • dev11:
    • dev11
    • منضم للمجتمع من: May 2007
    • لديه عدد مشاركات: 613
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    14-04-2008, 02:28 PM

    جميل جداً ..

    لجعل الصورة حروف وأرقام نعمل الآتي ..

    كود PHP:
    $azizsoft_ca substr(md5(time()), 06); 
    لاحظ اننا استخدمنا time() بدلاً من rand() وبذلك نضمن وجود كود جديد مختلف عن غيره في كل عمليه أو بالاحرى في كل ثانية ..

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • azizsoft:
    • azizsoft
    • منضم للمجتمع من: May 2007
    • لديه عدد مشاركات: 169
    • عدد متابعيه:
    • قوة ترشيحه: 5.0
    14-04-2008, 11:42 PM

    أعتقد أن الاكتفاء بالأرقام أفضل حتى لا يضطر المستخدم في كل مرة الى تغير لغة الكتابة
    أما ادا كنت تريد استخدام الحروف الى جانب الأرقام فمن الأفضل استخدام هده الدالة

    كود PHP:
    function rand_string($length

        
    $set = array("-","_","a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z"); 
        
    $str
        for(
    $i 1$i <= $length$i++) 
        { 
            
    $ch rand(0count($set)-1); 
            
    $str .= $set[$ch]; 
        } 
        return 
    $str

    يمكنك تغيير عناصر المصفوفة $set حسب رغبتك

    طريقة الاستخدام
    كود PHP:
    $azizsoft_ca rand_string(4); 
    مع استبدال الرقم 4 بعدد الحروف التي تريد أن يتكون منها الرقم العشوائي

    و شكرا لاغنائك الموضوع

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • AboRa3d:
    • AboRa3d
    • منضم للمجتمع من: Jan 2008
    • لديه عدد مشاركات: 49
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    AboRa3d
    ~][أبـورعــد][~


    كـل مـواضـيـعـي

    16-04-2008, 04:08 PM

    جزاكم الله ألف خير

    هذا ماكنت أبحث عنه

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • عبد الواحد البشيري:

    عدت
    اقتراحاتكم -> www.elbachiri.com

    17-04-2008, 01:59 AM

    درس جميل ومفيد

    يمكن وضع تشويش تحت اﻷرقام والحروف

    الكود

    كود PHP:

    <?php
    $img
    =imagecreatetruecolor(120,40);
    $bg=imagecolorallocate($img,250,50,80);
    $color=imagecolorallocate($img,154,251,23);
    $color2=imagecolorallocate($img,250,20,0);
    $char=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","s","t","u","v","w","x","y","z"
    ,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","S","R","T","U","V","X","Y","Z",1,2,3,4,5,6,7,8,9,0);
    for(
    $i=0;$i<6;$i++)
      {
    $txt=$char[rand(0,count($char)-1)];
    $txt2.=$char[rand(0,count($char)-1)];
    imagestring($img,20,rand(5,80),rand(5,20),$txt,$color);
    }
    imagestring($img,20,40,15,$txt2,$color2);
    header("(anti-spam-content-type:) image/png");
    imagepng($img);

    ?>
    طبعا المتغير هو $txt2
    يمكن حفظه في جلسة ﻻستخدامه التحقق كما في الدرس ...

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • mas123:
    • mas123
    • منضم للمجتمع من: Apr 2008
    • لديه عدد مشاركات: 12
    • عدد متابعيه:
    • قوة ترشيحه: 5.0

    17-04-2008, 03:24 PM

    جزاك الله خيرا أخي عبد الواحد
    ولكن أيهما الأساسي ؟!
    الأحمر أم الأخضر

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • عبد الواحد البشيري:

    عدت
    اقتراحاتكم -> www.elbachiri.com

    17-04-2008, 10:21 PM

    اﻷحمر

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • azizsoft:
    • azizsoft
    • منضم للمجتمع من: May 2007
    • لديه عدد مشاركات: 169
    • عدد متابعيه:
    • قوة ترشيحه: 5.0
    18-04-2008, 11:29 PM

    الأخ عبد الواحد
    شكرا لك على الاضافة الرائعة و شكرا لكل من تفاعل مع الموضوع

    بالنسبة للكود الدي طرحته أخي عبد الواحد فاني أرى أنه من الأفضل أن يكون لون التشويش قريب من لون الخلفية

    و قد قمت بمحاولة أخرى لخلق صورة أكتر تطورا تعتمد على خلفية صورة بدل أرقام انطلاقا من الكود الدي طرحته
    خلفية الصورة تتغير مع كل تحديت و توجد 6 صور مختلفة و يمكن أضافة المزيد

    كود الصورة في المرفقات

    الملفات المرفقة الملفات المرفقة
    • نوع الملف: zip code.zip‏ (12.3 كيلوبايت, 141 مشاهدات)
    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • azizsoft:
    • azizsoft
    • منضم للمجتمع من: May 2007
    • لديه عدد مشاركات: 169
    • عدد متابعيه:
    • قوة ترشيحه: 5.0
    18-04-2008, 11:32 PM

    متال
    http://azizsoft.uni.cc/cod.php

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • menokia:
    • menokia
    • منضم للمجتمع من: Apr 2008
    • لديه عدد مشاركات: 85
    • عدد متابعيه:
    • قوة ترشيحه: 5.0
    20-04-2008, 05:47 AM

    جزاك الله خير


    تحياتي
    نوكيا الشرق الاوسط

    • أعـجـبـك؟ 0
    • لم يعجبك؟ 0
  • صفحة 1 من 2 12 الأخيرةالأخيرة