![]() |
|
نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40) +--- قسم : قسم أسئلة قواعد البيانات تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=41) +--- الموضوع : نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) (/showthread.php?tid=4437) |
نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - ابو عمر - 25-09-12 السلام عليكم اخواني ![]() قبل وضع استفساري سأقوم بتعريف بسيط عن كيفيه أختراق البرنامج من خلال جمل الاستعلام ( SQL INJECTION) حتي يستفاد من ليس لديه معرفه بهذا الموضوع المهم مثلا لو كتبت جمله استعلام بسيطه بهذا الشكل كود : SELECT * FROM users WHERE name = ' + userName + 'كود : a' or 't'='tكود : SELECT * FROM users WHERE name = 'a' OR 't'='t'طبعا يمكن تفادي هذه المشكله اما بأستخدام الاجراءات المخزنه(Stored procedure) او استخدام البارمترات ( parameters ) الي هنا سنبدأ في النقاش فرضا انني استخدم قاعده بيانات اكسس وبالتالي سنفقد امكانيه استخدام الاجراء المخزن (Stored procedure) لم يتبقي لي الاطريقه البارمترات ( parameters ) فرضا انني احببت الاستفاده من oop لعمل فانكشن للحذف والاضافه والتعديل يمكن استخدامها في جميع برامجي وقمت بأنشاء كلاس وكتبت به الداله كود : Public Function pross(ByVal sql As String) As Booleanوهكذا يمكن تنفيذ الحذف اوالاضافه اوالتعديل بكود بسيط كود : Dim p As New Class1ولكن هنا نعود من جديد الي مشكله ( SQL INJECTION) حيث يفقد البرنامج حمايته ويمكن اختراقه اعتذر عن الاطاله ولكن لها ضروره في هذا الموضوع المهم ما هي الاقتراحات حتي نجمع بين oop وحمايه جمل الاستعلام من الحقن ؟؟؟ نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - amgadtamer - 25-09-12 ليست هكذا تستخدم oop فأنت تتعامل علي أن كل كلاس خاص بنفسه عموما لي مثال سوف ارفعه لتوضيح الأمر نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - amgadtamer - 25-09-12 هذا هو المثال http://vb4arb.com/vb/uploaded/43_01348539162.zip نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - ابو عمر - 25-09-12 شكرا لك اخي amgadtamer علي اثراء الموضوع بمعلوماتك القيمه بارك الله فيك ... يااخي ما ابحث عنه هو عمل مكتبه dll بها الاكواد الخاصه بالتعامل مع قواعد البيانات حتي اوفر علي نفسي اعاده الاكواد في كل برنامج اصنعه .. لا يوجد لدي مشكله في استخدام الطبقات ( N_Tier) ولكن اكون مضطر لأعاده البرمجه من جديد مع كل برنامج وتحويل كل حقل الي خاصيه (Property) وهكذا سأوضح لك الامر اكثر مثلا لدي جدولين في قاعده البيانات الجدول الاول مكون من 3 حقول والجدول الثاني مكون من 5 حقول واريد ان اكتب اجراء واحد للأضافه يمكن استخدامه مع الجدولين سنواجه هنا مشكله اختلاف عدد البارمترات ( parameters ) بين الجدولين ولكن بالطريقه الخاصه بي الموجوده في الاعلي يمكن عمل هذا ولكن الطريقه ضعيفه ... هل يوجد طريقه او حل لهذه المشكله ??? نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - Sajad - 25-09-12 السلام عليكم اخي العزيز استخدمSqlCommandBuilder لتفادي مشكلة الباراميترات حيث يقوم هذا الامر بعمل أوامر update,delete,insert تلقائي خاص لكل جدول انظر الى هذه الروابط http://www.dotnetperls.com/sqlcommandbuilder http://www.java2s.com/Code/CSharp/Data****-ADO.net/InsertDataUsingSqlCommandBuilder.htm http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx موفق ان شاءالله نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - amgadtamer - 25-09-12 إذا كان الأمر يتعلق بعدة جداول بسيطه فالأمر بسيط وهى أن تقوم بعمل validation قبل إدخال البيانات لأنك لابد وأن تعلم أن هذا الأمر لن يستقيم لك في أوامر التحديث المرتبطة بأكثر من شرط لكن عموما ما قصدته أنا هو أن يكون كل جدول في فئة منفصلة بمعنى وليكن جدول العملاء PHP كود : Pubblic class customertableمثل Encapsulation فالفئة تحتوى على جميع خصائصها وأيضا Abstraction وهى الواقعيه مثل أن العميل له اسمه عنوانه وهكذا وأيضا Polymorphism و inheritance فالمشاريع يتم برمجتها بهذه الطريقه فئة لل connection وفئة لل security وفئة لل validation وهكذا ..... عموما سوف أضع للك مثال بنفس فكرتك وحاول حقنه بنفس الطريقة التى ذكرتها :o نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - amgadtamer - 25-09-12 هذا مثال يوضح الطريقتين سواء التى تستطيع حقنها أم الأخرى التى لا يمكن حقنها نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - ابو عمر - 26-09-12 شكرا لك اخي sajad علي الروابط المفيده بالفعل هذه الطريقه رائعه ويوجد بها مميزات كثيره مثل التراجع عن التعديلات بسهوله ولكن لن تتناسب معي لاني يمكن ان اتعامل مع عده جداول في نفس جمله الاستعلام وحتي اطلق العنان لخيالي في جمل الاستعلام ![]() اخي amgadtamer بارك الله فيك يناسبني مثالك جدا لتنفيذ فكرتي سأدمج الداله validatinput مع طريقتي وبأذن المولي تنتهي المشكله وان شاء الله سأعمل علي تطوير الفكره ... والي هذا الوقت سأظل استخدم (Stored procedure) وفقكم الله ،، نقاش : هل نستخدم oop ونجعل البرنامج عرضه للأختراق ( SQL INJECTION) - smss - 26-09-12 اخي الكريم ممكن اعطيك فكرة تساعدك قليلا ركز ممعي:: عندما تمرر مصفوفة البارميترات واسم الجدول ونوع العملية وتقوم بعمل ملف temp وتتكتب فيه create proc tablename_Insert حيث تابل نيم هو اسم الجدول وتقوم بتمرير البارمترات بشكل عادي لملف pram int,parm2 int ثم بعد التمرير تكتب as وبعدها يتم اضافة insert into tablename(filed) values(prms) هنا تجبر نفس على ان تكون البرامترات نفس اسم الحقول حتي تستطيع اختصار الكود ومن ثم تحفظ الكود فى ملف وتقوم قرائته فى sqlcommand وتقوم بتنفيذه ويتم عمل استورد بروسيجر ___________________ هذه الطريقة كانت فى الفريم ورك الخاص بي لما كان فيرشن 2 ولكن قريبا سوف ارفعه للمنتدي ليستفيدو من هذه النسخة ولكن سيكون نسخة تنفيذية فقط تحياتي الفقير الى ربه سامر عبد الله |