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:15 صبح
سلام
دوستان نظری در این باره ندارند؟

sina_saravi1
جمعه 29 مهر 1390, 00:51 صبح
روش شما روشی برای قایم شدنه نه مقابله کردن

یعنی وقتی کسی تونست پیدا کنه دیگه فرمونو دست میگیره
به نظر من فایل ها رو هم تو بانک اطلاعاتیت نگه داشته باش

ali190
جمعه 29 مهر 1390, 10:32 صبح
سلام
آیا روشی برای زدن رد فایلها در شبکه وجود دارد؟(نرم افزاری یا از طریق Command Promt)

به نظر من فایل ها رو هم تو بانک اطلاعاتیت نگه داشته باشآخه بعضاً حجم فایل هام خیلی زیاد میشه (مثلاً بعضی وقتها حجم یک فیلم به یک گیگابایت هم میرسد)
در ضمن تعداد رکوردهام هم خیلی بالاست
به نظرتون این روش منطقی هست؟
روش دیگه ای غیر از این روش وجود ندارد؟
ممنون
یاعلی

sina_saravi1
جمعه 29 مهر 1390, 11:56 صبح
اگه بانکتون SQL Server و طبق برنامه ریزی بهش رسیدگی بشه فکر نکنم مشکلی براش پیش بیاد ولی خب این خودش یه مسله است که وقتی چند نفر میخوان فایلی با اون حجم رو هم زمان دریافت کنن احتمال اینکه برای ارتباط با جداول صف ایجاد بشه هست
تا جایی که یادمه SQL Server میتونه حدود 40 کانکشن همزمان باز داشته باشه و بهشون رسیدگی کنه
حالا مدیریت نرم افزار و بانک بر میگرده به شما که این سازمان چند کاربر داره ؟ فایل ها به چه مقدار قراره دریافت و یا بروزرسانی بشه و...
که با این روش میشه یا نه!

ASKaffash
شنبه 30 مهر 1390, 08:50 صبح
سلام
بنظر شما این روش امن است ولی نمره امنیت این روش از 10 حتی 1 هم نیست اما راه حل :
- به هیچ وجه در شبکه و برای نرم افزارهائی که حتی 1٪ امنیت ارزش دارد از سرویس File Shearing استفاده نکنید
- اگر بانک اطلاعاتی SQLServer یا اراکل را استفاده می کنید از یک فیلد باینری برای ذخیره و بازیابی داده ها استفاده کنید
- اگر تمایل به استفاده از بانک اطلاعاتی را ندارید ومیتوانید از یک سرویس دریافت و ارسال فایل که خودتان باید کد نویسی کنید استفاده نمائید دراین حالت یک Application Server را لازم است بنویسید که برای مسیر فایلهای شما در Server از طریق برنامه خودتان سرویس ذخیره و ارسال فایل را انجام میدهد در معماری دات نت دست شما کمی بازتر است و روشهائی نظیر ذیل با کد کمتری محقق میشود (البته به الویت) :
- استفاده از DotNet Remoting
- استفاده از ٌWeb Service
- استفاده از WCF
- استفاده از Socket Programming
البته این نکته را باید ذکر کنم که پیاده سازی این مجموعه ها توان فنی خوبی را برای برنامه نویس می طلبد خودم روش Remoting را بعلت سرعت بهتر می پسندم

sina_saravi1
شنبه 30 مهر 1390, 13:48 عصر
سلام
بنظر شما این روش امن است ولی نمره امنیت این روش از 10 حتی 1 هم نیست اما راه حل :
- به هیچ وجه در شبکه و برای نرم افزارهائی که حتی 1٪ امنیت ارزش دارد از سرویس File Shearing استفاده نکنید
- اگر بانک اطلاعاتی SQLServer یا اراکل را استفاده می کنید از یک فیلد باینری برای ذخیره و بازیابی داده ها استفاده کنید
- اگر تمایل به استفاده از بانک اطلاعاتی را ندارید ومیتوانید از یک سرویس دریافت و ارسال فایل که خودتان باید کد نویسی کنید استفاده نمائید دراین حالت یک Application Server را لازم است بنویسید که برای مسیر فایلهای شما در Server از طریق برنامه خودتان سرویس ذخیره و ارسال فایل را انجام میدهد در معماری دات نت دست شما کمی بازتر است و روشهائی نظیر ذیل با کد کمتری محقق میشود (البته به الویت) :
- استفاده از DotNet Remoting
- استفاده از ٌWeb Service
- استفاده از WCF
- استفاده از Socket Programming
البته این نکته را باید ذکر کنم که پیاده سازی این مجموعه ها توان فنی خوبی را برای برنامه نویس می طلبد خودم روش Remoting را بعلت سرعت بهتر می پسندم

در مورد سوکت اطلاعات کافی دارم
وب سرویس هم همینطور
اون دو روش دیگه رو لطف میکنی توضیح بدی ؟

ASKaffash
یک شنبه 01 آبان 1390, 15:27 عصر
سلام
در روش DotNetRemoting (در جاوا هم مشابه دارد) شما یک App پیاده سازی میکنید که در آن از کلاس TcpServerChannel روی یک پورت خاص نرم افزار شما آماده ارائه سرویس است که از طریق یک خط URL هر Client میتواند متد یا پراپرتی و ... را از درون یک کلاس Common که باید از طریق Interface معرفی شده باشد ارائه و نرم افزار Client آن را با استفاده از کلاس Activatror که Cast به Interface می شود دریافت نماید

ali190
یک شنبه 01 آبان 1390, 20:45 عصر
سلام جناب کفاش عزیز
از توضیحاتتون ممنون و متشکرم

- اگر بانک اطلاعاتی SQLServer یا اراکل را استفاده می کنید از یک فیلد باینری برای ذخیره و بازیابی داده ها استفاده کنید
ولی یه نکته وجود داره
من حجم بعضی از فایلهام بالغ بر 1,5 گیگابایت هست
تعداد رکوردهای من هم نسبتاً زیاد هست
آیا این روش در تعداد بالای رکوردها اون هم در شبکه جواب میدهد؟
یک بار این روش رو تست کردم دیدم زمانیکه دیتابیسم رو بالا میارم هم سرعتم خیلی کنده هم حجم بسیار زیادی از رم سیستم داره اشغال میشه
ممنون میشم راهنماییم کنید
یاعلی

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