سیاست امنیتی مناسب در طراحی برنامه های تحت ویندوز – 1


ورود ممنوع

من در طول سالهای گذشته ، به شهرهای مختلف ایران سفرهایی داشتم و به فراخور پروژهای  کاری ،با توسعه دهندگان مختلفی در کشورمون برخورد داشتم و توفیق اینرو داشتم که نرم افزارهای زیادی رو از نزدیک ببینم و بررسی کنم.

(این مقدمه رو جهت همسویی با دوست عزیزم محمد حسین مزیدی نوشتما!)

یک نکته مهم که من شخصا در تمامی این نرم افزارها دیدم که رعایت نمی کنن ، موضوع تامین امنیت نرم افزاره.موضوعاتی از قبیل اینکه آیا نرم افزار رو تحت Active Directory طراحی کنیم یا Workgroup هم از جمله مسایلی هست که برای خیلی ها سوال مهمیه و جالبه که اونها بدون اینکه درک و شناخت و اطلاعات کاملی از روشها امنیتی توسعه نرم افزار داشته باشند صرفا با داشتن اطلاعات عمومی شبکه در مورد Active Directory و Workgroup ایندو رو با هم مقایسه میکنن و حالا یه نتیجه ای میگیرن و سپس شروع میکنن به توجیه روشی که در برنامه نویسیهاشون استفاده کردن.

اینجا میخام راجع به روشی صحبت کنم که میشه گفت هیچ برنامه نویسی خارج از تهران ، ندیدم که از اون استفاده کرده باشه و بسیاری حتی اسمش رو هم نشنیدن! داخل پرانتز بگم داخل تهران هم وضعیتی مشابه داره.کاری ندارم به برنامه نویسانی که شاید اینرو بدونن و ازش استفاده میکنن اما من در میان نرم افزارهای حرفه ای که تجاری شدن و اسم و رسمی دارن ، ندیدم.

روشی که میخام ازش نام ببرم Impersonation هست.حتما همگی گزینه Run As User یا Run As Administrator رو در رایت کلیک بر روی برنامه ها دیدید.این امکان یعنی اینکه برنامه شما با Policy یک کاربر دیگه اجرا بشه!

خب بزارید تا بررسی دقیقتری بکنیم.اگر از برخی برنامه نویسان بپرسید که بهتره دیتاهای حجیم مانند تصاویر اسکن شده و اسناد رو داخل بانک اطلاعاتی بذاریم یا داخل فولدر به اشتراک گذاشته شده Shared Folder از سرور ، بسیاری از اونها میگن: داخل دیتابیس!

جالبه که بگم اصولا طراحی سرویس دهنده های بانک اطلاعاتی مانند Oracle یا SQL Server و یا MySQL بگونه ای انجام نشده که شما اسناد و یا تصاویر حجیم رو داخل اون ذخیره کنید.اصولا ورود این سرویسها به دنیای نرم افزار برای حل ایندست مشکلات نیست.بخصوص در مورد تصاویر! که نیازی به ایندکس شدن ندارن و اصولا جستجو در محتوای اونها خیلی بندرت انجام میشه و درج اونها در بانک فقط حجم بانک رو بالا می بره و کارایی رو کاهش میده!

اگر هم فیلدهایی از نوع Image و یا Text و یا ntext در این بانکهای اطلاعاتی وجود داره برای نیازهای دیگری هست.مثلا برای نگهداری تصاویر دانه انگشتی thunbnail و یا تصاویر خیلی کوچک.بعنوان نمونه میتونید به مقاله اینجا مراجعه کنید.

بسیاری از برنامه نویسان برای تامین امنیت داده ها نرم افزارشون ، بدلیل عدم اطلاع از روشهایی چون Impersonation ، اونرو داخل بانک اطلاعاتی قرار میدن.چون کنترل Authentication به بانک اطلاعاتی از داخل برنامه امکانپذیره و غافلند از اینکه اتفاقا Impersonation طراحی شده تا اونها بتونن کنترل دسترسی به فولدرهای اشتراکی رو وابسته به برنامه بکنن بدون اینکه نگران امنیت داده ها باشند.

بطور خلاصه : شما یک فولدر رو در سرویس دهنده Share می کنید ، یک User و یا Account در ویندوز سرور برای استفاده اختصاصی برنامه خودتون ایجاد می کنید ، و سپس حق دسترسی به فولدر مذبور رو فقط به همین User میدین.در انتها کافیه که از طریق Impersonation کاری بکنید که برنامه جوری اجرا بشه که انگار اون User برنامه رو اجرا کرده! قابل ذکره که کاربر استفاده کننده از برنامه لازم نیست که Username و Password اون اکانت رو بدونه و حتی لازم نیست روی برنامه شما در ایستگاه کاری رایت کلیک بکنه و گزینه Run As User را انتخاب بکنه بلکه همه اینکارها براحتی از داخل کد انجام میشه! بهمین سادگی

در نتیجه شما برنامه ای دارید که وقتی اجرا میشه ، انگار بعنوان کاربری از کاربرای ممتاز سرویس دهنده اجرا میشه و در نتیجه فقط برنامه شما به اون فولدرها دسترسی داره و نه هیچ کاربر و یا برنامه دیگه!

در قسمت بعد مراحل ایجاد یک برنامه که بر اساس impersonation کار میکنه رو توضیح خواهم داد.

impersonate preview

2 پاسخ به “سیاست امنیتی مناسب در طراحی برنامه های تحت ویندوز – 1

  1. مرسی از مطلب جالبتون. میشه بحث impersonation رو ادامه بدین؟

  2. قصد من از impersonation تنها نشون دادن راه بود.در این باره مستندات و اطلاعات خوبی بویژه در MSDN وجد داره.اگر پرسش خاصی مورد نظر بود مطرح کنید.

بیان دیدگاه