PDA

View Full Version : سوال: امنیت فایلهایی که از طریق نرم افزار در شبکه از آنها استفاده میشود



ali190
پنج شنبه 28 مهر 1390, 10:05 صبح
باسلام و عرض خسته نباشید
من برنامه ای مبتنی بر دیتابیس نوشتم که تحت شبکه هست
در این نرم افزار قرار هست کاربران مختلف فایلهای مورد نیاز در یک سازمان(فرمها ، نامه ها ، فایل های PDF ، تصاویر و....) رو طبقه بندی ، ویرایش ، و حذف کنند و باید امکان افزودن فایل توسط یک کاربر هم مقدور باشه.

کلیه اعمال کاربران در نرم افزار توسط اختیاراتی که هنگام ثبت نام به آنها داده میشود کنترل میشود (برای مثال هنگام حذف فایل و رکورد از داخل نرم افزار مجوز این کار برای این کاربر ابتدا توسط نرم افزار بررسی میشود و سپس عملیات انجام یا لغو میگردد.)
مشکل من هم اکنون در مورد امنیت فایلهایی هست که در شبکه share شده اند
با توجه به عملیاتی که یک کاربر میبایست با فایلها انجام دهد نمیتونم در قسمت Permission دادن به کاربر بر روی پوشه share فقط حالت Read رو بدم چون میباست قابلیت افزودن فایل هم موجود باشه .در حال حاضر از یک تکنیک ساده برای تضمین امنیت فایلها در شبکه استفاده میکنم ولی نمیدونم تا چه اندازه امنیت داره و میتونه در مقابل حملات افراد کنجکاو مقابله کنه.
پوشه share شده: share folder$
با افزودن $ به آخر اسم پوشه ، visible اون پوشه در شبکه false میشه و اگر اسم سیستم سرور هم لو بره باز هم دیده نمیشه
مثلاً اگر نام سیستم سرور sps باشه دیگه هنگامی که \\sps میزنید دیگه در لیست پوشه های share شده نام پوشه share شده دیده نمیشه
ضمناً ذکر این نکته حائز اهمیت هست که برای جلوگیری از لو نرفتن آدرس فایل ها در شبکه هیچ وقت فایل ها از سرور گشوده نمیشوند (چون زمانیکه این اتفاق افتاد مثلاً ا یک Save As گرفتن از یک فایل مثلاً PDF مکان فایل ها در سرور لو میره) و از فایل مورد نظر یک کپی در سیستم کاربر گرفته میشود و در آنجا گشوده میشود.
میخواستم از دوستان خواهش کنم ابتدا تکنیک اشاره شده رو نقد کنند و بعد اگر روشهای دیگه ای هم برای انجام و پیاده سازی در محیط شبکه وجود دارد رو تشریح کنند.
ممنون و متشکر
یاعلی

ali190
جمعه 29 مهر 1390, 00:14 صبح
سلام
دوستان نظری در این باره ندارند؟

kitcat_m18
جمعه 29 مهر 1390, 11:06 صبح
سلام،

شما در واقع داري از Mapped Network Drive استفاده مي کني.

روش خوبيه مي توني يه کم بيشتر در باره امنيت فايل ها در اين مورد تحقيق کني
مثلا تعريف يه گروه يا کاربر و يا حتي عضويت در Domain اختصاصي براي جلوگيري از ورود سيستم هاي ديگه.

اگه حجم فايل هايت آنچنان زياد نيست مي توني به صورت باينري تو خود SQL Server يا Oracle ذخيره کني.

موفق باشي

ali190
جمعه 29 مهر 1390, 11:32 صبح
سلام
ممنون از راهنماییتون
در شرکتمون ما در شبکه از workgroup استفاده میکنیم
حجم فایل هام بعضاً بالاست
آیا نمونه کدی جهت ذخیره اطلاعات بصورت باینری ، همچنین لود کردن اونها از دیتابیس در vb6 دارید که در اختیارم بذایرید؟
آیا با اجرای این روش در درازمدت سرعت دیتابیس پایین نمیاد

kitcat_m18
جمعه 29 مهر 1390, 13:18 عصر
استفاده از اين روش بستگي به قدرت سرور شما و Performance پايگاه داده شما داره
مثلا در Oracle اگه پايگاه داده درست بتونه از قدرت ديتا ديکشنري ها استفاده کنه باهاش کاراي بزرگي مي توني انجام بدي (ديتا بيس هاي چند ميليارد رکوردي و چند ترابايتي)
تو WorkGroup ِنمي توني از تکنيک دامين استفاده کني

براي ذخيره فايل ها هم نوع فيلدت رو باينري انتخاب مي کني يه سرچ بزني به نتايج جالبي ميرسي
البته خودم الان که دارم اين نوشته رو مي نويسم تنها سوال تو ذهنم اينه: اگه باينري ذخيره کردم چجوري بازدگرداني کنم؟؟؟ (منظورم File Type ها هست)

vbhamed
دوشنبه 02 آبان 1390, 10:36 صبح
سلام

به نظر من شما يك مقدار از ابتداي فايل ها رو هم انكريپت كني مطمئن تره، يك مقدار براي اينكه اگر حجم فايلها زياد بود مشكلي پيش نياد و فقط هدرشون انكريپت بشه

ali190
دوشنبه 02 آبان 1390, 23:04 عصر
سلام
جناب Vbhamed ممنون از راهنماییتون
فقط یک نکته وجود داره
ما در شبکه یک پوشه داریم که میخواهیم کاربرها بتونن داخل این پوشه فایل بریزن و بقیه استفاده کنند
سیاسیت برنامه اینگونه هست که به هر کاربری با توجه به سطح دسترسیش اجازه استفاده از فایلها رو بدهد
یعنی یک نفر مثلاً به 100 تا فایل دسترسی داره یکی دیگه به همه فایلها
فایلها هم همگی ابتدا انکریپت شده سپس داخل پوشه مورد نظر در شبکه مینشینند
مشکل اینجاست اگر مکان پوشه در شبکه لو بری این امکان بوجود میاد که کاربری که دسترسی فقط به 100 فایل رو داشت حالا به همه فایلها دسترسی داره
من دنبال روشی هستم که جلوی این اشکال رو بگیره
ممنون میشم راهنماییم کنید
یاعلی

vbhamed
سه شنبه 03 آبان 1390, 09:41 صبح
سلام

خب راههاي مختلفي وجود داره

مثلا يكي اينكه وقتي شما فايلي رو داخل پوشه اشتراكي قرار مي‌دي همزمان نام و مسير اون رو تو يك فيلد در يك جدول ذخيره كني و در يك فيلد ديگه آي دي كاربران مجاز براي دسترسي به اين فايل رو بدي و موقع ديكريپت كردن اگر آي دي كاربر جاري در ركورد مربوطه وجود داشت فايل رو براش ديكريپت كني يا راههايي از اين قبيل...

خلاصه بايد دنبال راهي باشي تا مكان فايل مهم نباشه، آخه با نرم افزار FileMonitor راحت ميشه فهميد مكان كجاست

ali190
سه شنبه 03 آبان 1390, 21:10 عصر
سلام
جناب vbhamed متوجه منظورتون نشدم
فرض کنید من همه فایلهام روی یک پوشه در سرور هست
لینک فایل هم در یک فیلد ذخیره شده است
حالا کاربر دیتاگرید مربوط به فایلها رو باز میکنه
روی یکی از فایلها کلیک میکنه و روی دکمه کپی کلیک میکنه تا فایل از اون مکان سرور به کامپیوتر یوزر (مثلاً Desktop اش ) منتقل بشه
آیا نرم افزاری Filemonitori وجود داره در این بین که فایل داره کپی میشه رد مسیر فایل از سرور رو بزنه؟
میشه نام نرم افزار رو هم بگید
ممنون
یاعلی

ali190
پنج شنبه 05 آبان 1390, 09:52 صبح
سلام
دوستان منتظر نظراتتون هستم
یاعلی

vbhamed
پنج شنبه 05 آبان 1390, 09:55 صبح
سلام

اسم نرم افزار همون FileMonitor هست و به محض اينكه دسترسي به فايلي به هر روشي ايجاد بشه اون رو كاملا مونيتور مي‌كنه و مسير و نام اون و حتي موقعيت كاراكتري كه از فايل خونده يا نوشته شده رو نشون مي‌ده

ali190
پنج شنبه 05 آبان 1390, 10:10 صبح
سلام
ممنون از پاسختون
ولی با این تفاسیر و روشها هیچ وقت نمیشه در شبکه برای کاربران فایلها رو share کرد بگونه ای که کاربران قابلیت الصاق فایل جدید رو در پوشه مورد نظر ردر شبکه داشته باشند
چون با Permission ای که برای این حالت باید به کاربر داد اون میتونه با استفاده از این نرم افزار به محل اختفای فایلها دسترسی پیدا کنه و همه فایلها رو دستخوش تغییر بکنه ، حتی اگر انکریپت شده باشند
واقعاً روش دیگه ای وجود نداره یا VB6 در این زمینه ضعف داره و راهکار دیگه ای نداره؟
ممنون
یاعلی

vbhamed
پنج شنبه 05 آبان 1390, 10:19 صبح
سلام

اول اينكه اين چيزها مربوط به برنامه نويسي و الگوريتم برنامه هست و ارتباطي به زبان نداره، ممكنه در زباني توابعي مثلا براي انكريپت و ديكريپت وجود داشته باشه ولي اين ربطي به ضعف زبان ديگه نداره

دوم اينكه وقتي شما فايلي رو انكريپت مي‌كنيد، برنامه خودتون هم بايد ديكريپتش كنه و اگر برنامه خودتون اول مجاز بودن كاربر رو چك كنه مي‌تونه در صورت تشخيص غيرمجاز بودن اون، فايل رو ديكريپت نكنه، پس كسي ديگه نمي‌تونه به فايلهاي غيرمجاز دسترسي داشته باشه
براي چك كردن اينكه كاربر مجاز به دسترسي به فلان فايل هست يا نه هم كه در پستهاي قبلي گفتم مي‌تونيد در يك ديتابيس فايلهاي مجاز هر كاربر رو يادداشت كنيد، حتي بهتره Checksum هم براي فايلها قرار بديد تا كاربر نياد فايلهاي مجاز ديگران رو به اسم فايلهاي خودش تغيير نام بده

ali190
پنج شنبه 05 آبان 1390, 10:31 صبح
سلام
جناب vbhamed عرض بنده اینه که یک فایل حتی در حالت انکریپت هم باز هم خصوصیات یک فایل داره
تمام موارد گفته شده در بالا در برنامه ام وجود داره
حتی برای بعضی از قسمتها بعد از اعتبار سنجی کاربر فرم مربوط جهت گشودن فایل باز نمیشود
ولی نکته در اینجاست»
فایلها در پوشه sharing در شبکه مثلاً در آدرس زیر وجود داره:
\\serever111\sharing
Permission هایی که برای کاربر در نظر گرفته شده به گونه ای هست که کاربر بتونه در ین پوشه فایل اضافه کنه
اگر کاربر بتونه با نرم افزار فوق الاشاره رد آدرس فایلها تو شبکه رو بزنه ، اصلاً میتونه برنامه من رو دور بزنه و مستقیماً بره سراغ پوشه sharing در شبکه و اون وقت فایلها رو حذف کنه یا مثلاً یه فایل دیگه هم نام با فایل مذکور در پوشه sharing رو Replace کنه
اینجارو چیکار میشه کرد

vbhamed
پنج شنبه 05 آبان 1390, 10:46 صبح
سلام

در مورد حذف فايل كار خاصي نميشه كرد، مگر استفاده از روشهاي غير معمول مثل ايجاد پارتيشن مخفي، پارتيشن با سايز سكتور غير استاندارد و ... كه البته پياده سازي مشكلي داره، يا اينكه محتويات فايل رو توي يك فيلد باينري در ديتابيس قرار بديد و كاربر مي‌دونه اگر ديتابيس رو حذف كنه كلا همه فايلها پاك ميشن، البته اگر ديتابيس Sql Server باشه كسي نمي‌تونه به راحتي حذفش كنه

اما در مورد Replace كردن، با استفاده از Checksum ميشه فهميد فايل تغيير كرده ولي اگر كاربر قصدش فقط خرابكاري باشه بازم بايد از راه بالا استفاده كنيد

البته احتمالا بايد بتونيد دسترسي به پوشه Share شده رو براي كاربران ببنديد ولي براي نرم افزار خاصي باز بزاريد

ali190
پنج شنبه 05 آبان 1390, 10:56 صبح
سلام

ر مورد حذف فايل كار خاصي نميشه كرد
منظورم همین بود ، پس راهی برای جبران این نقیضه وجود نداره؟

يا اينكه محتويات فايل رو توي يك فيلد باينري در ديتابيس قرار بديد
دیتابیسم Sql Server هست ، این روش هم رو هم تست کردم ولی به علت محدودیت در حجم اطلاعات و همچنین سرعت بسیار پایین :عصبانی++: از خیرش گذشتم

البته احتمالا بايد بتونيد دسترسي به پوشه Share شده رو براي كاربران ببنديد ولي براي نرم افزار خاصي باز بزاريد
میشه در خصوص این مطلب یه مقدار بیشتر توضیح بدید؟
پس جناب Vbhamed با توجه به صحبتهای پستهای قبل نقیضه برمیگرده به سیستم File Sharing ویندوز
بنظرم باید متد عوض بشه و برای به اشتراگ گذاشتن فایلها از روش دیگه ای استفاده بشه
اما چه روشی نمیدونم ...
یاعلی

ali190
جمعه 06 آبان 1390, 11:47 صبح
سلام
از اونجایی که سئوالم رو در تالار Vb.net هم مطرح کرده بودم فرمایشات جناب ASKaffash (http://barnamenevis.org/member.php?63973-ASKaffash) رو به این تایپیک انتقال میدم تا با در دست داشتن گزینه های بیشتر به یک راه حل اساسی دست پیدا کنیم:


بنظر شما این روش امن است ولی نمره امنیت این روش از 10 حتی 1 هم نیست اما راه حل :
- به هیچ وجه در شبکه و برای نرم افزارهائی که حتی 1٪ امنیت ارزش دارد از سرویس File Shearing استفاده نکنید
- اگر بانک اطلاعاتی SQLServer یا اراکل را استفاده می کنید از یک فیلد باینری برای ذخیره و بازیابی داده ها استفاده کنید
- اگر تمایل به استفاده از بانک اطلاعاتی را ندارید ومیتوانید از یک سرویس دریافت و ارسال فایل که خودتان باید کد نویسی کنید استفاده نمائید دراین حالت یک Application Server را لازم است بنویسید که برای مسیر فایلهای شما در Server از طریق برنامه خودتان سرویس ذخیره و ارسال فایل را انجام میدهد

روش ذخیره کردن در بانک اطلاعاتی را برای فایلهای خیلی حجیم کمتر باید بکار برد و به نظر من باید از طریق یک سرویس که مدیریت فایل را بین Client و AppServer انجام میدهد استفاده کرد (منظورم File Sharing نیست ) از طرفی برای فایلهای بزرگ ترجیحا از SQLServer2008 به بالا استفاد کنید و کندی هم الزام است بهر حال باید این حجم روی شبکه انتقال یابد ولی استفاده از روش مناسب برای انتقال هم روی سرعت و هم کیفیت انتقال اثر گذار است مثلا Copy کردن معمولی قطعا CPU را درگیر میکند ولی اگر یک سرویس داده با استفاده از Thread قطعا درگیری سیستم عامل را کمتر میکند بهر حال برای کارهای حجیم و پیچیده تنها روشهای معمولی برنامه نویسی کافی نیست و برنامه نویس باید حرفه ای تر به موضوع نگاه کند
جناب vbhamed هم چند راه رو پیشنهاد دادند:

سلام

در مورد حذف فايل كار خاصي نميشه كرد، مگر استفاده از روشهاي غير معمول مثل ايجاد پارتيشن مخفي، پارتيشن با سايز سكتور غير استاندارد و ... كه البته پياده سازي مشكلي داره، يا اينكه محتويات فايل رو توي يك فيلد باينري در ديتابيس قرار بديد و كاربر مي‌دونه اگر ديتابيس رو حذف كنه كلا همه فايلها پاك ميشن، البته اگر ديتابيس Sql Server باشه كسي نمي‌تونه به راحتي حذفش كنه
البته احتمالا بايد بتونيد دسترسي به پوشه Share شده رو براي كاربران ببنديد ولي براي نرم افزار خاصي باز بزاريد

از بین روشهای اشاره شده میخواستم بدونم روش App Server/Client که جناب کفاش عزیز توضیحش رو اینگونه داده اند:

یک Application Server را لازم است بنویسید که برای مسیر فایلهای شما در Server از طریق برنامه خودتان سرویس ذخیره و ارسال فایل را انجام میدهد
دقیقاً چیه و آیا این روش در مورد فایلهای حجیم (مثلاً تا حجم 1 گیگابایت) هم جواب میدهد؟
در مورد Sql Server2008 هم دو تاسئوال داشتم:
من الان دارم از SQl2000 اسفاده میکنم ، اگر بخوام SQL2008 رو جایگزین کنم فقط باید دیتابیسم رو توش Attach کنم و نیاز به تغییر کدی که نیست؟
محدودیت حجم ذخیره فایل در یک فیلد باینری در SQL2008 چقدر است ؟(در SQl2000 که تا 400 و خورده ای مگابایت بود)
ممنون و متشکر از لطف شما

ASKaffash
شنبه 07 آبان 1390, 09:37 صبح
سلام
سرعت و محدودیت در 2008 قابل مقایسه با 2000 نیست تست کنید خواهید دید
در خصوص از 2000 به 2008 فقط کافی است بانک را Attach کنید
در خصوص استفاده از Application Server بنظرم باید در یک تاپیک جداگانه بحث شود تا بعدها بماند

kitcat_m18
شنبه 07 آبان 1390, 18:53 عصر
خلاصه بهت بگم تو VB6 Application Server معنايي نداره (نمي خوام در موردش بحث کنم چون واقعا يه مبحث جداگانه هست) فقط همينقدر بهت بگم که يه چيزي تو مايه هاي سايت هايي مثل پرشين گيگ منظور دوستمونه.

من قبلا هم درباره اين مسئله با شما صحبت کردم شما دو راه داري:
1- دادن دسترسي اختصاصي به هر کاربر:
شما مياي رو کلاينت شماره يک يه يوزر به اسم مثلا Test1 تعريف مي کني بعد ميري تو سرورت ميگي اين يوزر Test1 فقط فلان پوشه رو با فلان دسترسي ببينه (که نياز به Domain Server داري)
2- برو از FTP استفاده کن:
به دو دليل يکي اينکه نياز نيست ساختار شبکت هر چي که هست رو عوض کني دوم اينکه به راحتي رو سرور خودت کاربر ها رو مديريت مي کني برو يه کم با FileZila نسخه سروري کار کن تا ببيني روشي که پيش گرفتي نمرش 1 هم نيست چون امنيت توش بي معنيه!

موفق باشي :لبخندساده:

aspppsa
چهارشنبه 27 دی 1391, 12:34 عصر
سلام
شما مطلب در مورد امن سازی file shearing دارید به من بدید؟

Mr'Jamshidy
پنج شنبه 28 دی 1391, 10:40 صبح
ببین نظر من اینه که شما اول از همه پروتکل ارتباطی رو مشخص کن (غیر از پروتکل های خود ویندوز)

من پست های قبلی رو نخوندم ها از الان گفته باشم

مثلا میتونی یک وب سرور بسازی و با اون دسترسی بدی

ASP رو نمیدونم اما PHP اجازه مدیریت فایل رو میده (دانلود، آپلود، ویرایش، حذف و ...) در موقع درخواست هم میتونی از بانک اطلاعاتی برای چک کردن سطح دسترسی کاربر استفاده کنی که کسی که اجازه این کار رو نداره نتونه

در آخر هم برای برنامه نویسی سمت کلاینت میتونی از وی بی استفاده کنی

اگر خواستی من میتونم برات یک نمونه بنویسم (ولی در حد یک نمونه نه بیشتر)

saber67
جمعه 29 دی 1391, 14:06 عصر
من زیاد تو این زمینه اطلاعات کاملی ندارم اما چیزایی که به ذهنم رسید رو میگم شاید به دردت خورد یا با کمک دیگر دوستان کامل تر شد
به نظر من پوشه رو share نکن!
یه برنامه بزار طرف سرور که کاربرا از طریق اون به فایل هاشون دسترسی داشته باشن! یعنی اگه بخوان فایلی رو حذف کنن به برنامه سرور درخواست بدن و برنامه سرور با بررسی حق دسترسی کاربر فایل رو پاک کنه
برای تغییر فایل و اضافه کردن هم ایده من اینه که وقتی کاربر درخواست دریافت فایل رو داد به برنامه سرور، واسه اون کاربر یه پوشه بسازی (با یه اسم راندوم که نشه حدس زد) و فایل هایی که بهشون اجازه دسترسی داره رو کپی کنی توش و اونو با تعیین دسترسی مورد نیاز (مثلا فقط خواندن یا خواندن و نوشتن) Share کنی براش و بهش نشون بدی (که البته فضای ذخیره زیادی لازم داری چون اگه 50 کاربر یه فایل 100 مگی رو بخوان باید 5 گیگ فضا حروم کنی)
یا برای راحتی بیشتر می تونی پوشه اصلی رو Share کنی اما به صورت فقط خواندنی! و تنها وقتی پوشه جدید بسازی و فایل رو کپی کنی توش که کاربر اجازه تغییر در فایل یا اضافه کردن فایل جدید رو داشته باشه!

Mr'Jamshidy
شنبه 30 دی 1391, 12:05 عصر
من زیاد تو این زمینه اطلاعات کاملی ندارم اما چیزایی که به ذهنم رسید رو میگم شاید به دردت خورد یا با کمک دیگر دوستان کامل تر شد
به نظر من پوشه رو share نکن!
یه برنامه بزار طرف سرور که کاربرا از طریق اون به فایل هاشون دسترسی داشته باشن! یعنی اگه بخوان فایلی رو حذف کنن به برنامه سرور درخواست بدن و برنامه سرور با بررسی حق دسترسی کاربر فایل رو پاک کنه
برای تغییر فایل و اضافه کردن هم ایده من اینه که وقتی کاربر درخواست دریافت فایل رو داد به برنامه سرور، واسه اون کاربر یه پوشه بسازی (با یه اسم راندوم که نشه حدس زد) و فایل هایی که بهشون اجازه دسترسی داره رو کپی کنی توش و اونو با تعیین دسترسی مورد نیاز (مثلا فقط خواندن یا خواندن و نوشتن) Share کنی براش و بهش نشون بدی (که البته فضای ذخیره زیادی لازم داری چون اگه 50 کاربر یه فایل 100 مگی رو بخوان باید 5 گیگ فضا حروم کنی)
یا برای راحتی بیشتر می تونی پوشه اصلی رو Share کنی اما به صورت فقط خواندنی! و تنها وقتی پوشه جدید بسازی و فایل رو کپی کنی توش که کاربر اجازه تغییر در فایل یا اضافه کردن فایل جدید رو داشته باشه!

دوست عزیز چرا به جای شیر کردن برنامه فایل مورد نظر رو ارسال نکنه؟