هذه بعض النقاط التي يجب أن توضع في الاعتبار للحصول على نظام تسجيل دخول أكثر أمنا من المعتاد :
1-التحقق من صحة صيغة المدخلات عن طريق ادوات التحقق validator web controls مثل طول كلمة المرور أو وجود العلامة @ اذا كان تسجيل الدخول باسم بريد المستخدم .
2-حفظ أسماء المستخدمين وكلمات مرورهم داخل قاعدة البيانات وليس داخل الكود أو داخل ملف الweb.config فيجب الوضع في الاعتبار أن عدد المستخدمين سيتم زيادته لاحقاً (في أغلب التطبيقات) .
3-يفضل حفظ كلمة المرور مشفرة داخل قاعدة البيانات حتى لا يتمكن مسئول قاعدة البيانات من الإطلاع على كلمات مرور المستخدمين وكذلك اذا ما قام أي مخترق بالوصول الى كلمة المرور يفاجأ بها مشفرة .
4-عند أختبار صحة كلمة المرور المشفرة لا تقم باسترجاع كلمة المرور من قاعدة البيانات ومن ثم تقوم بفك تشفيرها بل قم بتشفير كلمة المرور المدخلة من قبل المستخدم لتقوم بمقارنة مشفرين مع بعضهما بحيث اذا قام أي مخترق بمحاولة تعقب كلمة المرور يفاجأ بعدم وجود أي عملية لفك التشفير فقط تشفير في اتجاه واحد .
5-قم بالتاكد من أن اسم المستخدم أو كلمة المرور ليست جمله sql (أو ما يعرف بحقنة Sql) لان المخترق قد يلجأ الى حيل كهذه وذلك بتمرير جملة sql تنتهي بالتعليق ليعطل باقي السطر مثل أن يقوم بكتابة 1 ) or 1 = 1 -- في خانة اسم المستخدم وبالتالي اذا كانت جملة التحقق لديك بالشكل :
Select * from tblUsers where (Username = ' + @UserName + ' and Password = ' + @password + ' ) '
فان الجملة ستمرر وتنفذ بالشكل التالي :
Select * from tblUsers where (UserName = 1) or 1 = 1 - - and Password = zxdhrubn646er5) '
وبالتالي لن يتم اختبار صحة كلمة المرور من عدمه وتمكن المحتال من الدخول والعبث مثلما شاء , وكذلك يفضل استخدم جملة sql أكثر تعقيدا من السابقة لمضاعفة الأمان لتطبيقك .
6-لا تقم أبداً باعطاء المستخدم اتصالاً مباشراً مع قاعدة البيانات ولكن اجعل اتصاله مع business logic وفئات Classes تقوم بعملية الاتصال هذا .
7-اذا كنت تخطط لوضع امكانية تسجيل الدخول في كل الصفحات فقم بتصميم صفحة تسجيل الدخول كـUser Control لكي لا تقوم بتنفيذ الكود وكتابته أكثر من مرة وبالتلي تقوم بالتعديل في كل الصفحات اذا اضطررت للتعديل وكذلك لتكون صفحاتك أسهل قراءة وسهلة الادارة والتعديل .
8-أخيراً لا تعطي معلومات كثيرة للمستخدم في حالة فشل الاتصال مثلاً لا تقوم بتحديد الخطأ له مثل أن تكون النتيجة (خطأ في كلمة المرور حاول مرة أخرى)أو أن تبلغه أن أقل طول لكلمة المرور هو 6 مثلاً .. لا بل أجعل الرسالة أكثر تظليلاً مثل أن تكون (خطأ في كلمة المرور أو اسم المستخدم حاول مرة أخرى) .
برمجة سعيدة .
