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

تأمين المدخلات قبل ادخالها لفاعدة بيانات MySQL

بدأه SamDev في 9 أغسطس 2010 · 1 رد · 3,057 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

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

و للتوضيح بشكل اكبر ، نفرض ان لدينا قاعدة بيانات باسم myDataBase ، و بها جدول اسمه members هذا الجدول على الشكل التالى :

screenshot1oy.png

و كان سكريبت الـ PHP عبارة عن :

<?php
	$username = "ahmed";
	$password = "5555555";
	$query = "SELECT * from members where username = '$username' and password = '$password'";
	echo $query;
?>

هذا السكريبت يعرض لنا نص الاستعلام لنرى ما سيحدث بقواعد البيانات فعند تنفيذه سنجد انه يعرض لنا الاستعلام

SELECT * from members where username = 'ahmed' and password = '5555555'

حتى الان الاستعلام صحيح و ليس به مشاكل و لكن ماذا اذا ادخل الزائر مكان الباسورد

' OR username = 'admin

سيكون الاستعلام :

SELECT * from members where username = 'ahmed' and password = '' OR username = 'admin'

اى سيتم تحديد صف الأدمين و هذا ما لا نريد حدوثه ، و لتفادى مثل هذه الاخطاء سنكتب دالة بسيطة تساعدنا فى هذا و سيكون كودها النهائى :

function mysql_safe($var = false,$rejected = '') {
	if(!$var) {
		$_POST = array_map('mysql_real_escape_string',$_POST);
		$_GET = array_map('mysql_real_escape_string',$_GET);
	} else {
		if(is_array($var)) {
		array_map('mysql_real_escape_string',$var);
		} else {
			$var = mysql_real_escape_string($var);
			$var = addcslashes($var,$rejected); 
		}
	return $var;
	}
}

فى البداية انشأنا دالة تحمل 2 باراميتر

الاول و هو المدخلات المراد تأمينها و اعطيناله القيمة الافتراضية FALSE لجعله باراميتر فاذا اعطينا له قيمة عند استخدام الدالة ستيتم تأمين هذه القيمة و اذا لم يعطى له قيمة سيتم تأمين المصفوفتين POST , GET

الثانى و هو الحروف او الرموز التى نريد اضافة \ لها حتى لا يتم تنفيذها كأمر و اعطيناها القيمة الافتراضية الفارغة

function mysql_safe($var = false,$rejected = '') {

}

ثم فحصنا ما إذا كان الباراميتر الاول له القيمة FALSE ( اى لم ندخل اى قيمة اخرى ) و فى حالة تحقق الشرط يتم تأمين المصفوفتين POST, GET عن طريق دالة mysql_real_escape_string ولانهم مصفوفتين فاستخدمنا الدالة array_map لتطبيق الداله mysql_real_escape_string على جميع القيم الموجودة بالمصفوفتين

function mysql_safe($var = false,$rejected = '') {
	if(!$var) {
		$_POST = array_map('mysql_real_escape_string',$_POST);
		$_GET = array_map('mysql_real_escape_string',$_GET);
	}
}

و فى حالة عدم تحقق الشرط ، فالان نفترض اننا ادخلنا للدالة متغير يحمل القيمة المراد تأمينها و زيادة فى المرونة افترضنا ان تكون ام مصفوفة او متغير طبيعى وتأكدنا من ذلك باستخدام الجملة الشرطية مع is_array و فى حالة تحقق الشرط نطبق mysql_real_escape_string باستخدام array_map , و فى حالة عدم تحقق الشرط نطبق الدالة mysql_real_escape_string مباشرة على المتغير ، ثم نرجع قيمة المتغير

function mysql_safe($var = false,$rejected = '') {
	if(!$var) {
		$_POST = array_map('mysql_real_escape_string',$_POST);
		$_GET = array_map('mysql_real_escape_string',$_GET);
	} else {
		if(is_array($var)) {
		array_map('mysql_real_escape_string',$var);
		} else {
			$var = mysql_real_escape_string($var);
			$var = addcslashes($var,$rejected); 
		}
	return $var;
	}
}

ملحوظة /

- يمكن استخدام mysql_real_escape_string فقط اذا كان هنك اتصال بين السيرفر و قاعدة البيانات

- هذه الدالة ضمن كلاس بسكريبت مفتوح المصدر اكتبه ، و مازال تحت البناء فيمكن ان يحوى بعض الاخطاء ، للتحميل بالمرفقات :)

ارجو ان يكون قد وفقتى الله فى هذا الموضوع

database.class.php

I don't care how you code , i have my own style and i like it

#2

السلام عليكم

ارجو من الادراة حذف الموضوع اذا كان مكرر او غير مفيد

ورمضان كريم :)

I don't care how you code , i have my own style and i like it

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…