المشاركة الأصلية كتبت بواسطة أصيل2005
أخواني هل من تفصيل اكثر حول استخدام هذه الدالة وماهو الفرق بينها وبين htmlspecialchars وبين intval فانا مبتدئ واخشى من استغلال مثل هذه الثغرات في أعمالي .
عزيزي أصيل2005 ،
htmlspecialchars تقوم بتحويل اشارات [ رموز ] الـ HTML إلى رموز غير قابلة للتنفيذ .. مثل < و > فأنها تصبح > و < حتى لا يتم تنفيذ كود HTML والذي يخشى عند تنفيذه تنفيذ اكواد جافاسكربت لسرقة الكوكيز او ما شابه ..
جرب مثلاً هذا الكود :
كود PHP:
echo "<font size='2'>يتم تنفيذ كود HTML</font>";
ولاحظ انه يتم تنفيذ كود الـ HTML ويتم تغيير حجم الخط .. اما لو جربت هذا الاخر:
كود PHP:
echo htmlspecialchars("<font size='2'>يتم تنفيذ كود HTML</font>");
لاحظ أنه تم طباعة الكود نفسه ولم يتم تنفيذه .. وهذا ما يقوم بحماية الصفحة من تنفيذ كود HTML والذي يتضمن JavaScript ......
للمزيد : http://www.php.net/htmlspecialchars
بالنسبة لـ intval فهي تقوم بتحويل المتغير الذي يتم تمريره إليها إلى قيمة عدد صحيح integer.. هذه تستخدم في حالة أنك تريد تمرير رقم فقط في متغير ، فلو تم تمرير أي نص هذه الدالة تغير المحتوى إلى رقم 0 .. وهكذا تضمن في حالة رغبتك بالحصول على رقم عدم وجود أي نص أو كود برمجي يتم تنفيذه خلال صفحاتك من الخارج .. بعكس الاولى التي نستخدمها لحالة منع تنفيذ النص مع الرغبة بالحصول على نص وليس رقم ..
مثلاً :
كود PHP:
echo intval(55);
تطبع 55 .. لكن :
كود PHP:
echo intval("متغير نصي");
فإنها تطبع القيمة الصحيحة 0 ......
للمزيد: http://www.php.net/intval
بالنسبة لـ addslashes فإنها تقوم بإضافة [ شرطة ] مائلة قبل الاشارات الغريبة في المتغير، مثل علامات التنصيص ' و " .. والهدف عادة منع اضافة او تغيير شيء في استعلامات SQL التي يتم تنفيذها عن طريق الكود البرمجي خلال صفحة PHP ..
مثال:
كود PHP:
echo "اهلاً 'بكم جميعاً'";
سيتم طباعة : اهلاً 'بكم جميعاً'
بصورة طبيعية .. لكن ، لو قمنا بتنفيذ الكود التالي:
كود PHP:
echo addslashes("اهلاً 'بكم جميعاً'");
فإنه سيتم طباعة:
اهلاً \' بكم جميعاً \'
للمزيد : http://www.php.net/addslashes
والدالة العكسية لها هي stripslashes كما ذكرت في ردي السابق ، يمكن من خلالها حذف تلك " الشرطات " المائلة .. وذلك عند استخراج النتائج من القاعدة بعد ادخالها ..
كود PHP:
echo stripslashes("اهلاً \'بكم جميعا\'");
لاحظ أنه سيتم طباعتها دون الشرطات المائلة ..
ملاحظة : للتأكد من انها دالة عكسية لها ، يمكنك تنفيذ الكود التالي:
كود PHP:
echo stripslashes(addslashes("اهلاً 'بكم جميعاً'"));
مع ملاحظة أنه سيتم طباعة الجملة كما هي .. لانه تم تنفيذ دالة اضافة الشرطات addslashes ثم تم تنفيذ الدالة العكسية لها وحذف الشرطات المائلة stripslashes ..
للمزيد عن stripslashes : http://www.php.net/stripslashes
مع العلم بأن هناك دوال احرى تقوم بنفس العمل ونفس الغايات ، ومنها mysql_real_escape_string التي تعمل عمل مشابه لـ addslashes لكنها مخصصة لاستعلامات MySQL ...
اذا واجهت مشاكل في هذه الدوال مع قواعد بيانات Access او MSSQL .. فإني أود أن أذكر هذه الدالة التي ذكرت في php.net والتي قد تحل المشكلة .. [ للفائدة ] :
كود PHP:
function addslashes_mssql($str){
if (is_array($str)) {
foreach($str AS $id => $value) {
$str[$id] = addslashes_mssql($value);
}
} else {
$str = str_replace("'", "''", $str);
}
return $str;
}
function stripslashes_mssql($str){
if (is_array($str)) {
foreach($str AS $id => $value) {
$str[$id] = stripslashes_mssql($value);
}
} else {
$str = str_replace("''", "'", $str);
}
return $str;
}
أعتذر عن التقصير في الشرح .. وأنتظر قراءتك للرد عزيزي أصيل2005 .. وأي استفسار اخوانك في سوالف جاهزين كلنا ان شاء الله تعالى ..
تحياتي، sBForum