تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION)
#1
السلام عليكم اخواني Smile

قبل وضع استفساري سأقوم بتعريف بسيط عن كيفيه أختراق البرنامج من خلال جمل الاستعلام ( SQL INJECTION)
حتي يستفاد من ليس لديه معرفه بهذا الموضوع المهم
مثلا لو كتبت جمله استعلام بسيطه بهذا الشكل
كود :
SELECT * FROM users WHERE name = ' + userName + '
يمكن لمستخدم برنامجك حقن جمله الاستعلام بكل سهوله فكل ما عليه ان يكتب بدلا من الاسم
كود :
a' or 't'='t
فتصبح جمله الاستعلام بعد ادخال القيمه من المستخدم بهذا الشكل
كود :
SELECT * FROM users WHERE name = 'a' OR 't'='t'
وللمزيد عن هذا الموضوع اطلع علي wikipedia

طبعا يمكن تفادي هذه المشكله اما بأستخدام الاجراءات المخزنه(Stored procedure) او استخدام البارمترات ( parameters )

الي هنا سنبدأ في النقاش فرضا انني استخدم قاعده بيانات اكسس وبالتالي سنفقد امكانيه استخدام الاجراء المخزن (Stored procedure)
لم يتبقي لي الاطريقه البارمترات ( parameters )

فرضا انني احببت الاستفاده من oop لعمل فانكشن للحذف والاضافه والتعديل يمكن استخدامها في جميع برامجي
وقمت بأنشاء كلاس وكتبت به الداله
كود :
Public Function pross(ByVal sql As String) As Boolean
        cmd.Connection =cn
        cmd.CommandType = CommandType.Text
        cmd.CommandText = sql
        connect.opendb()
        Try
            cmd.ExecuteNonQuery()
            connect.closedb()
            Return True
        Catch ex As Exception
            connect.closedb()
            MsgBox(ex.Message)
            Return False

        End Try
    End Function

وهكذا يمكن تنفيذ الحذف اوالاضافه اوالتعديل بكود بسيط
كود :
Dim p As New Class1
        Dim sql As String
        sql = String.Format("insert into tb values({0} ,'{1}' ,'{2}')", TextBox1.Text, TextBox2.Text, TextBox3.Text)
        If p.pross(sql) = True Then
            MsgBox("done", MsgBoxStyle.Information, "INS")
        End If

ولكن هنا نعود من جديد الي مشكله ( SQL INJECTION) حيث يفقد البرنامج حمايته ويمكن اختراقه

اعتذر عن الاطاله ولكن لها ضروره في هذا الموضوع المهم

ما هي الاقتراحات حتي نجمع بين oop وحمايه جمل الاستعلام من الحقن ؟؟؟
الرد }}}}
تم الشكر بواسطة:
#2
ليست هكذا تستخدم oop فأنت تتعامل علي أن كل كلاس خاص بنفسه عموما لي مثال سوف ارفعه لتوضيح الأمر
الرد }}}}
تم الشكر بواسطة:
#3
هذا هو المثال

http://vb4arb.com/vb/uploaded/43_01348539162.zip
الرد }}}}
تم الشكر بواسطة:
#4
شكرا لك اخي amgadtamer علي اثراء الموضوع بمعلوماتك القيمه
بارك الله فيك ...

يااخي ما ابحث عنه هو عمل مكتبه dll بها الاكواد الخاصه بالتعامل مع قواعد البيانات
حتي اوفر علي نفسي اعاده الاكواد في كل برنامج اصنعه ..

لا يوجد لدي مشكله في استخدام الطبقات ( N_Tier)
ولكن اكون مضطر لأعاده البرمجه من جديد مع كل برنامج وتحويل كل حقل الي خاصيه (Property) وهكذا

سأوضح لك الامر اكثر
مثلا لدي جدولين في قاعده البيانات الجدول الاول مكون من 3 حقول
والجدول الثاني مكون من 5 حقول واريد ان اكتب اجراء واحد للأضافه يمكن استخدامه مع الجدولين
سنواجه هنا مشكله اختلاف عدد البارمترات ( parameters ) بين الجدولين
ولكن بالطريقه الخاصه بي الموجوده في الاعلي يمكن عمل هذا ولكن الطريقه ضعيفه Sad
... هل يوجد طريقه او حل لهذه المشكله ???
الرد }}}}
تم الشكر بواسطة:
#5
السلام عليكم

اخي العزيز استخدمSqlCommandBuilder  لتفادي مشكلة الباراميترات حيث يقوم هذا الامر بعمل أوامر update,delete,insert تلقائي خاص لكل جدول

انظر الى هذه الروابط
http://www.dotnetperls.com/sqlcommandbuilder
http://www.java2s.com/Code/CSharp/Data**...uilder.htm
http://msdn.microsoft.com/en-us/library/...ilder.aspx

موفق ان شاءالله
الرد }}}}
تم الشكر بواسطة:
#6
إذا كان الأمر يتعلق بعدة جداول بسيطه فالأمر بسيط وهى أن تقوم بعمل validation قبل إدخال البيانات لأنك لابد وأن تعلم أن هذا الأمر لن يستقيم لك في أوامر التحديث المرتبطة بأكثر من شرط لكن عموما ما قصدته أنا هو
أن يكون كل جدول في فئة منفصلة بمعنى
وليكن جدول العملاء

PHP كود :
Pubblic class customertable

نضع هنا كل ما يتعلق بهذا الجدول 
End 
class 
وبالتالى يتحقق مبدأ OOP
مثل Encapsulation
فالفئة تحتوى على جميع خصائصها
وأيضا Abstraction
وهى الواقعيه مثل أن العميل له اسمه عنوانه وهكذا
وأيضا Polymorphism و inheritance
فالمشاريع يتم برمجتها بهذه الطريقه
فئة لل connection وفئة لل security وفئة لل validation وهكذا .....

عموما سوف أضع للك مثال بنفس فكرتك وحاول حقنه بنفس الطريقة التى ذكرتها :o
الرد }}}}
تم الشكر بواسطة:
#7
هذا مثال يوضح الطريقتين سواء التى تستطيع حقنها أم الأخرى التى لا يمكن حقنها


الملفات المرفقة
.zip   sqlinj.zip (الحجم : 95.25 ك ب / التحميلات : 7)
الرد }}}}
تم الشكر بواسطة:
#8
شكرا لك اخي sajad علي الروابط المفيده
بالفعل هذه الطريقه رائعه ويوجد بها مميزات كثيره مثل التراجع عن التعديلات بسهوله
ولكن لن تتناسب معي لاني يمكن ان اتعامل مع عده جداول في نفس جمله الاستعلام
وحتي اطلق العنان لخيالي في جمل الاستعلام Smile

اخي amgadtamer بارك الله فيك يناسبني مثالك جدا لتنفيذ فكرتي
سأدمج الداله validatinput مع طريقتي وبأذن المولي تنتهي المشكله
وان شاء الله سأعمل علي تطوير الفكره ...
والي هذا الوقت سأظل استخدم (Stored procedure)

وفقكم الله ،،
الرد }}}}
تم الشكر بواسطة:
#9
اخي الكريم ممكن اعطيك فكرة تساعدك قليلا ركز ممعي::
عندما تمرر مصفوفة البارميترات واسم الجدول ونوع العملية وتقوم بعمل ملف temp وتتكتب فيه
create proc tablename_Insert
حيث تابل نيم هو اسم الجدول
وتقوم بتمرير البارمترات بشكل عادي لملف
pram int,parm2 int
ثم بعد التمرير تكتب as
وبعدها يتم اضافة
insert into tablename(filed) values(prms)
هنا تجبر نفس على ان تكون البرامترات نفس اسم الحقول حتي تستطيع اختصار الكود
ومن ثم تحفظ الكود فى ملف
وتقوم قرائته فى sqlcommand
وتقوم بتنفيذه ويتم عمل استورد بروسيجر
___________________
هذه الطريقة كانت فى الفريم ورك الخاص بي لما كان فيرشن 2 ولكن قريبا سوف ارفعه للمنتدي ليستفيدو من هذه النسخة ولكن سيكون نسخة تنفيذية فقط
تحياتي
الفقير الى ربه
سامر عبد الله
microsoft partner
Team administrator
MCPD,MCITP,OCP,MP,MCC
Xprema Systems
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] ربط البرنامج بعدة اجهزة abid 9 2,545 14-08-15, 02:24 AM
آخر رد: ابوثامر
  ما مدى تأثير هذا على سرعة البرنامج الجندى 8 1,161 22-02-15, 01:34 AM
آخر رد: الجندى
  [سؤال] طريقة صنع قاعدة بيانات وربطه في البرنامج hassan 6 1,238 06-02-15, 11:31 PM
آخر رد: ahmed saba
  [سؤال] ظهور هذه رسالة عند تشغيل البرنامج علي win7 abdo_awad 6 1,099 09-12-14, 04:13 PM
آخر رد: abototta
  [سؤال] ماهوا كود تعديل اسم المستخدم وكلمة المرور في البرنامج Ameer syria 11 3,725 29-11-13, 04:37 AM
آخر رد: Ameer syria
  [سؤال] ايهما اسرع الكود ام البرنامج ؟ Mido9 5 1,674 19-10-13, 10:42 PM
آخر رد: sherif khalid
  [نقاش] تشغيل البرنامج على جهازين ؟ Mido9 5 3,489 26-09-13, 07:54 PM
آخر رد: Mido9
  كيف اجعل البرنامج يتصل بقاعدة بيانات على استضافتي ؟ mr3omr 1 691 23-08-13, 06:15 PM
آخر رد: الشاكي لله
  رسالة خطاء عند نقل البرنامج قاعدة فى فى جهاز اخر vb.2012 hany gamal 6 965 11-08-13, 12:39 AM
آخر رد: AHMED HUSSIEN
  تشغيل البرنامج في بيئة وندوز7 Nasser Dawood 0 338 21-07-13, 01:56 PM
آخر رد: Nasser Dawood

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم