اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

السلام عليكم

خير الكلام ما قل ودل .

اللهم صل على محمد وآله وصحبه .

بسبب ملاحظتي لحرص البعض _خاصة المستجدين _ على مسألة الحماية واستخدام طرق معقدة والبحث عن الجديد والأقوى

احببت ان انشر تجربتي وخبرتي في هذه المسألة كأيسر وكذلك اقوى طريقة .

الحماية من جهتين :

1- حماية البيانات وهي الجداول .. وهذه تهم المستخدم ( العميل)

2- حماية البناء ..( التصميم بما يشتمل من اكواد وغيرها ) وهذه تهم المبرمج

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

الجهة الأولى :

1- اكسس ضعيف جدا في حماية جداوله .. لأن اي مستخدم مهما ضعفت صلاحياته يمكنه التمكن من الجداول ( نسخ / تغيير / حذف)

2- اي شخص يملك قاعدة بيانات اكسس يمكنه الوصول الى الجداول ما لم يتم حمايتها بكلمة مرور اكسس

3- ينطبق هذا على القواعد المقسمة حيث يجب تفعيل كلمة مرور اكسس على الواجهات الأمامية قبل عرض كلمة مرور المستخدم ، والا ستكون الجداول في متناول اليد .

نأتي للجهة الثانية وهي ما يخص المبرمج :

من خلال تجارب وخبرة سنوات افضل طريقة تريح المبرمج وكذلك العميل وبعيدا عن غرس الملفات والريجستري والفلاش :

الاعتماد على رقم سيريال واحد من عتاد الجهاز ( قرص صلب / معالج / اللوحة الأم ) بشرط ان يكون الرقم اساسي خاصة القرص الصلب لا يتغير عند عمل التهيئة .

فكون الرقم اساسي لا يتغير يفيد العميل عندما يقوم بتهيئة القرص ، وهو مريح ايضا للمبرمج ( يوجد كثير من المواضيع هنا في هذا المنتدى تشرح عملية استخلاص ارقام القطع الداخلية لجهاز الحاسب .. ابحث )

الخطوات :

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

- استخراج واستخلاص الارقام من السيريل ( غالبا يأتي مختلط بارقام وحروف)

سيظهر هذا الرقم للعميل في فورم التسجيل واسفله حقل لادخال رقم النسخة

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

- نعمل دالة1 =  استقطاع جزء محدد من النتيجة .. مثلا خمسة ارقام او اربعة ارقام من اليمين او من اليسار ( استقطاع ثابت) 

- نعمل دالة2 = اجراء معادلة على دالة1 ،   مثلا ( دالة1 (x) 1234567 + 53954 ) 

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

- عندما يرسل العميل رقم السيريل ويطلب  رقم النسخة نقوم بعمل المعادلة ومن ثم نرسلها للعميل

نتيجة هذه المعادلة ستبقى ملك دائم  لجهاز حاسب واحد ما دام على قيد الحياة :power:

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

ما ذكرته اعلاه هو للنسخة الدائمة .. أما النسخة المؤقته فأقوم بعملها كالتالي :

يجب ان يكون العمل مقسم الى واجهات وجداول .

يجب ان اتعامل مع العميل على اساس نسختين من الواجهات :  مؤقتة / دائمة

الفرق بين الواجهة المؤقتة والواجهة الدائمة .. هي زيادة سطرين بشرطين في المؤقتة

1- الشرط 1: لن تفتح المؤقتة الا مع وجود الأنترنت شغال

2- نضع سطرا نحدد تاريخ توقف البرنامج ( يتم جلب التاريخ من الانترنت )

لنفرض انتهت مدة التجربة بعد شهر او شهرين .. وتم الشراء .. هنا نرسل الواجهة الدائمة للصق والاستبدال .

هنا نكون حافظنا على بيانات العميل المدخلة وعلى حقوقنا البرمجية

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

نقطة اخيرة :

سيتبادر الى الذهن ! اين يحفظ رقم النسخة ؟ لأن البرنامج سيطلبه عند كل اقلاع ؟

الجواب :

ما دام رقم النسخة ملكا للجهاز فيمكن حفظه في اي مكان ، مثلا في حقل في جدول بشرط ان يحتوي الجدول على سجل واحد فقط

او يمكن حفظه في ملف نصي بجانب قاعدة البيانات

وهذه الطريقة الاخيرة هي الافضل بل تجب اذا تم توزيع الواجهات على اكثر من جهاز .. والسبب ان كل جهاز سيكون له رقمه الخاص

هذا ما لدي آمل تجدوا فائدة

 

 

  • Like 4
قام بنشر (معدل)

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

كود اخفاء الاكسيس او اظهارها (اختياري ومش هتفرق وجودها)

Option Compare Database
Option Explicit


#If VBA7 Then
Public Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#Else
Public Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If

'---------------------------------------------------(يخفي الشاشة بتصغيرها للأسفل ولكنها تظهر إذا عملت ماكسيمايز)
Public Function HideAccess()
    Call ShowWindow(Access.hWndAccessApp, 2)
End Function

'---------------------------------------------------(لإظهار شاشة الأكسس)
Public Function ShowAccess()
    Call ShowWindow(Access.hWndAccessApp, 9)
End Function

 

كود تشغيل قاعدة البيانات الاخري

 

Private Sub Form_Load()
Call HideAccess
 Dim acc As Access.Application
 Dim db As DAO.Database
 Dim strDbName As String

 strDbName = CurrentProject.Path & "\" & "FFFF" & ".accdb"
 Set acc = New Access.Application
 acc.Visible = True
 acc.OpenCurrentDatabase strDbName, False, "1234"
 Set db = acc.CurrentDb()
 acc.UserControl = True
 Application.Quit
End Sub

على فرض ان القاعدة الاماميه باسم FFFF وان كلمة السر هي 1234

ويقوم باغلاق القاعدة الثالثه بتحويلها الى accde

وبكده اعتقد هتكون الحمايه عاليه جدا 
وهيكون صعب كسر كلمة السر

تم تعديل بواسطه عمر ضاحى
  • Like 3
قام بنشر

وهذه لتوضيح الفكره 

يفضل ان يكون المجلد فى حرف D

علشان يكون مسار البرنامج هو 
D:\DB\Start.accde
لتجنب اخطأ الربط 

DB.rar

  • Like 3
قام بنشر

شكرا لك استاذ عمر على المداخلة

واحسنت في عرض هذه الفكرة ، وطريقة تنفيذها .. 

ويعتبر هذا العمل زيادة عالية في حماية بيانات العميل .

 

  • Like 1
  • Thanks 1
قام بنشر

جميل جدا شكرا لكم

لكن هناك مشكلة
طالما بنتكلم عن عمل (دوال ومعادلة)، يبقى كده المبرمج بيستخدم (الجداول) في حماية البرنامج.
وطبعا الجداول لا يمكن حمايتها كما قال في أول الكلام
بمجرد كسر البرنامج عن طريق Hex والوصول للجدول، هيتم معرفة الدالة والمعادلة ويغير كيفما شاء

ما رأيكم؟ 

قام بنشر
24 دقائق مضت, رولي said:

جميل جدا شكرا لكم

لكن هناك مشكلة
طالما بنتكلم عن عمل (دوال ومعادلة)، يبقى كده المبرمج بيستخدم (الجداول) في حماية البرنامج.
وطبعا الجداول لا يمكن حمايتها كما قال في أول الكلام
بمجرد كسر البرنامج عن طريق Hex والوصول للجدول، هيتم معرفة الدالة والمعادلة ويغير كيفما شاء

ما رأيكم؟ 

لا اعتقد ان هيكون الموضوع بهذه السهوله 

اذا كانت قاعدة البيانات من النوع ACCDE (القاعدة التى سوف تفتح البرنامج "الواجهه")

فهنا استحالة انه يوصل للكود حتى لو معه الباسورد ^_^ (عارف ان مفيس مستحيل لكن على الاقل هذا يتطلب مستوي عالى جدا من الخبره)

وبما ان الواجهه نفسها مغلقه بكلمة سر (معقده)

والخلفيه مغلقه بكلمة سر معقده ايضا

فهيكون من شبه المستحيل كسرها

والله اعلم

  • Like 2
  • Thanks 1
قام بنشر
في 23‏/9‏/2023 at 12:08, ابوخليل said:

عندما يرسل العميل رقم السيريل ويطلب  رقم النسخة نقوم بعمل المعادلة ومن ثم نرسلها للعميل

نتيجة هذه المعادلة ستبقى ملك دائم  لجهاز حاسب واحد ما دام على قيد الحياة

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

بما اني مبتدئ وغير متخصص

فاعتقد وبناء فهمي القاصر

ان هناك حمايتان في ثنايا الموضوع

حماية للبيانات من اي تعديل او حذف او اضافة او استعلام غير مصرح به

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

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

مع تمنياتي للجميع بالتوفيق

اخونا الشايب

  • Like 1
قام بنشر
5 ساعات مضت, رولي said:

جميل جدا شكرا لكم

لكن هناك مشكلة
طالما بنتكلم عن عمل (دوال ومعادلة)، يبقى كده المبرمج بيستخدم (الجداول) في حماية البرنامج.

على اعتبار اننا نتكلم عن حماية التصميم ..

ليتك قرأت ما كتبته بتمعن .. ابدا لا دخل للدوال والمعادلات بالجداول ..

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

  • Like 1
  • Thanks 1
قام بنشر
16 دقائق مضت, شايب said:

ان هناك حمايتان في ثنايا الموضوع

حماية للبيانات من اي تعديل او حذف او اضافة او استعلام غير مصرح به

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

وحماية ثالثة :fff: .. ان يحميك الله من كل سوء  ، ويطيل عمرك على طاعته

 

  • Like 4
  • Thanks 1
قام بنشر
6 ساعات مضت, ابوخليل said:

ان يحميك الله من كل سوء 

هي الحماية الاولى والاخيرة..بارك الله فيك استاذنا ابو خليل وجزاك الله الجنة لما تقدمه مع جميع الاخوة من علم نافع  

قام بنشر

شكرا جزيلا لكم
معلش سؤال كي تتضح لي الصورة:

المعادلة اللي باعملها عندي، لازم تكون موجودة في (استعلام) مرتبط بجدول داخل البرنامج؟ 

قام بنشر
15 ساعات مضت, رولي said:

شكرا جزيلا لكم
معلش سؤال كي تتضح لي الصورة:

المعادلة اللي باعملها عندي، لازم تكون موجودة في (استعلام) مرتبط بجدول داخل البرنامج؟ 

الطرق كثيره وكل واحد وطريقته 

لكن فى الغالب ممكن بدل ما تعمل استعلام ممكن تستخدم اكواد السيكول داخل الاكواد افضل 

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

  • Thanks 1
قام بنشر

شكرا جزيلا أخي عمر، ربنا يجعله في ميزان حسناتك

قام بنشر

مع احترامى للجميع افضل شيء هو عمل ربط بين واجهة اكسس وسيكوال سيرفر اكسبريس  فهذا افضل حل بأن نتعامل مع واجهات اكسس المميزة وقاعدة بيانات سيرفر سيكوال القوية ولكم جزيل الشكر 

قام بنشر
33 دقائق مضت, tiger wanted said:

مع احترامى للجميع افضل شيء هو عمل ربط بين واجهة اكسس وسيكوال سيرفر اكسبريس  فهذا افضل حل بأن نتعامل مع واجهات اكسس المميزة وقاعدة بيانات سيرفر سيكوال القوية ولكم جزيل الشكر 

نحترم فكرتك .. في الأصل أكسس لم تصنعه ميكروسوفت ليستفاد منه كتوزيع تجاري ، كما هو الحال في اللغات البرمجية الأخرى وتطبيقاتها وانما عملته لخدمات المكتب وتستفيد منه المؤسسات الصغيرة في اعمالها ، مثله مثل اكسل والوورد وبقية المجموعة ,, لاحظ ان معالج اكسس يصنع مشروعا كاملا بضغطة زر .

فاذا ارتقينا الى قواعد سيكوال سيرفر فالافضل الارتقاء الى لغات برمجية ارقى وافضل ، والواجهات فيها لا تقارن بواجهات اكسس المحدودة .

ما يميز اكسس سهولة ويسر العمل عليه وسرعة التنفيذ  ...  فما يتم تنفيذه على اكسس في يوم  .. سيأخذ قرابة الشهر على اللغات الأخرى

والسبب ان القوالب جاهزة في اكسس ولا تحتاج بناء من الصفر

  • Like 1
قام بنشر
في 23‏/9‏/2023 at 12:08, ابوخليل said:

لاعتماد على رقم سيريال واحد من عتاد الجهاز ( قرص صلب / معالج / اللوحة الأم )

شخصيا قمت بالاونة الاخير استخدام ال IP للحاسوب ليمنع النسخ لحاسوب ثاني

طبعا هذا اذا كانت القاعدة غير مقسمة الى عدة اجهزة

بعد فتح النموذج ..حاول تغيير رقم السيريال يدويا في الجدول

 

IP.rar

قام بنشر
2 ساعات مضت, Eng.Qassim said:

شخصيا قمت بالاونة الاخير استخدام ال IP للحاسوب ليمنع النسخ لحاسوب ثاني

طبعا هذا اذا كانت القاعدة غير مقسمة الى عدة اجهزة

بعد فتح النموذج ..حاول تغيير رقم السيريال يدويا في الجدول

 

جميل جدا .. تمت التجربة .. يوجد ثغرة وهي اذا الجدول خالي يتم فتح النموذج

بمعنى يمكنني افراغ الجدول وتشغيل الفورم على اي جهاز

وانت ايضا لا يمكنك وضع قيمة في الجدول عندما ترسله لي لأنه سيجد قيمة مغايرة ولن يعمل

 

 

قام بنشر
33 دقائق مضت, ابوخليل said:

يوجد ثغرة وهي اذا الجدول خالي يتم فتح النموذج

 بالتأكيد استاذ ابو خليل ..النموذج يفتح حينما يكون الجدول فارغ ..لانه سيلصق ال IP للحاسوب في الجدول 

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

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

ارجوا منك استاذي ان تشرح لي الثغرة 

If DCount("[IpAddress]", "tblLog") = 0 Or DLookup("[IpAddress]", "tblLog") = Null Then

 

قام بنشر

صحيح لن يعمل في الاجهزة الأخرى عند نقله .

ولكي يعمل يلزم مسح القيمة من الجدول .. وهذه هي الثغرة .لمن عرف سر الحماية

ما رأيك لو عملنا عرقلة للمعتدي

بحيث لو عمل على افراغ الجدول لن يعمل معه الا بادخال كلمة السر

بما يشابه هذا :

If IpAddress = DLookup("[IpAddress]", "tblLog") Then
    Exit Sub
    End If
Dim mypass
mypass = "123"
str_Title = "الرقم السري مطلوب"
str_Prompt = "ادخل الرقم السري"
If InputBox(str_Prompt, str_Title) = mypass Then
If DCount("[IpAddress]", "tblLog") = 0 Then
  Call LogIpAddress
   Exit Sub
    End If
    Else
        MsgBox "لاتملك الصلاحية"
        DoCmd.CancelEvent
           DoCmd.Quit
        End If

IP2.rar

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information