اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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

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

ممكن اخواني الاعزاء عندة برنامج قائمة منسدلة يكون الصلاحيات على نفس القائمة اختار منها  يوفي بالغرض يعطيني او تعديل على المرفق

test.accdb

تم تعديل بواسطه dd13901390
ارفاق ملف
قام بنشر
في 27‏/6‏/2025 at 02:53, Eng.Qassim said:

نعم ممكن ....هل يمكنك ان تعطي مثال؟

 

هذه فكرة بسيطة ..

 

Foksh.accdb

قام بنشر
في 28‏/6‏/2025 at 21:39, Foksh said:

هذه فكرة بسيطة ..

في المعايير النصية لبعض الاستعلامات نستخدم 

 WHERE U_UserName = '" & strUser & "' AND U_Password = '" & strPass & "'")

وكذلك الحال في دوال تجميع المجال 

"[U_FullName]='" & [tx3] & "'")

ايضا عندما نضع معيار نصي لفتح فورم من خلال فورم اخر 

DoCmd.OpenForm "frm2", , , "[U_UserName]='" & [tx2] & "'"

وكذلك الحال عند الفلترة بمعيار نصي

DoCmd.ApplyFilter , "[U_UserName]='" & [tx9] & "'"

وحيث ان الحقول النصية تقبل كتابة أي احرف أو أرقام أو رموز خاصة وبالتي يمكن توظيفها بطريقة معينة لتنفيذ اجراء غير شرعي

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

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

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

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

وكذلك في الحالة الرابعة الفلترة يمكن فلترة كافة البيانات والتنقل بدون الحاجة لمعرفة المعيار

والسؤال هل هذا هو الرمز الوحيد الذي يمكن استغلاله 

(')

الاجابة لا

ولكن ركزنا عليه لكونه الأكثر استخدام في قاعدة البيانات

اخيرا هل يمكن انهاء المشكلة وخصوصا ان الرمز مطلوب للمعايير النصية

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

 strPass = Replace(Me.U_Password, "'", "_")

ايضا استخدام رسائل معالجة الاخطاء وتحديد الاجراء عند حدوث خطأ

ونكتفي بهذا القدر عن الرمز (') وقد نتحدث غن رمز اخر لايقل خطورة

والله الموفق

الشايب

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

ونكتفي بهذا القدر عن الرمز (') وقد نتحدث غن رمز اخر لايقل خطورة

 

ما شاء الله ، مبدع فيما طرحت .

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

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

أيضاً على ما أعتقد استخدامنا لمطهرات النصوص قد يأتي بنتيجة جيدة ومساعدة ,,

على سبيل المثال ، هذه فكرة بسيطة أيضاً وقد تكون قابلة للتطوير والتحديث بشمولية ,,

If InStr(Me.txtUser, "'") > 0 Or InStr(Me.txtUser, ";") > 0 Then
    MsgBox "تم استخدام رموز غير مسموح بها في اسم المستخدم", vbExclamation
    Exit Sub
End If

 

ولهذا السبب كنت قد استخدمت محاولة لم أقم بتجربتها بعد ، على أحد المشاريع باستخدام هذه الدالة :-

Public Function Sanitizer(ByVal userInput As String, Optional ByVal context As String = "sql") As String
    Dim sanitized As String
    sanitized = Trim(userInput)
    
    Select Case LCase(context)
        Case "sql"
            sanitized = Replace(sanitized, "'", "''")
            sanitized = Replace(sanitized, ";", "")
            sanitized = Replace(sanitized, "--", "")
        
        Case "name"
            sanitized = Replace(sanitized, "'", "")
            sanitized = Replace(sanitized, ";", "")
            sanitized = Replace(sanitized, "*", "")
            sanitized = Replace(sanitized, "=", "")
        
        Case "pure"
        
        Case Else
            sanitized = Replace(sanitized, "'", "''")
    End Select

    Sanitizer = sanitized
End Function

 

وعلى سبيل المثال كإستخدام في الاستعلامات :-

Dim filter As String
filter = "[U_UserName]='" & Sanitizer(Me.txtUser, "sql") & "' AND [U_Password]='" & Sanitizer(Me.txtPass, "sql") & "'"
DoCmd.OpenForm "frmDashboard", , , filter

 

وكمثال على ما طرحته سابقاً لفتح نموذج بفلترة ..

DoCmd.ApplyFilter , "[U_UserName]='" & Sanitizer(Me.txtSearch, "sql") & "'"

 

أو حتى في نموذج تسجيل الدخول لاسم المستخدم ، كانت المحاولة :-

Dim newUser As String
newUser = Sanitizer(Me.txtNewUser, "name")

 

هذه كانت الفكرة التي خطرت لي ، ولكن لاحقاً قمت بتحديثها لإظهار رسالة تحذيرية تلقائية إذا تم رصد مدخل خطير أو محاولات حقن نصية 😁

 

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