حمايه لوحه التحكم

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

هنتعرف اليوم علي كيفيه حمايه لوحه التحكم بدون إستخدام أي داله لحمايه المدخلات من SQL injection لكن الأول نعرف المشكله

لو عندنا لوحه تحكم بسيطه ولانريد لأي أحد الدخول لها إلا مدير الموقع مثلاً هانعمل جدول بسيط أسمه admin مثلاً في ثلاث حقول هم id و name و password وهانعمل فورم بسيط HTML لإدخال المعلومات اللي هي الأسم وكلمه المرور

طبعاً موضوعنا ليس الفورم ولكن صفحه معالجه البيانات الأتيه منه 

غالباً ماتكون بالشكل التالي

<?php
$name = $_GET&#91;'name'&#93;;
$password = $_GET&#91;'password'&#93;;

$sql = "SELECT * FROM admin WHERE name='" .$name. " and password='" . $password."'";
if (mysql_num_rows(mysql_query($sql)) > 0) {
	 // Redirect to controll panel
}

die('خطأ في تسجيل الدخول');
?>

طبعاً تستطيع إسخدام أي داله لعد النتائج أو أستخراج النتائج لكن أين المشكله ؟ المشكله هو لو قام أحد الصبيه بإدخال المعلومات التاليه في الفورم
الأسم : heacker
كلمه المرور : pass’ or 1=1
فيصبح شكل الأستعلام كالتالي

SELECT * FROM admin WHERE name='hacker' and password='pass' or 1=1

طبعا سوف يدخله الأسكربت بكل سرور إلي لوحه التحكم وبعد تكرار هذه الحالات تنتشرالسمعه بأن لغه PHP ضعيفه من الناحيه الأمنيه 
إذن سأثبت لك أنك تستطيع حمايه لوحه التحكم بدون إستخدام ولا داله للحمايه سواء مبنيه في داخل PHP أو أحد الدوال الموجوده في أي Framework
غير الكود للشكل التالي

<?php
$name = $_GET&#91;'name'&#93;;
$password = $_GET&#91;'password'&#93;;

$sql = 'SELECT * FROM admin WHERE name='.$name;
$result = mysql_query($sql);
if (mysql_num_rows($result)) > 0) {
	while($row = mysql_fetch_assoc($result)) {
		if ($row['password'] === $password) {
			 // Redirect to controll panel
		}
	}

}
?>

ماذا لو أدخل الصبي نفس البيانات السابقه أو أي أكواد أخري ؟ ببساطه لن يستطيع الدخول لماذا ؟ لأن المقارنه أصبحت تتم علي مستوي لغه البرمجه وليس علي مستوي قاعده البيانات
لكن ماذا لو أراد أدخال إستعلامات أخري لقاعده البيانات ؟ علي الرغم من أن mysql_query لا تدعم الأستعلامات المتعدده نريد أن نمنعه  من مجرد إحتمال إدخال أي شئ لقاعده البيانات
غير الكود للشكل التالي :

<?php
$name = $_GET&#91;'name'&#93;;
$password = $_GET&#91;'password'&#93;;

$sql = 'SELECT * FROM admin';
$result = mysql_query($sql);
if (mysql_num_rows($result)) > 0) {
	while($row = mysql_fetch_assoc($result)) {
		if ($row['password'] === $password && $row['name'] === $name) {
			 // Redirect to controll panel
		}
	}
}

die('خطأ في تسجيل الدخول');
?>

إذن سوف لن يحلم بمجرد وجود فرصه لإدخال أيه أكواد للوحه التحكم

طبعاً في هذا الدرس لا أنصحك بعدم إستخدام دوال لتنظيف المدخلات ولكن الفكره أن المهم هو المبرمج وليس اللغه

Advertisements