تقييم الموضوع :
  • 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 ك ب / التحميلات : 38)
الرد }}}
تم الشكر بواسطة: سعود
#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
الرد }}}
تم الشكر بواسطة: سعود , سعود , سعود


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [SQL] استفسار عن طريقة تحزم قواعد بيانات MSSQL مع البرنامج VB.NET2019 salemq 2 530 18-05-23, 03:02 AM
آخر رد: سعود
  قاعدتين بيانات من نوع اكسس في نفس البرنامج الوايلي 0 1,621 26-10-19, 09:26 AM
آخر رد: الوايلي
  [سؤال] ماهوا كود تعديل اسم المستخدم وكلمة المرور في البرنامج Ameer syria 13 10,857 02-01-18, 05:39 PM
آخر رد: سعود
  [VB.NET] ربط البرنامج بعدة اجهزة abid 11 15,599 19-08-17, 12:39 PM
آخر رد: osama.okn
  [VB.NET] تظهر رسالة توقف البرنامج dr_amr82 3 2,234 14-06-17, 03:12 AM
آخر رد: boudyonline
  مشكلة في تحزيم البرنامج samawi 2 2,177 23-04-17, 03:06 AM
آخر رد: samawi
  ما مدى تأثير هذا على سرعة البرنامج الجندى 8 4,018 22-02-15, 01:34 AM
آخر رد: الجندى
  [سؤال] طريقة صنع قاعدة بيانات وربطه في البرنامج hassan 6 4,015 06-02-15, 11:31 PM
آخر رد: ahmed saba
  [سؤال] ظهور هذه رسالة عند تشغيل البرنامج علي win7 abdo_awad 6 3,916 09-12-14, 04:13 PM
آخر رد: abototta
  [سؤال] ايهما اسرع الكود ام البرنامج ؟ Mido9 5 4,155 19-10-13, 10:42 PM
آخر رد: sherif khalid

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


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