نمایش نتایج 1 تا 7 از 7

نام تاپیک: مخفی کردن آدرس دانلود

  1. #1

    Question مخفی کردن آدرس دانلود

    با عرض سلام و خسته نباشید
    مقاله گرانقدری را در سایت iranasp.net دربارة httphandler خواندم و از آن استفاده کردم . اما همچنان مشکلاتی دارم که بعد از جستجوی اینترنت نتوانستم حلشان کنم و در هیچ کتابی هم راه حلی ندیدم .
    مشکل من این است که در سایتی با مسائل امنیتی بالا ، چندین گروه افراد مختلف ثبت نام و login می کنند اما فقط افراد بخصوصی که در بانک اطلاعاتی مشخص شده اند میتوانند فایلی را دانلود کنند . اگر به هر طریقی آدرسی برای یک لینک داده شود ، دیگران هم میتوانند از آن استفاده کنند و اگرفقط به login کردن آنها اکتفا شود افرادی با سطوح دسترسی پائین تر میتوانند به آن فایل دسترسی داشته باشند . مشکل من با ندادن آدرس حقیقی فایل حل خواهد شد . مثلا اگر بخواهیم یک attachment داخل mail در یاهو را دانلود کنیم هیچگاه آدرس واقعی را نخواهیم داشت و فقط یک آدرس طولانی که یک بار و در همان لحظه کار میکند را داریم . لطفا من را راهنمایی کنید . در ضمن من با visual basic 2003 کار میکنم و بانک اطلاعاتی هم sql server 2000 است و البته مدتها در این سایت صحبت های مربوط به این مشکل را دنبال کردم و به نتیجه مطلوبم نرسیدم .
    ممنون میشوم من را راهنمایی کنید . :لبخندساده

  2. #2
    سلام

    http://www.barnamenevis.org/sh...ad.php?t=19315
    +
    خلاقیت
    +
    سوال در صورت بروز مشکل
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  3. #3
    با سلام و تشکر از آقای آل طاها
    مثل تمام جوامع اینترنتی افراد تازه وارد جایگاه بسیار پائینی دارند .
    جناب آل طاها پاسخ شما را قبلا خوانده بودم ولی نتیجه ای نداشت .
    باز هم بخاطر پاسخ متشکرم
    یا حق

  4. #4
    مثل تمام جوامع اینترنتی افراد تازه وارد جایگاه بسیار پائینی دارند .
    نه دوست گرامی ، کمی زود قضاوت کردید.
    من نمی دونستم که تاپیک قبلی رو مطالعه کردید. به نظر من در اون تاپیک خوب صحبت شده و من واقعا نمی دونم مشکل شما کجاست؟ اما برای اینکه بهتون ثابت کنم اشتباه تصور می کردید یک باره دیگه مجددا به طور گام به گام توضیح می دم:


    سناریو: ما یکسری فایل داریم که هر کدوم یکسری Id دارن که توی دیتابیس ذخیره شدن. ما اونها رو با کدشون و extension ی aspx (علتش رو توضیح می دم) توی فولدر secureFiles ذخیره کردیم. در ضمن توی دیتابیس هم مشخص شده که چه کسانی به چه فایل هایی دسترسی دارند. حالا می خواهیم در یک محیط امن عملیات انتقال فایل رو انجام بدیم.

    solution:
    * نکته:
    - تابع Authenticate رو هر جا دیدید این کار رو انجام می ده که توی دیتابیس نگاه میکنه که ببینه user ما به فایل دسترسی داره یا خیر اگر داشت true و در غیر این صورت false بر میگردونه
    - تابع GiveMeFileName هم کد فایل رو میگیره و نام اون رو بر میگردنه

    1. یک HttpHandler بوجود بیارید. برای اینکه با مشکل مواجه نشید روی یک فولدر خاص این کار رو انجام بدید:
    <httpHandlers>
    <add verb="*" path="SecureFiles/*.*" type="SecureDownload.DownloadHandler,SecureDownloa d" />
    </httpHandlers>
    کد بالا باعث میشه تمام درخواست های فایلهایی که asp.net می تونه اونها رو هندل کنه توسط کلاس DownloadHandler هندل بشن. (تمامی extension ها توسط asp.net هندل نمیشن مثلا html ، zip و ... پس باید از طریق IIS اونها رو به لیست extension هایی که asp.net اونها رو هندل میکنه اضافه کنید. اما در این مثال فرض می کنیم که به IIS دسترسی نداریم و هر جا بخواهیم از Handler استفاده کنیم از extension ی aspx استفاده میکنیم)

    2. حالا یک کلاس می نویسیم تا بتونه عملیات download ما رو هندل کنه. برای این منظور باید اینترفیس IHttpHandler رو از Implement ، system.web کنید. این اینترفیس یک property ی readonly به نام IsReusable داره که طوری تنظیمش کنید که همیشه True برگردونه و یک متد ProcessRequest داره که یک پارامتر به نام context می گیره از نوع httpcontext که شما اون رو هم مثل object ی page در صفحات aspx تصور کنید.
     Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
    Dim fileID As String = context.Request.QueryString("fid")

    'if user have access we'll give him the requested file
    If Authenticate(GiveMeFileName(fileID), context.User.Identity.Name) Then
    With context
    .Response.Buffer = True
    .Response.Clear()
    .Response.AddHeader("content-disposition", "attachement; filename=" + GiveMeFileName(fileID))
    .Response.WriteFile(fileID & ".aspx")
    End With
    Else
    'otherwise give him a message
    context.Response.Write("<font color=red>Access Deny!")
    End If
    End Sub
    در کد بالا تنها چیزی که مفهوم نیست 2 تا مساله است:
    اول: در خط Response.AddHeader ... کاری می کنیم که نام فایل درست در اختیار کاربر قرار بگیره
    دوم: در خط Response.WriteFile ... فایل فیزیکی رو برای کاربر می فرستیم

    3. در آخرین مرحله کافیه که هر وقت خواستید فایلی رو به کاربر بدید با استفاده از کد اون فایل و به صورت مثلا SecureFiles/get.aspx?fid=X که X هم کد فایل هست ، اون فایل رو به کاربر بدید.

    اینم نمونه پروژه:
    فایل های ضمیمه فایل های ضمیمه
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  5. #5
    جناب آل طاها
    باز هم از صمیم قلب تشکر میکنم . در پی خواندن راهنمایی شما اگر با مشکلی برخوردم در همین جا بیان خواهم کرد .
    باز هم متشکرم و امیدوارم روزی بتوانم مانند شما کمکی برای دیگران باشم .

  6. #6
    سلام
    در اینجا هم همین بحث مطرح شده بود:
    http://www.barnamenevis.org/sh...ad.php?t=26071
    من خودم این روش رو تست کردم و خیلی عالی جواب میده

  7. #7
    در solution ای که در اون تاپیک در موردش بحث شده اگر کاربر به هر روشی (که احتمالش کم هم نیست مثلا Directory browsing) به آدرس حقیقی برسه می تونه فایل رو download کنه اما در اینجا این مشکل وجود نداره
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •