PDA

View Full Version : سوال: نحوه جلوگیری از دانلود مستقیم فایل



mirahsani
شنبه 19 بهمن 1392, 20:01 عصر
سلام
من یک سایت آپلودسنتر ساختم. همه چیزش اوکی هست. فقط نمی دونم چه جوری میشه جلوی دانلود مستقیم فایل را در سایت گرفت.
منظورم اینه که مثلا اگر کسی لینک مستقیم یک فایل در این آپلودسنتر را در سایت خودش گذاشت طرف که کلیک می کنه اول redirect بشه به سایت ما و از صفحه سایت ما دانلود را انجام بده. در غیر اینصورت زحمات سایت ما به هدر میره!
ممنون از پاسخ های مفیدتون (پیشاپیش)

kamranetemadi
یک شنبه 20 بهمن 1392, 00:48 صبح
از Handler استفاده کنید
با این دستور context.Request.UrlReferrer صفحه ای که لینک رو ارسال کرده بدست بیارید
اگر با صفحه ی تعریف شده یکسان نبود اجازه ی دانلود ندین

mirahsani
یک شنبه 20 بهمن 1392, 01:18 صبح
ممنون دوست عزیز
این دستورو کجا اضافه کنم؟ توی page_load یا begin_request global.asax ؟

mirahsani
یک شنبه 20 بهمن 1392, 01:21 صبح
مشکل اینه که معلوم نیست این دستورو کجا باید اضافه کرد؟! چون هیچ کدوم از 2 تابعی که بالا نوشتم هنگا دانلود یک فایل اجرا نمیشن!

EnKamran
یک شنبه 20 بهمن 1392, 12:44 عصر
یکم جست و جو میکردید دوست من بهتر بود. خدمت شما (http://sadin.ir/Article/2/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%84%DB%8C%D9%86%DA%A9-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF)

mirahsani
دوشنبه 21 بهمن 1392, 00:13 صبح
دوست عزیز جستجو کردم. لینک شما هم به دردم نخورد و جوابمو نداد! به هر حال ممنون

kamranetemadi
دوشنبه 21 بهمن 1392, 10:42 صبح
مشکل کار شما اینجاست که برای دانلود آدرس فایل رو مستقیما به کاربر میدید
عرض کردم از handler استفاده کنید
بجای آدرس فایل مورد نظر آدرس فایل رو با یک queryString به صفحه Handler بفرستید
در صورتی که صفحه ارسال کننده ی درخواست از سایت خودتون بود فایل رو response کنید
در غیر این صورت نه
برای این که ظاهر لینک ها حالت زیبا داشته باشه میتونید از UrlRouting استفاده کنید

Mohammad_dn
دوشنبه 21 بهمن 1392, 11:51 صبح
دوست عزیز میشه در رابطه با handlerبیشتر توضیح بدین؟؟؟مثلا من نمیخوام آدرس اصلی فایل برای کاربر نمایش داده بشه

kamranetemadi
دوشنبه 21 بهمن 1392, 12:19 عصر
دوست عزیز میشه در رابطه با handlerبیشتر توضیح بدین؟؟؟مثلا من نمیخوام آدرس اصلی فایل برای کاربر نمایش داده بشه

چرا که نشه؟؟

یک مثال ساده...

این کد داخل Handler:
<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.IO;

public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.UrlReferrer==null || context.Request.UrlReferrer.Authority == "localhost:2800")
{
string path = context.Request["file"];
context.Response.ContentType = MimeMapping.GetMimeMapping(path);
context.Response.TransmitFile(path);
}
return;
}

public bool IsReusable
{
get
{
return false;
}
}
}


این هم یک لینک ساده که یک درخواست از Handler داره

<a href="Handler.ashx?file=1.mp3">link</a>


همونطور که گفتم مثال سادس..
فایل و هندلر و صفحه ای که لینک داخلشه همه داخل روت هستن
دیگه منهدسی دسترسی و آدرس دهی با خود شما که چه پارامتر هایی ارسال کنید
آدرس ها رو سمت handler تکمیل کنید یا با استفاده از پارامتر هایی که میفرستید

mirahsani
دوشنبه 21 بهمن 1392, 13:09 عصر
ممنون از لطفتون. بررسی میکنم خبر میدم