مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

اوبالیت

عضویت از 1392/08/24

دسترسی و کنترل امنیت فایل های آپلود شده در سرور

  • شنبه 7 اسفند 1395
  • 11:23
تشکر میکنم

درود بر شما

برای اپلود فایل 2 استراتژی وجود داره: آپلود در پوشه و ذخیره آدرس در دیتابایس و یا اینکه مستقیم به صورت بایت ذخیره کردن در دیتابایس

روش دوم امنیت بالایی داره چون دسترسی به اون سخت هست. روش اول سریع تر هست و آسون.

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

ساختار جدول فایل در روش اول:

ID,

User_Id

Address که رشته ای از آدرس هست.

ساختار جدول فایل در روش دوم:

ID

User_Id

FileContent که بایت هست.

پاسخ های این پرسش

تعداد پاسخ ها : 14 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 7 اسفند 1395
  • 12:46

شما میتونید از مدل اول استفاده کنید و نام فایلها رو طوری قرار بدید قابل حدس زدن نباشه

مثلا با GUID بسازید

کاربر سایت

اوبالیت

عضویت از 1392/08/24

  • شنبه 7 اسفند 1395
  • 13:56

بازم امنیت نداره. پس باید در دیتابایس ذخیره کرد. اگر فایل حجیم باشه چی؟ asp.net تا چه حجمی پشتیبانی می کنه؟ (نیاز هست تایپیک جدید ایجاد کنم؟)

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 7 اسفند 1395
  • 14:01

چرا امنیت نداره دوست من ؟

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

حجم فایل رو شما تعیین میکنید و میتونید افزایش دهید

کاربر سایت

اوبالیت

عضویت از 1392/08/24

  • شنبه 7 اسفند 1395
  • 14:06

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

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 7 اسفند 1395
  • 14:11

چگونه میتونه به اون اسم دسترسی داشته باشه ؟

برای اطمینان بیشتر یک Handler درست کنید تا درخواست ها به فایل ها رو کنترل کنید و مطمئن بشید کاربر دسترسی داره یا خیر

کاربر سایت

اوبالیت

عضویت از 1392/08/24

  • شنبه 7 اسفند 1395
  • 14:17

دسترسی به هردلیلی شاید بدونه اسم فایل چیه و در یک مرورگر دیگه یا تب جدید اون رو Past کنه و بعد دانلود کنه.

این Handler رو بلد نیستم ایجاد کنم. باید چی کار کنم؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 7 اسفند 1395
  • 14:19

Http Handler ها وظیفه پاسخگویی به تمام درخواست هایی که از Http میاد رو دارند و میتونند همه رو کنترل کنند

براتون یک نمونه ضمیمه کردم

فایل های ضمیمه

کاربر سایت

rezatest

عضویت از 1396/06/07

  • پنجشنبه 9 شهریور 1396
  • 09:22

با سلام خدمت همه ی دوستان.

فرض کنید پوشه ای داریم به نام Upload که درون این پوشه فایل هایی که آپلود می شوند را درونش قرار بدیم. اما همانطور که می دونید برای عدم دسترسی به فایل های آپلود شده اومدیم از یک Handler استفاده کردیم. خوب تا اینجا درست هست و مشکلی نیست. اما مشکل اینجاست که این Hander در همه ی شرایط این بلاک کردن رو انجام میده. مثلا یک کنترل Image روی فرم قرار بدید و در فرم لود مثلا کد زیر را بنویسید

Image1.ImageUrl = "~/Upload/9.png";

خوب در اینجا همون Hander اجرا میشه و نمیذاره عکس به داخل Image1 لود بشه.

برای این مشکل چه باید کرد؟ با تشکر

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 9 شهریور 1396
  • 09:49

باید چک کنید اگر دخواست از سایت خودتون بود جواب بده و در غیر اینصورت بلاک کنه

میتونید از Requert.UrlReferer استفاده کنید

کاربر سایت

rezatest

عضویت از 1396/06/07

  • پنجشنبه 9 شهریور 1396
  • 10:03

میشه بیشتر توضیح بدین. باتشکر

کاربر سایت

rezatest

عضویت از 1396/06/07

  • پنجشنبه 9 شهریور 1396
  • 10:10

Requert.UrlReferer رو کجا باید بنویسم؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 9 شهریور 1396
  • 10:16

در HttpHandler


        public void ProcessRequest(HttpContext context)
        {
            if (context.Request.UrlReferrer == null || context.Request.UrlReferrer.Host.ToLower() != "localhost")
            {

                //string Ctr = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
                //string Action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();
                context.Response.Redirect("http://peyvandha.ir");
            }
        }

کاربر سایت

rezatest

عضویت از 1396/06/07

  • پنجشنبه 9 شهریور 1396
  • 10:49

باز هم بلاک میکنه

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 9 شهریور 1396
  • 10:51

در تاپیک جدا مطرح کنید و کدها رو قرار دهید

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)