الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل قاعدة البيانات مؤمنه .. ؟

بدأه codefinder في 1 نوفمبر 2008 · 10 رد · 1,210 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم يا اخوانى الاعزاء اعضاء المنتدى افاضل

خطر ليى فكرة من فترة اننى هل الاسلوب الذى اتبعه فى كتابتى لصفحات ال asp و ربطعا بقاعدة الييانات التى تكون على الاقل access

هل هى مؤمنه الامان الكافى بحيث لا يسطيع احد ان يخترق قاعدة البيانات هو حتى يحمله او حتى يستطيع العرض او الاستعلام منها ...

و اردت ان نتشارك فى الخبارات فى هذا المجال :

اولا فى الاتصال :

- اقوم بعمل الاتصال من خلال ملف منفصل و يكون على هذا الشكل :

اقتباس
<%

dim db,db_path

set db = server.createobject("adodb.connection")

db.mode=3

db_path=server.mappath("db/database_filename.mdb")

db.open "provider=microsoft.jet.oledb.4.0;data source="+db_path

'if db.state=1 then

'response.write ("ok")

'else

'response.write ("no")

'end if

%>

التعليق :

- بالطبع يفضل ان يكون هناك كلمه سر على قاعدة البيانات حتى يكون هناك صعبة بالاتصال بها ..

ثانيا : عمليات التحديث و الاضافة :

استخدم هنا الاكواد الخاصة الامر التنفيذ

اقتباس
db.Execute

حيث اننى احمل جمله ال sql سواء فى ( الاضافة - التحديث - لحزف ) على متغير ثم اقوم بتمرير المتغير للتنفيذ مثل :

اقتباس
db.Execute (str_insert)

التعليق :

هل هذا الاسلوب صحيح .. حيث اننى اتبعه و هوا مناسب جدا فى تنفيذ الاوامر حيث انه يعمل على استمرار غلق قاعدة البيانات و تفتح فقط للتنفيذ

ثالثا : عمليه الاستعلام :

استخدم فيها recordset محمل من جمله ءsql و بعد هذا استخدم امر response للكتابه على الصفحة

التعليق :

هل بالفعل العمليه هذه هى الافضل .. ؟

اخوانى فى النهاية :::

1- هل قاعدة البيانات بهذا الاسلوب مؤمنه بحيث البيانات التى بقا لا يستطيع احد الوصل لها ؟

2- ما قولته ( موجز ) و انا اتبعه و يعمل معى بشكل ممتاز .. ولكن هل هناك خطأ او الافضل فىالتعامل ؟

وشكرا

ارجوا مساعدتى للعمل كمبرمج اوراكل باى شركة خبرتى 1 سنه و ربنا الموفق

خبرى 6 سنوات فى فيجوال بيزك 6و ASP

#2

بالنسبة لغلق وفتح قاعدة هي ممارسة جيدة بشكل عام ولا تأثير لها على الامان خاصة ان الصفحات وقاعدة البيانات على نفس السيرفر .

بالنسبة لقاعدة البيانات يجب ان تضعها في مجلد بحيث لا يمكن الوصول لها من خلال موقع الانترنت اي اذا قام شخص ما بكتابة

www.domainname/com/db/database_filename.mdb

ان يعطيه الملف غير موجود

او تغيير الاسم الى db.asp بدلا من db.mdb

#3

شكرا اخى العزيز

و ارجو ان لا اكون قد اثقلت عليك

و لكن ما هو الحل فى الباقى

هل هو تمام ام به ما هو يشوبة

وشكرا

ارجوا مساعدتى للعمل كمبرمج اوراكل باى شركة خبرتى 1 سنه و ربنا الموفق

خبرى 6 سنوات فى فيجوال بيزك 6و ASP

#4

أظن أنت تعرض هنا لموضوع يختص بـ ASP Classic وليس ASP.NET ...

الأخير له أنظمة مختصة بالاتصال وتأمين قواعد البيانات ADO.NET ..

والأول له منتدى آخر ...

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#5
اقتباس
هل هو تمام ام به ما هو يشوبة

بشكل عام لا غبار عليه

اقتباس
أظن أنت تعرض هنا لموضوع يختص بـ ASP Classic وليس ASP.NET .

قسم تصميم الصفحات تبرؤوا من البرمجة لذا والظاهر ان كل سؤال يتم طرحه هناك بما يتعلق ب ASP يتم تحويله الى هذا القسم لذا انتبه في الايام القادمة الى السؤال جيدا ;)

#6

فعلا لاحظت أن القسم ظهر به كثيرا أسئلة عن ASP Classic ... على كل حال الله المستعان وعليه التكلان ...

تقبل تحياتي حبيبي طارق :rose: :cash: :wub:

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#7

شكرا اخوانى

بالفعل لقد بحثت عن المنتدى الخاص بال asp3

و لكنى لم اجدة ..

شكرا لكم على المساعدة

السلام عليكم

ارجوا مساعدتى للعمل كمبرمج اوراكل باى شركة خبرتى 1 سنه و ربنا الموفق

خبرى 6 سنوات فى فيجوال بيزك 6و ASP

#8

تنفيذ الامر (db.Execute (str_insert غير مؤمن ... لأن المتغير str_insert فى حالة الاضافة أو التعديل قد يحتوى بيانات ادخلها المستخدم، وهنا يمكن ان يقوم بعمل SQL injection، ويجب عمل مراجعة (Filter) لمدخلات المستخدم (أو للمتغير str_insert) قبل تنفيذ db.Execute.

تم تعديل هذه المشاركة بواسطة دحدوح في 5 نوفمبر 2008 في 19:00

#9

شكرا اخى العزيز

موضوع رائع فعلا .. و نقطة مهمه مغفله بالنيالى خالص و هى الاختراق كيف .!!

و لكن كيف اقوم بتامين هذا الكود حيث انه الوصلة التى اعطاتنى اياها .. خالص با php

و شكرا لك اخى العزيز .

ارجوا مساعدتى للعمل كمبرمج اوراكل باى شركة خبرتى 1 سنه و ربنا الموفق

خبرى 6 سنوات فى فيجوال بيزك 6و ASP

#10
codefinder كتب:
و لكن كيف اقوم بتامين هذا الكود حيث انه الوصلة التى اعطاتنى اياها .. خالص با php
ال php مجرد مثال للتوضيح ، وكل ما ينطبق عليه ينطبق على اى لغة اخرى

ال php هى واجهة لعرض واستقبال البيانات مثلها مثل asp و #C و vb و delphi

لو عندك textbox او اكثر لإدخال بيانات (فى html و #C و vb و delphi)

المتغير textbox1 = القيمة textbox1 نفترض انها "class1"

المتغير textbox2 = القيمة textbox2 نفترض انها "15"

جملة sql للاضافة هى

str_insert = "insert into table1 (name, students) values ('" + textbox1 + "', " + textbox2 + ")"

عند التنفيذ ستكون

str_insert = "insert into table1 (name, students) values ('class1', 15)

لو ادخل المستخدم فى الحقل textbox1 الجملة "class1', 15); drop table table2; --"

لاصبح المتغير textbox1 = القيمة textbox1 هى "class1', 15); drop table table2; --"

وجملة sql للاضافة ستكون

str_insert = "insert into table1 (name, students) values ('class1', 15); drop table table2; --', 15)

الجمله الاولى هى

insert into table1 (name, students) values ('class1', 15)

إذا حذفنا قيمة المتغير الاول ستصبح

insert into table1 (name, students) values ('', 15)

اذا اضفنا القيمة الجديده التى تحتوى على جمله حذف الجدول ال table2 ستصبح

insert into table1 (name, students) values ('class1', 15); drop table table2; --', 15)

فى sql ما يأتى بعد -- هو تعليق لن يتم تنفيذه ، والفصله المنقوطة ; او كلمة go للفصل بين تنفيذ اكثر من query فى نفس الجملة

شرح اوفر فى: http://www.codeproject.com/KB/database/Sql...ionAttacks.aspx

للتغلب على هذه المشكلة - يمكن عمل filter لأى متغير (كما فى المثال السابق) يدخل جملة sql قبل التنفيذ

هذا ال filter يتخلص من اى من الرموز التالية (-- ' ; ) ممكن ان يكون بالشكل

str_insert = replace(str_insert, "'", "")
str_insert = replace(str_insert, ";", "") 
str_insert = replace(str_insert, "--", "")

حقيقة يكفى التخلص من ( ' ) فقط او استبدال كل ( ' ) بأثنين ( '' )

str_insert = replace(str_insert, ";", "''")

ولكن قد يكون ما هو خفى قد يستخدمه اخرون :(

#11

السلام عليكم

اخى دحروج ..

شكرا شكرا شكرا

على الشرح و التوضيح المفصل

شكرا لك اخى ..

ارجوا مساعدتى للعمل كمبرمج اوراكل باى شركة خبرتى 1 سنه و ربنا الموفق

خبرى 6 سنوات فى فيجوال بيزك 6و ASP

مواضيع مشابهة