View Full Version : سوال: نحوه محدود ساختن دسترسی برای دانلود از سایت؟
mrmohsen
شنبه 12 اردیبهشت 1388, 14:38 عصر
:تشویق:
با سلام خدمت دوستان
چه چوری می تونم به سطح دسترسی تععین کنم که کاربر مثلا برای گرفتن یه فایل زیپ یا دانلود باید حتما عضو بشه؟
که به کاربر ناشنخته اجازه ندهیم که به تمام منابع سایت دسترسی پیدا کنیم که بعد از در خواست دانلود او را ملزم به لاگین در سایت کنیم.
توی فایل وب کانفیگ این مطلب رو چه طوری ذکر کنم
البنه من برای کاربر ناشناخته جهت وارد شدن به یه بخش یا فرمی مثل بخش مدیریت مشکلی ندارم اما برای حالتی که کاربر بتونه تا حدودی صفحه رو ببینه اما برای داشتن امکاناتی بیشتر مثل منوی جستجویا دانلود باید به بخش لاگین هدایت بشه
ودوباره بعد از لاگین دانلودش ویا سطح دسترسی کامل بشه(داشتن امکان جستجو)
مشکل دارم؟
اگه راهنمایی کنید ممنون میشم
با تشکر از همتون
daffy_duck376
یک شنبه 13 اردیبهشت 1388, 07:41 صبح
شما برای عضویت و احراز هویت از چی استفاده می کنید ؟ از فرم ، SESSION کمی توضیح بدید اما یه دستوری هست که لینک رو به کاربر نشون نمی ده و کاربر باید روی کلید کلیک کنه
Response.AddHeader("Content-Disposition", "attachment; filename=blink-block.mp3");
eyes_shut_number1
یک شنبه 13 اردیبهشت 1388, 18:57 عصر
Response.AddHeader("Content-Disposition", "attachment; filename=blink-block.mp3"); میشه بگی هر قسمت ش چیکار میکنه؟لطفا
daffy_duck376
یک شنبه 13 اردیبهشت 1388, 19:03 عصر
این یه دستوره فقط قسمت آخرش (blink-block.mp3) نام فایلی هست که باید برای دانلود داده بشه. حال اگر کاربر به اون صفحه ای که این کد توش وجو د داره اگر دسترسی داشته باشه میتونه دانلود کنه . همون طور که میبینید کاربر لینک فایل رو نمی بینه فقط کلید رو میبینه مثل RAPID SHARE
shahab_ksh
دوشنبه 14 اردیبهشت 1388, 01:42 صبح
این یه دستوره فقط قسمت آخرش (blink-block.mp3) نام فایلی هست که باید برای دانلود داده بشه. حال اگر کاربر به اون صفحه ای که این کد توش وجو د داره اگر دسترسی داشته باشه میتونه دانلود کنه . همون طور که میبینید کاربر لینک فایل رو نمی بینه فقط کلید رو میبینه مثل RAPID SHARE
اگر فهمید چه ؟
به نظرم بهترین راه استفاده از لاگین + کد امنیتی + ارسال به استریم مرورگر یوسر هستش
و همچنین استفاده از روشی که فایل رو نشه در حالت عادی از سرور کش رفت مثل استفاده از SecureDownload.dll
RoostaYeBekr
دوشنبه 14 اردیبهشت 1388, 10:17 صبح
Response.AddHeader("Content-Disposition", "attachment; filename=blink-block.mp3"); میشه بگی هر قسمت ش چیکار میکنه؟لطفا
سلام
ببین من یک برنامه واست فرستادم که البته توش ننوشتم که این کد بالا چه کار می کنه. بلکه اون قسمتی که مد نظر شماست ، ( یعنی محدود ساختن سطح دسترسی ) ، توضیح دادم.
گرچه به نظر من باز هم سطح دسترسی محدود نشده و فقط کافیه کاربر بدونه که فایلی با فلان نام ، در فلان مسیر سایت هست و باز راحت دانلود می شه . حالا شما می خوای این فایلی که فرستادم ، ببین.
RoostaYeBekr
سه شنبه 15 اردیبهشت 1388, 13:01 عصر
اگر فهمید چه ؟
به نظرم بهترین راه استفاده از لاگین + کد امنیتی + ارسال به استریم مرورگر یوسر هستش
و همچنین استفاده از روشی که فایل رو نشه در حالت عادی از سرور کش رفت مثل استفاده از SecureDownload.dll
با سلام
من این SecureDownload.dll ی را که شما گفتی ، قبلا دانلود کرده ام . ولی در کامپیوتر من بازش نمی کند. احتمالا با 2008 است.
من ویژوال استادیو 2005 روی کامپیوترم نصب است.
کسی همین برنامه ای که فرستادم ، نسخه ی 2005 اش را دارد که در این تاپیک بگذارد؟
shahab_ksh
سه شنبه 15 اردیبهشت 1388, 15:56 عصر
این DLL برای دات نت دو هست یعنی با 2005 و 2008 مشکلی نداره کلا مهم نیست شما از کدام VS 2005 یا 2008 کار می کنید باید مشکل شما از جای دیگه ای باشه
mrmohsen
پنج شنبه 17 اردیبهشت 1388, 01:08 صبح
با تشکر از راهنمایی تون
اگه میشه مطالب رو جمع بندی کنید و نظر نهایی در مورد این موضوع را بیان کنید
milade
پنج شنبه 17 اردیبهشت 1388, 12:05 عصر
سلام دوست عزیز
با کمال احترام جوابهای دوستان سطحی بودند !
چرا که وقتی که یه کاربر عضو این Url فایل رو دید دیگه میتونن همه غیر عضوها هم اونو دانلود کنن !
یه راه حلش اینه که فایل دلخواهت رو هندل کنی ، یعنی موقع درخواست IIS به سراغ برنامت بیاد ، دستور رو بگیره و اجرا ...
اما خوب ممکنه سرور اختصاصی بخواد که مشکل هست ...
راه حلهای دیگه مثل چک سشن و ... که دوستان توضیح دادند میشه دورش زد اما خوب ...
حالا دیگه بستی به انتخاب خودتون داره
موفق باشید
RoostaYeBekr
پنج شنبه 17 اردیبهشت 1388, 19:00 عصر
من تو بعضی سایت ها دیدم که وقتی مثلا در یو آر ال زدم :
WWW.mmm.com/hello.zip (http://www.mmm.com/hello.zip)
از من یوزر نیم و پسورد می خواد. این یکی کار رو چطوری می توان انجام داد؟
iman_ad
پنج شنبه 17 اردیبهشت 1388, 19:44 عصر
بهترین روش استفاده از http handler هستش
درخواست به یک صفحه با پسوند .ashx فرستاده بشه که اسم فایل به سرور بفرسته.
بعد handler فایل بریزه داخله stream و با response بفرسته به page اصلی.
اینطوری user اصلا مسیر فایل نمی فهمه
داخل هندلر می شه authentication هم چک کرد.
milade
پنج شنبه 17 اردیبهشت 1388, 20:10 عصر
من تو بعضی سایت ها دیدم که وقتی مثلا در یو آر ال زدم :
WWW.mmm.com/hello.zip
از من یوزر نیم و پسورد می خواد. این یکی کار رو چطوری می توان انجام داد؟
همون طور که من و دوستان اشاره کردیم اون پسوند رو هندل کرده وبه وسیله Asp.net مدیریت میشه نه IIS
یه جستجو بکنید چرا که توضیح داده شده
موفق باشید
iman_ad
پنج شنبه 17 اردیبهشت 1388, 20:46 عصر
همون طور که من و دوستان اشاره کردیم اون پسوند رو هندل کرده وبه وسیله Asp.net مدیریت میشه نه IIS
یه جستجو بکنید چرا که توضیح داده شده
موفق باشید
در مورد چیزی که شما می گید بارها بحث شده
به نظر من اگه با url mapping هر url که مثلا پسوند zip دارد به یک صفحه با پسوند .ashx مپ کنیم می شه با handler هر کاری کرد.
milade
پنج شنبه 17 اردیبهشت 1388, 21:26 عصر
در مورد چیزی که شما می گید بارها بحث شده
به نظر من اگه با url mapping هر url که مثلا پسوند zip دارد به یک صفحه با پسوند .ashx مپ کنیم می شه با handler هر کاری کرد.
سلام دوست عزیز
اصلا" نیاز به مپینگ نیست که !
کافیه توی IIS پسوند ZIP یا هر چیز دیگه رو بفرستی برا Asp.net اون وقت توی Asp.Net تعریف کنی اگه کاربر عضو بود ... اگه نبود ...
شما یه جستجو بکن درباره HttpHandler و HttpModules و توی سایت هم هست مطالبی .
اگه نبود بگید یه اموزش بگزارم
موفق باشید
iman_ad
پنج شنبه 17 اردیبهشت 1388, 22:07 عصر
دوست عزیز من همه اینهایی که شما می گید می دونم
موضوع اینه تغییر asapi نیاز به تغییرات در iis هست
mrmohsen
جمعه 18 اردیبهشت 1388, 01:12 صبح
با سلام خدمت همه دوستان
از این که نظرات رو دیدم خوشحال شدم
ولی هنوزم من نتونستم از بین این نظرات جوابم بگیرم
مثلا این سایت در موقع این که یه کاربر مهمان درخواست دانلود میکنه ولی با پیغام عضویت مواجه میشه این پروسه به چه صورت انجام میشه؟
بازم از همه دوستان تشکر میکنم
:تشویق::تشویق:
milade
جمعه 18 اردیبهشت 1388, 08:11 صبح
موضوع اینه تغییر asapi نیاز به تغییرات در iis هست
سلام دوست عزیز
توی پست اولم اظهار داشتم که باید سرور اختصاصی داشت
البته شاید صاحب سرور پایه بود یه تغییر داد !
موفق باشید
RoostaYeBekr
جمعه 18 اردیبهشت 1388, 09:10 صبح
بهترین روش استفاده از http handler هستش
درخواست به یک صفحه با پسوند .ashx فرستاده بشه که اسم فایل به سرور بفرسته.
بعد handler فایل بریزه داخله stream و با response بفرسته به page اصلی.
اینطوری user اصلا مسیر فایل نمی فهمه
داخل هندلر می شه authentication هم چک کرد.
سلام
به نظر من هیچگاه نباید فکر کنیم که اصلا user مسیر فایل رو نمی فهمه
مثلا خود من خیلی وقت ها شده که دنبال فایلی برای دانلود بودم . مثلا با نام aaa.zip . خوب نرفتم که تمام سایت ها رو چک کنم. فقط رفتم توی جستجوی Google ، و اسم این فایل رو که سرچ کردم. بعد از سرچ Google ، چند تا لینک اومده که خیلی راحت ، مسیر فایل رو داده.
بعد منم اینطوری دانلودش کردم.
shahab_ksh
جمعه 18 اردیبهشت 1388, 13:32 عصر
سلام دوست عزیز
با کمال احترام جوابهای دوستان سطحی بودند !
چرا که وقتی که یه کاربر عضو این Url فایل رو دید دیگه میتونن همه غیر عضوها هم اونو دانلود کنن !
یه راه حلش اینه که فایل دلخواهت رو هندل کنی ، یعنی موقع درخواست IIS به سراغ برنامت بیاد ، دستور رو بگیره و اجرا ...
اما خوب ممکنه سرور اختصاصی بخواد که مشکل هست ...
راه حلهای دیگه مثل چک سشن و ... که دوستان توضیح دادند میشه دورش زد اما خوب ...
حالا دیگه بستی به انتخاب خودتون داره
موفق باشید
توجه نکردید ببین اصلا کاربر از آدرسی فایل رو دانلود نمیکنه که بخاد URL رو ببینه به استریم مرورگر کاربر فرستاده میشه پس URL در کار نیست
peymannaji
جمعه 18 اردیبهشت 1388, 18:55 عصر
این وسط 2 تا مقوله جدا از هم وجود داره :
1- اینکه کاربر مورد قبول ما هست یا خیر
2- از چه راهی استفاده شود که مسیر فایل لو نرود .
برای روش اول که من خودم از FormsAuthentication استفاده میکنم .
و برای گزینه دوم هم از این کد استفاده میکنم :
protectedvoid Page_Load(object sender, EventArgs e)
{
string dlDir = "downloadfiles/";
string strFileName = Request.QueryString("FileName");
string path = Server.MapPath(dlDir + Request.QueryString("FileName"));
System.IO.FileInfo toDownload = new System.IO.FileInfo(path);
if (IsSafeFileName(strFileName) && toDownload.Exists)
{
Response.Clear();
switch (System.IO.Path.GetExtension(strFileName))
{
case".zip":
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=NEWDL_" + toDownload.Name);
Response.TransmitFile(path);
break;
default:
// File Extension not supported.
}
Response.End();
}
}
ابتدا چک میکنم کاربر مجاز هست و سپس اجازه دانلود فایل رو میدم ... نمیدونم این بهترین راه هست یا خیر ولی میدونم که در این روش فشار به سرور به حداقل میرسه و یکی از روشهای بهینه و شناخته شده هست ...
fereshte22
چهارشنبه 10 تیر 1388, 11:03 صبح
این وسط 2 تا مقوله جدا از هم وجود داره :
1- اینکه کاربر مورد قبول ما هست یا خیر
2- از چه راهی استفاده شود که مسیر فایل لو نرود .
برای روش اول که من خودم از FormsAuthentication استفاده میکنم .
و برای گزینه دوم هم از این کد استفاده میکنم :
protectedvoid Page_Load(object sender, EventArgs e)
{
string dlDir = "downloadfiles/";
string strFileName = Request.QueryString("FileName");
string path = Server.MapPath(dlDir + Request.QueryString("FileName"));
System.IO.FileInfo toDownload = new System.IO.FileInfo(path);
if (IsSafeFileName(strFileName) && toDownload.Exists)
{
Response.Clear();
switch (System.IO.Path.GetExtension(strFileName))
{
case".zip":
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=NEWDL_" + toDownload.Name);
Response.TransmitFile(path);
break;
default:
// File Extension not supported.
}
Response.End();
}
}
ابتدا چک میکنم کاربر مجاز هست و سپس اجازه دانلود فایل رو میدم ... نمیدونم این بهترین راه هست یا خیر ولی میدونم که در این روش فشار به سرور به حداقل میرسه و یکی از روشهای بهینه و شناخته شده هست ...
سلام
من کدبالا رااجراکردم ولی از کدهای
Request.QueryString("FileName")
خطای زیررامی گیرد
Non-invocable member 'System.Web.HttpRequest.QueryString' cannot be used like a method.
ایا کلاس خاصی بایدتعریف شود
من این کدرادرسایت های مختلف دیدم که به همین صورت بودولی نمیدونم چرااین خطا را می گیره
peymannaji
پنج شنبه 11 تیر 1388, 17:59 عصر
این لینک رو ببینید نمونه کد هم داره :
http://www.30sharp.com/ShowArticle.aspx?nid=2&did=8&AuthorID=1
fereshte22
یک شنبه 14 تیر 1388, 09:23 صبح
سلام
خسته نباشید
ممنون ازراهنمایی شما مشکل من در این قسمت استIsSafeFileName
این تابع را باید به چه صورت تعریف کنیم؟
البته درلینکی که شما دادید این مسئله به این صورت چک شده بود
If (Regex.IsMatch(strFileName, "[/]") || Regex.IsMatch(strFileName, "[\\]")||
InStr(strFileName, "..") ||
Regex.IsMatch(strFileName, "^[^\\\./:\*\?\"<>\|]{1}[^\\/:\*\?\"<>\|]{0,254}$ "))
که ازاین خط خطای unrecognized escape sequence را می گیرد
Regex.IsMatch(strFileName, "^[^\\\./:\*\?\"<>\|]{1}[^\\/:\*\?\"<>\|]{0,254}$ "))
می شه بگید به چه صورت بایدچک بشه؟
e-arasteh
یک شنبه 14 تیر 1388, 13:53 عصر
سلام
برای کاربران عضو شده هنگام ثبت نام userId تعریف کن بعد هنگام ورود اون رو بذار تو session بعدش موقع دانلود چک کن اگه session خالی بود هدایتش کن به صفحه ثبت نام یا ورود
fereshte22
سه شنبه 16 تیر 1388, 08:06 صبح
سلام
برای کاربران عضو شده هنگام ثبت نام userId تعریف کن بعد هنگام ورود اون رو بذار تو session بعدش موقع دانلود چک کن اگه session خالی بود هدایتش کن به صفحه ثبت نام یا ورود
دراین قسمت مشکلی ندارم مشکلم وقتیه که فایل چک میشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.