اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
معمولا وقتی صحبت از هک میشود بیشتر وب سایتها مدنظر هستند و کمتر به نرم افزارهای محیط desktop توجه میشود اما در محیط desktop هم امنیت بسیار مهم است.
یکی از مواردی که در رابطه با windows formها (دات نتی و غیر دات نتی) بسیار به آن برخورد کرده ام اعمال دسترسی کاربر به قسمتهای مختلف فرم با مخفی یا غیر فعال کردن دکمهها و کنترلهای فرم است. به این صورت که در هنگام لود فرم اصلی با توجه به دسترسی کاربر بعضی منوها مخفی میشوند و در لود هر فرم هم بعضی از دکمهها و کنترلهای روی فرم مخفی یا غیر فعال میشوند. همین!
یکی از مواردی که در رابطه با windows formها (دات نتی و غیر دات نتی) بسیار به آن برخورد کرده ام اعمال دسترسی کاربر به قسمتهای مختلف فرم با مخفی یا غیر فعال کردن دکمهها و کنترلهای فرم است. به این صورت که در هنگام لود فرم اصلی با توجه به دسترسی کاربر بعضی منوها مخفی میشوند و در لود هر فرم هم بعضی از دکمهها و کنترلهای روی فرم مخفی یا غیر فعال میشوند. همین!
اما اگر کاربر به کمک ابزاری بتواند منوها و کنترلهای مخفی فرم را نمایش دهد و منوها و کنترلهای غیرفعال را فعال کند چی؟
کلاس زیر را در نظر بگیرید :
public class HackWindowsForms { struct POINTAPI { public int X; public int Y; } [DllImport("user32.dll")] static extern int EnumChildWindows(int hWndParent, EnumChildCallbackDelegate enumChildCallback, int lParam); [DllImport("user32.dll")] static extern int EnableWindow(int hwnd, int fEnable); [DllImport("user32.dll")] static extern int WindowFromPoint(int x, int y); [DllImport("user32.dll")] static unsafe extern int GetCursorPos(POINTAPI* lpPoint); delegate int EnumChildCallbackDelegate(int hwnd, int lParam); public static void EnableThisWindowControls() { unsafe { POINTAPI cursorPosition = new POINTAPI(); GetCursorPos(&cursorPosition); int winWnd = WindowFromPoint(cursorPosition.X, cursorPosition.Y); EnumChildWindows(winWnd, EnumChildCallback, 0); } } static int EnumChildCallback(int hwnd, int lParam) { EnableWindow(hwnd, 1); EnumChildWindows(hwnd, EnumChildCallback, 0); return 1; } }
private void button1_MouseUp(object sender, MouseEventArgs e) { HackWindowsForms.EnableThisWindowControls(); MessageBox.Show("حالا روی دکمه مورد نظر کلیک کنید و کلید space را فشار دهید.", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading); }
نمونه کد مشابهی هم برای نمایش منوها و کنترلهای مخفی شده میتوان نوشت.
اما راه حل چیست؟
قبل از اجرای هر عملی که احتیاج به دسترسی دارد، دسترسی کاربر چک شود و فقط به غیر فعال و مخفی کردن کنترلها بسنده نشود. مثلا اگر دکمه ویرایش را غیر فعال کرده ایم در کلیک آن هم دسترسی چک شود.