السلآم عليكم ..!
اليوم قلت أشرح لكم درس مهم من دروس الحماية وهو نظام الـ captcha أو المعروف بالتحقق البشري !
عبارة عن نظام يكون رقم عشوائي على صورة ويتحقق من إدخال ما بداخل الصورة من أحرف وأرقام ~
الشرح رآح يكون عالسريع :nosweat:
أولآ لنقوم بعمل فورم لإدخال البيانات "index.php" :
رمز PHP:
Captcha
كما تشاهدون في الملف أكواد جافا + كود إستدعاء لملف أجاكس :bigsmile:
إن وجدت مسافات قم بحذفها :cupidarrow:
الآن العمل الجدي ومهو ملف "create_image.php" والذي يقوم بتوليد الصورة الخاصة بالتحقق :
رمز PHP:
أولآ الملف بدأناه بـ جلسة جديدة لكي يكون التحقق بالكوكيز أي الجلسات :bigsmile:
وقمت بعمل دالة تقوم بعمل رمز عشوائي ومكون من حروف وأرقام + لم أضف حرف الـ "o" لكي لآ يكون هناك أغلاط أو تشابه مع رقم الـ "0" الصفر !
هناك أيضا الطريقة التقليدية وهي تكوين الرمز بإستعمال تشفير الـ "MD5" ولكي تقوم باستمالها فقط أزل "//" قبلها كالتالي :
رمز PHP:
وأيضا يجب إزالة "//" من امام المتغير "security_code" لصبح كالتاالي :
رمز PHP:
// $security_code = substr($md5_hash, 15, 8);
$security_code = substr($activatecode, 15, 8);
وفي البداية قلت رآح نتحقق عبر نظام الجلسات وهنا كود يوضح كلآمي :
رمز PHP:
في الكود السابق جعلنا الرمز العشوائي في الجلسة المسماه بإسم "security_code"
وأيضا هناك كود عمل الصورة !
وأيضا بنها كود قمت بحجبه وهو كود لعمل خطوط على الأحرف ليكون التأكد أقوى ولآ أرى أن له لزمة ولتفعيها هذا نقوم بإزالة "//" من كل سطر كالتالي :
رمز PHP:
الآن النظام كآمل والكمآل لله وحده !
نأتي لطريقة التأكد في الصفحات المراد حمايتها ولتكن باسم "captcha" :
رمز PHP:
كما هو وآضح قمنا بعمل جلسة جديدة !
وتحققنا إن كان طلب الصفحة كان عبر "POST" وليس "GET" بهذا الكود :
رمز PHP:
الآن نقوم بالتحقق إن كان تم إدخال الرموز في الحقل المخصص وهذا المدخل يساوي الجلسة المخصصة التي قمنا بها !
وأيضا إن كان الحقلآن غير فارغان وأقصد بهما حقل الجلسة وحقل الرمز للتحقق !!
وهذا هو الكود :
رمز PHP:
الآن قمنا بعمل كود التحقق وإن تم تحقق الشرط إطبع التالي :
رمز PHP:
وإن لم تتحقق الشروط إطبع التالي :
رمز PHP:
جميل الآن إنتهينا من كل شي تقريبا وبقي ملفات الجافا !
طبعا لن أقوم بشرحها ولآكن طريقة عملها تقوم بجلب صفحة التحقق والصورة بعد كل تحقق :nosweat:
الملف "ajax_captcha.js" :
رمز PHP:
قم بحفظة في نفس المجلد !
الآن قم بإستعرآض الملف "index.php" وأخبرني برأيك في نظام التحقق :bigsmile:
مهم يوجد مسافات ببعض الكلمات والسبب يعود للفلترة في الموقع وقريبا سوف أقوم بإلغائها لنعطي المجآل للمبرمجين :d
الاكواد شبه منقولة .. أتمنى حفظ الحقوق عند النشر !
HaNniBaL KsA
www.r00t-s3c.com
اليوم قلت أشرح لكم درس مهم من دروس الحماية وهو نظام الـ captcha أو المعروف بالتحقق البشري !
عبارة عن نظام يكون رقم عشوائي على صورة ويتحقق من إدخال ما بداخل الصورة من أحرف وأرقام ~
الشرح رآح يكون عالسريع :nosweat:
أولآ لنقوم بعمل فورم لإدخال البيانات "index.php" :
رمز PHP:
Captcha
كما تشاهدون في الملف أكواد جافا + كود إستدعاء لملف أجاكس :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);
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");
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"]) )
(!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);
}
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