الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Image Validation With Php ... Give Your Site The Security

بدأه prince_bakora في 29 يونيو 2009 · 2 رد · 1,064 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

بصراحة و انا أبحث وسط دهاليز الانترنت وجدت موضوع جميل

و كنت اظنه صعب و لكني أكتشفت كم هو سهل و فعال كأداة تأمينية مفيدة كثيراً

الموضوع هو نظام الصلاحية عن طريق تأكيد الصورة .. كما يحدث لأي احد عندما يطلب

منه نموذج التسجيل في المنتديات بأن تدخل الأرقام التي تراها في الصورة

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

الطريقة جميلة و سأقوم بشرحها كما فهمت من الموقع الأنجليزي الذي وجدتها عليه

و لكني قمت بإضافة جزء التأكيد بخاصية

Session

و الآن الى الشرح

و هي كالتالي

أولاً يجب ان يكون نسخة البي اتش بي على سيرفرك لا تقل عن الاصدار 4.3.2 ثانياً يجب أن تتأكد أن GD library متاحة و ذلك بعمل أي صفحة و لنقل على سبيل المثال أن تقوم بعمل صفحة باسم test_gd.php و تقوم بادراج بها الكود التالي و هو مصمم لاختبار هل هذه المكتبات متاحة على سيرفرك


<?php
if (function_exists('imagecreate')) {
echo "GD Library is enabled <br>\r\n<pre>";
var_dump(gd_info());
echo "</pre>";
} else {
echo 'Sorry, you need to enable GD library first';
}
?>

ومن ثم بقم بطلب الصفحة عن طريق متصفح الانترنت لديك

فإذا ظهرت لك جملة

GD Library is enabled

فهنيئاً .. المكتبات متاحة

و إذا ظهر لك غير ذلك ... فذلك يعني أن تقوم باتاحة هذه المكتبات عن طريق فتح ملف

php.ini

وابحث عن الجملة

extension=php_gd2.dll

و من ثم ازل علامة الفاصة المنقوطة ( ; ) في أخر السطر

و من ثم لا بد من اعادة تشغيل السيرفر ... لتصبح الخدمة متاحة

نأتي الآن الى الكود

سنقوم بتصميم 3 صفحات ... الأولى تحوي كود توليد الصور .. و الثانية سنعتبرها نظام تسجيلك ( طبعاً يمكنك تعديل الصفحة الثانية كما تريد لأن العبرة فقط ستكون في طريقة جلب الصورة من الصفحة الأولى الى الثانية و تأكيدها بصورة صحيحة ) ... و الآن الى العمل

الصفحة الأولى و ستكون باسم

randomImage.php

و سيكون الكود فيها كالتالي .. و الشرح سيكون موجود داخل الكود


<font size="4"><?php</font>
<font size="4">// نظامنا هنا يستخدم نظام session</font>
<font size="4">//لذلك لا بد من بداية الـ session</font>
<font size="4">session_start();</font>

<font size="4">// نستخدم rand</font>
<font size="4">// لتوليد قيمة عشوائية مكونة من خمسة ارقام ما بين 10000 و 99999</font>
<font size="4">// و تخزينها في متغير</font>
<font size="4">// $rand</font>
<font size="4">$rand = rand(10000, 99999);</font>


<font size="4">$_SESSION['image_random_value'] = $rand;</font>

<font size="4">// صناعة الصورة بمقاس 60*30 بكسل</font>
<font size="4">$image = imagecreate(60, 30);</font>

<font size="4">// الآن نضع خلفية الصورة الى اللون الابيض حيث يساوي </font>
<font size="4">// RGB = 255, 255, 255</font>
<font size="4">$bgColor = imagecolorallocate ($image, 255, 255, 255);</font>

<font size="4">// و نضع هنا لون الخط الى اللون الأسود حيث يساوي</font>
<font size="4">// RGB = 0, 0, 0</font>
<font size="4">$textColor = imagecolorallocate ($image, 0, 0, 0);</font>

<font size="4">// صناعة الصورة بشكلها النهائي بدالة</font>
<font size="4">// imagestring</font>
<font size="4">// و هي تأخذ ستة متغيرات و هم على الترتيب</font>
<font size="4">// الأول يمرر مقاس الصورة أو بالأصح التعامل مع الصورة</font>
<font size="4">// الثاني حجم الخط حيث الأكبر يأخذ القيمة 5 و الأصغر يصل للقيمة 1</font>
<font size="4">// الثالث و الرابع هم احداثيات ظهور النص في الصورة الأفقي و الرأسي</font>
<font size="4">// الخامس خاص بقيمة الرقم العشوائي</font>
<font size="4">// السادس خاص بلون الخط</font>
<font size="4">imagestring ($image, 5, 5, 8, $rand, $textColor);</font>

<font size="4">// الاجزاء التالية بصراحة عاوزة شرح لوحدها .. و لكن اعلم أنها خاصة للتأكد من أن الصورة غير محفوظة من</font>
<font size="4">// قبل لدى جهاز امستخدم أو حتى السيرفر</font>
<font size="4">// send several headers to make sure the image is not cached</font>
<font size="4">// taken directly from the PHP Manual</font>

<font size="4">// Date in the past</font>
<font size="4">header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");</font>

<font size="4">// always modified</font>
<font size="4">header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");</font>

<font size="4">// HTTP/1.1</font>
<font size="4">header("Cache-Control: no-store, no-cache, must-revalidate");</font>
<font size="4">header("Cache-Control: post-check=0, pre-check=0", false);</font>

<font size="4">// HTTP/1.0</font>
<font size="4">header("Pragma: no-cache");</font>

<font size="4">// send the content type header so the image is displayed properly</font>
<font size="4">header('Content-type: image/jpeg');</font>

<font size="4">// و الآن نرسل الصورة الى المتصفح حيث سنستدعيها في صفحة التسجيل</font>
<font size="4">imagejpeg($image);</font>

<font size="4">// بعد ارسالها قم بحذفها لكي لا تستهلك موارد السيرفر بدون داع</font>
<font size="4">imagedestroy($image);</font>
<font size="4">?></font>

<font size="4"><b>
 </b></font>

و الأن ناتي لكود الصفحة الثانية

login.php

و انا لن أركز فيه الا على

النقطة التي تهم فقط الجميع و هي كيفية استحضار الصورة و تأكيدها


<font size="4"><b><html></b></font>
<font size="4"><b><head></b></font>
<font size="4"><b><title>Basic Login</title></b></font>
<font size="4"><b><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></b></font>
<font size="4"><b></head></b></font>
<font size="4"></font>
<font size="4"><b><body></b></font>
<font size="4"><b><?php</b></font>
<font size="4"><b>if ($errorMessage != '') {</b></font>
<font size="4"><b>?></b></font>
<font size="4"><b><p align="center"><strong><font color="#990000"><?php echo $errorMessage; ?></font></strong></p></b></font>
<font size="4"><b><?php</b></font>
<font size="4"><b>}</b></font>
<font size="4"><b>?></b></font>
<font size="4"><b><form action="final.php" method="post" name="frmLogin" id="frmLogin"></b></font>
<font size="4"><b><table width="400" border="1" align="center" cellpadding="2" cellspacing="2"></b></font>
<font size="4"><b><tr></b></font>
<font size="4"><b><td width="208"><input name="image_text" type="text" id="image_text" value=""></b></font>
<font size="4"><b>  <img src="randomImage.php"></td></b></font>
<font size="4"><b><td width="172"><div align="center"><strong>ادخل الرقم</strong> كما بالصورة</div></td></b></font>
<font size="4"><b></tr></b></font>
<font size="4"></font>
<font size="4"><b><tr></b></font>
<font size="4"><b><td colspan="2"><div align="center"></b></font>
<font size="4"><b> <input name="image" type="submit" id="btnLogin" value="Login"></b></font>
<font size="4"><b></div></td></b></font>
<font size="4"><b></tr></b></font>
<font size="4"><b></table></b></font>
<font size="4"><b></form></b></font>
<font size="4"><b></body></b></font>
<font size="4"><b></html></b></font>
<font size="4"></font>
<font size="4"></font>
<font size="4"><b>
 </b></font>

الموضوع لا يحتاج لشرح بالتأكيد .. لكن و للتأكيد .. قمنا بعمل فورم و ادراج به حقل نصي

لادخال الرقم الذي بالصورة و قبل ذلك قمنا بإحضار الصورة من الصفحة

randomImage.php

و اسمينا الحقل النصي الذي سيقوم المستخدم بوضع به الرقم التأكيدي باسم

image_text

و قمنا بتخصيص الفورم الى النوع

method="post"

و

action="final.php"

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

التي بالصورة بالضبط و هذا ما سيأتي في كود الصفحة

final.php

ملحوظة... بالنسبة لهذا الجزء و الخاص أصلاً بموضوع استخدام

$_SESSION

و استخدامه في تخزين القيم و استخدامها في التأكيد

من اجتهادي الشخصي .. ارجو أن يوفقني الله فيه


<font size="4"><?php</font>

<font size="4">session_start();</font>

<font size="4">if ($_POST["image_text"]==$_SESSION['image_random_value'])</font>
<font size="4">{</font>
<font size="4"> echo ("True");</font>
<font size="4">}</font>
<font size="4">else</font>
<font size="4">{</font>
<font size="4"> echo ("False");</font>
<font size="4">}</font>

<font size="4">?></font>

الموضوع بسيط .. أتتذكر في صفحة

randomImage.php

كنت قد استخدمت جملة

$_SESSION['image_random_value'] = $rand;

و هذه خاصة لتخزين قيمة الرقم العشوائي في مصفوفة

_session[]

و كما ترى هنا .. كل الموضوع أنه يتأكد أذا كان القيمة المدخلة مطابقة لما موجود في المصفوفة أم لا

عدل في الكود كما يناسب احتياجاتك بعد ان عرفت الفكرة الأساسية

أرجو ان يكون الله وفقني في الشرح

مرفق الكود الأصلي في ملف مضغوط

أسألكم الدعاء

السلام عليكم و رحمة الله

ImageValidation.zip

تم تعديل هذه المشاركة بواسطة prince_bakora في 29 يونيو 2009 في 08:39

#2

ما شاء الله عليك وشكرا للملف المرفق وللمعلومات القيمة التي ادرجتها

cert.gif

___________________

فليتك تحلو والحياة مريرة - وليتك ترضى والأنام غضـــاب

وليت الذي بيني وبينك عامر - وبيني وبين العالمين خـراب

اذا صح منك الود فالكل هين - وكل الذي فوق التراب تـــراب

____________________

سبحانك اللهم وبحمدك اشهد ان لا اله الا انت استغفرك واتوب اليك

#3

ممتاز جدا اخي ، مشكور ،،،، دمت للمنتدى

FineDesign For Graphic and WebDesign

ForEach(Minute in MyLife)

MyExperience ++;

مواضيع مشابهة