أخطاء المبرمجين الأمنية فى PHP, الدرس الثالث (3)

Spread the love
 أخطاء المبرمجين الأمنية فى PHP, الدرس الثالث (3)  أضيف في: 12-5-1427هـ
أخطاء المبرمجين الأمنية فى PHP, الدرس الثالث (3)


5- تابع أخطاء جمل إستعلام SQL
لنفترض أن جملة الإستعلام التى تستخدمها فى برنامجك للتأكد من إسم المستخدم و كلمة المرور كالآتى:

CODE


$stmnt = SELECT login_id FROM users WHERE user = ‘” .
$_POST[“username”] . “‘ AND password = ‘” . $_POST[“password”];

لنفترض أيضاً أن المستخدم أدخل (#) بدلاً من كلمة المرور أى أن جملة الإستعلام أصبحت كالتالى:

CODE


SELECT login_id FROM users WHERE user = ‘hani’; #’ AND password = ”

بمعنى أنه إستطاع تحويل باقى جملة الإستعلام إلى تعليق بإستخدام الرمز (#) و من ثم أصبحت كلمة المرور خالية!!
إذن كل ما استخدمه المهاجم هو إسم مستخدم مسجل فى قاعدة البيانات و بالتالى إستخدم الرمز (#) لقصر جملة الإستعلام عند الرمز (#) الذى أصبح ما بعده (بقية جملة الإستعلام) عبارة عن تعليق و الحل ذكرناه مسبقاً بإستخدام addslashes().

6- إستكمالاً لما سبق عن أهمية تشفير كلمات المرور ، بى اتش بى تدعم تلقائياً دوال SHA-1 و أيضاً MD5 الذى تم تطويره فى التسعينيات و لكنه يدعم تشفير حتى 128-bit فقط ، مع العلم أن SHA-1 يدعم حتى 160-bit و سوف نستخدمه كمثال:

CODE


$insertSql .= “‘” . sha1($_POST[“password1”]) . “, “;

ربما تستغرب أننا لم نستخدم addslashes() كما أشرنا سابقاً و لكن لذلك سبب وجيه و هو أن SHA-1 تستخدم فقط الأرقام الستعشرية (Hexadecimal) أى (0 – 9 و A – F) بمعنى آخر الدالة لا تستخدم أى من الحروف الخطرة فى جمل الإستعلام مثل (‘).

بإمكانك التحقق من كلمتين المرور المشفرتين (المدخلة من قبل المستخدم ، و الموجودة مسبقاً فى قاعدة البيانات بإستخدام مثلاً:

CODE


$loginQuery .= ” password = ‘”. sha1($_POST[“password”]) . “‘”;

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

الكاتب: هاني جمال

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة