أهلا وسهلا بك زائرنا الكريم في JO1R FORUM | منتديات شباب و صبايا الأردن، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .

< درس > برمجة نظام captcha "التحقق البشري!"

السلآم عليكم ..! اليوم قلت أشرح لكم درس مهم من دروس الحماية وهو نظام الـ captcha أو المعروف بالتحقق البشري ! عبارة عن نظام يكون رقم عشوائي على صورة و



10-01-2012 12:00 مساءً
معلومات الكاتب ▼
تاريخ الإنضمام : 16-07-2007
رقم العضوية : 46
المشاركات : 1,315
الجنس :
قوة السمعة : 429,537,324
السلآم عليكم ..!

اليوم قلت أشرح لكم درس مهم من دروس الحماية وهو نظام الـ captcha أو المعروف بالتحقق البشري !

عبارة عن نظام يكون رقم عشوائي على صورة ويتحقق من إدخال ما بداخل الصورة من أحرف وأرقام ~

الشرح رآح يكون عالسريع :nosweat:

أولآ لنقوم بعمل فورم لإدخال البيانات "index.php" :

رمز PHP:






Captcha









&
nbsp;









&
nbsp;


كما تشاهدون في الملف أكواد جافا + كود إستدعاء لملف أجاكس :bigsmile:

إن وجدت مسافات قم بحذفها :cupidarrow:

الآن العمل الجدي ومهو ملف "create_image.php" والذي يقوم بتوليد الصورة الخاصة بالتحقق :

رمز PHP:

أولآ الملف بدأناه بـ جلسة جديدة لكي يكون التحقق بالكوكيز أي الجلسات :bigsmile:

وقمت بعمل دالة تقوم بعمل رمز عشوائي ومكون من حروف وأرقام + لم أضف حرف الـ "o" لكي لآ يكون هناك أغلاط أو تشابه مع رقم الـ "0" الصفر !

هناك أيضا الطريقة التقليدية وهي تكوين الرمز بإستعمال تشفير الـ "MD5" ولكي تقوم باستمالها فقط أزل "//" قبلها كالتالي :

رمز PHP:
$md5_hash = md5(rand(0,999));

وأيضا يجب إزالة "//" من امام المتغير "security_code" لصبح كالتاالي :
رمز PHP:

// $security_code = substr($md5_hash, 15, 8);
$security_code = substr($activatecode, 15, 8);

وفي البداية قلت رآح نتحقق عبر نظام الجلسات وهنا كود يوضح كلآمي :

رمز PHP:
$_SESSION["security_code"] = $security_code;

في الكود السابق جعلنا الرمز العشوائي في الجلسة المسماه بإسم "security_code"

وأيضا هناك كود عمل الصورة !

وأيضا بنها كود قمت بحجبه وهو كود لعمل خطوط على الأحرف ليكون التأكد أقوى ولآ أرى أن له لزمة ولتفعيها هذا نقوم بإزالة "//" من كل سطر كالتالي :

رمز PHP:
ImageRectangle($image,0,0,$widt h-1,$height-1,$grey);
imageline($image, 0, $height/2, $widt h, $height/2, $grey);
imageline($image, $widt h/2, 0, $widt h/2, $height, $grey);

الآن النظام كآمل والكمآل لله وحده !

نأتي لطريقة التأكد في الصفحات المراد حمايتها ولتكن باسم "captcha" :

رمز PHP:


كما هو وآضح قمنا بعمل جلسة جديدة !

وتحققنا إن كان طلب الصفحة كان عبر "POST" وليس "GET" بهذا الكود :

رمز PHP:
if ($_SERVER["REQUEST_METHOD"] "POST")
die(
"You can only reach this page by posting from the html form");

الآن نقوم بالتحقق إن كان تم إدخال الرموز في الحقل المخصص وهذا المدخل يساوي الجلسة المخصصة التي قمنا بها !
وأيضا إن كان الحقلآن غير فارغان وأقصد بهما حقل الجلسة وحقل الرمز للتحقق !!

وهذا هو الكود :

رمز PHP:
if ( ($_REQUEST["txtCaptcha"] == $_SESSION["security_code"];) &&
(!empty(
$_REQUEST["txtCaptcha"];) && !empty($_SESSION["security_code"];)) )


الآن قمنا بعمل كود التحقق وإن تم تحقق الشرط إطبع التالي :

رمز PHP:
Test successful!

وإن لم تتحقق الشروط إطبع التالي :

رمز PHP:
Test failed! Try again!

جميل الآن إنتهينا من كل شي تقريبا وبقي ملفات الجافا !

طبعا لن أقوم بشرحها ولآكن طريقة عملها تقوم بجلب صفحة التحقق والصورة بعد كل تحقق :nosweat:

الملف "ajax_captcha.js" :

رمز PHP:
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
if (
windo w.XMLHttpRequest) {
return new
XMLHttpRequest(); //Mozilla, Safari ...
} else if (windo w.ActiveXObject) {
return new
ActiveXObject("Microsoft.XMLHTTP"); //IE
} else {
//Display our error message
ale rt("Your browser doesnt support the XmlHttpRequest object.");
}
}
//Our XmlHttpRequest object
var receiveReq = getXmlHttpRequestObject();
//Initiate the AJAX request
function makeRequest(url, param) {
//If our readystate is either not started or finished, initiate a new request
if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
//Set up the connection to captcha_test.html. True sets the request to asyncronous(default)
receiveReq.open("POST", url, true);
//Set the function that will be called when the XmlHttpRequest objects state changes
receiveReq.onreadystatechange = updatePage;

//Add HTTP headers to the request
receiveReq.setRequestHeader("Conten t-type", "application/x-www-form-urlencoded");
receiveReq.setRequestHeader("Conten t-length", param.length);
receiveReq.setRequestHeader("Connection", "close");

//Make the request
receiveReq.send(param);
}
}
//Called every time our XmlHttpRequest objects state changes
function updatePage() {
//Check if our response is ready
if (receiveReq.readyState == 4) {
//Set the conten t of the DIV element with the response text
documen t.getElementById(result).innerHTML = receiveReq.responseText;
//Get a reference to CAPTCHA image
img = documen t.getElementById(imgCaptcha);
//Change the image
img.src = create_image.php? + Math.random();
}
}

//Called every time when form is perfomed
function getParam(theForm) {
//Set the URL
var url = captcha.php;
//Set up the parameters of our AJAX call
var postStr = theForm.txtCaptcha.nam e + "=" + encodeURIComponent( theForm.txtCaptcha.value );
//Call the function that initiate the AJAX request
makeRequest(url, postStr);
}

قم بحفظة في نفس المجلد !

الآن قم بإستعرآض الملف "index.php" وأخبرني برأيك في نظام التحقق :bigsmile:

مهم يوجد مسافات ببعض الكلمات والسبب يعود للفلترة في الموقع وقريبا سوف أقوم بإلغائها لنعطي المجآل للمبرمجين :d

الاكواد شبه منقولة .. أتمنى حفظ الحقوق عند النشر !


HaNniBaL KsA
www.r00t-s3c.com
توقيع :OMRAN
ohgod

اضافة رد جديد اضافة موضوع جديد



المواضيع المتشابهه
عنوان الموضوع الكاتب الردود الزوار آخر رد
[ درس ] برمجة نظام معاينة مواضيع بإستخدام jQuery (بسيط ، إحترافي) مثال بالداخل OMRAN
0 199 OMRAN
[ فيديو ] برمجة نظام تسجيل متطور - الجزء الرابع بالفيديو OMRAN
1 292 OMRAN

الكلمات الدلالية
لا يوجد كلمات دلالية ..









الساعة الآن 02:05 AM