• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ایجاد محدودیت دانلود فایل
#1
با عرض سلام خدمت تمام برنامه نویس های محترم من تازه عضو این انجمن شدم امیدوارم بتونم از دانش بیکران جمیع دوستان استفاده کنم و همچنین دانش اندکم رو با دوستان به اشتراک بذارم WinkWink

سوالم رو سعی میکنم دقیق بپرسم Smile
حقیقتا ما یک سایت دانلود فایل داریم که قراره دانلود فایل ها محدود بشن.راه کاری به ذهن من رسید این بود که مثلا از یک فایل php به عنوان واسط استفاده کنیم که اوشون مسیولیت دانلود فایل رو داشته باشه.
تا اینجاش حله مشکل زیادی بر نخوردم!اما داستان اصلی اینجاس که اگه یک نفر مثلا اسم اون فایل من رو داشته باشه،خب میتونه با زدن آدرس و رفتن به اون پوشه (البته طبق دسترسی ها بستم که لیست نکنه فایل رو) فایل رو دانلود کنه.حالا،ایا راهی هست که من محدود کنم اینو که هیچکس نتونه به اون شکل فایل رو دریافت کنه؟و فقط اون فایل رابط بهش دسترسی داشته باشه؟
این رو هم بگم که وب سرور من آپاچی هست که با نرم افزار Xampp روی ویندوز سرور 2008 ران شده.
  پاسخ
تشکر شده توسط :
#2
سلام

کافیه با استفاده از htaccess دسترسی همه فایل های پوشه دانلود به جز اون فایل php که دانلود ها رو انجام میده رو Deny کنید
  پاسخ
تشکر شده توسط : behradrvb
#3
(۱۳۹۷ فروردین ۱۵, ۱۱:۳۹ ب.ظ)MiladWorkShop نوشته: سلام

کافیه با استفاده از htaccess دسترسی همه فایل های پوشه دانلود به جز اون فایل php که دانلود ها رو انجام میده رو Deny کنید

سلام متشکرم.من الان یک فایل .htaccess ساختم و با دوتا دستور Order Deny,Allow
Deny from all بستم دسترسی رو.ولی هنوز اگه اسم فایل باشه بهش میشه دست پیدا کرد و راحت دانلود میشه.
  پاسخ
تشکر شده توسط :
#4
وب سرور هاستتون چیه ؟

اگه از سرور ویندوزی یا وب سرور انجینکس استفاده می کنید نمیتونید از htaccess استفاده کنید

نمونه کد htaccess که برای اعمال چنین محدودیتی استفاده میشه :

کد پی‌اچ‌پی:
Order allow,deny
Deny from All

<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch
  پاسخ
تشکر شده توسط : behradrvb
#5
(۱۳۹۷ فروردین ۱۶, ۰۸:۵۶ ب.ظ)MiladWorkShop نوشته: وب سرور هاستتون چیه ؟

اگه از سرور ویندوزی یا وب سرور انجینکس استفاده می کنید نمیتونید از htaccess استفاده کنید

نمونه کد htaccess که برای اعمال چنین محدودیتی استفاده میشه :

کد پی‌اچ‌پی:
Order allow,deny
Deny from All

<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch

اقا با تشکر درست شد.الان دیگه فایله به صورت مستقیم نمیشه دانلود کرد.
راستی وب سرورم آپاچی و سیستم عامل ویندوزه،ولی میشه با یه روش با rename از cmd،فایل htaccess بسازیم.الان هم من این کد شمارو قرار دادم واوکی شد.حالا یه سوال،اگر بخواهم اون فایل php دسترسی داشته باشه چه کدی رو باید اضافه کنم؟
  پاسخ
تشکر شده توسط :
#6
این بخش از کد :

کد پی‌اچ‌پی:
<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch

مشخص کردم که فایل index.php دسترسی داشته باشه, اگه اسم فایل php چیز دیگه هست کافیه index رو به اسم فایلتون تغییر بدید
  پاسخ
تشکر شده توسط : behradrvb
#7
(۱۳۹۷ فروردین ۱۷, ۱۲:۲۲ ق.ظ)MiladWorkShop نوشته: این بخش از کد :

کد پی‌اچ‌پی:
<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch

مشخص کردم که فایل index.php دسترسی داشته باشه, اگه اسم فایل php چیز دیگه هست کافیه index رو به اسم فایلتون تغییر بدید

اقا به شدددددددددت متشکرم از راهنماییتون.ولی یه سوال دیگه هم دارم ببخشید البته Smile
من با کد زیر به راحتی راه انداختم چیزی که میخواستمو
<Files "b.php">
Allow from All
</Files>

حالا اگه اون فایل b.php ما مثلا تو پوشه بالاتر (قبلی) باشه چیکار باید کرد؟؟
<Files "../b.php">
Allow from All
</Files>
رو هم گذاشتم ولی جواب نداد متاسفانه
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۷ فروردین ۱۷, ۰۶:۳۴ ب.ظ)behradrvb نوشته:
(۱۳۹۷ فروردین ۱۷, ۱۲:۲۲ ق.ظ)MiladWorkShop نوشته: این بخش از کد :

کد پی‌اچ‌پی:
<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch

مشخص کردم که فایل index.php دسترسی داشته باشه, اگه اسم فایل php چیز دیگه هست کافیه index رو به اسم فایلتون تغییر بدید

اقا به شدددددددددت متشکرم از راهنماییتون.ولی یه سوال دیگه هم دارم ببخشید البته Smile
من با کد زیر به راحتی راه انداختم چیزی که میخواستمو
<Files "b.php">
Allow from All
</Files>

حالا اگه اون فایل b.php ما مثلا تو پوشه بالاتر (قبلی) باشه چیکار باید کرد؟؟
<Files "../b.php">
Allow from All
</Files>
رو هم گذاشتم ولی جواب نداد متاسفانه

درود بر شما دوست عزیز
شما میتوانید یک پوشه مثلا با نام files بسازید و یک فایل .htaccess با محتویات زیر در داخل پوشه بسازید
Order allow,deny
Deny from All

<FilesMatch "^(index\.php)?$">
Allow from All
</FilesMatch>

حال اگر آدرس پوشه شما این است domain.ir/files
در پوشه بالایی یعنی در روت هاست شما یک فایل با نام b.php یا download.php باشد دسترسی آن محدود نمیشود و نیازی به تغییر کد اچ تی اکسس نیست.
دقت کنید که فایل های داخل پوشه files دسترسی مستقیم ندارند و شما برای دانلود فایل میتوانید پس از چک کردن محدودیت های دانلود در فایل پی اچ پی خود content-type را برابر با mime type فایل مورد نظر قرار داده و فایل را include کنید و یا میتوانید از readfile استفاده کنید
من برای سیستم مدیریت محتوای خودم از تابع زیر استفاده میکنم.
↓↓↓↓

function smartReadFile($location, $filename, $mimeType = 'application/octet-stream')

{

if (!file_exists($location))

{

header("HTTP/1.0 404 Not Found");

return;

}



$size = filesize($location);

$time = date('r', filemtime($location));



$fm = @fopen($location, 'rb');

if (!$fm)

{

header("HTTP/1.0 505 Internal server error");

return;

}



$begin = 0;

$end = $size;



if (isset($_SERVER['HTTP_RANGE']))

{

if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))

{

$begin = intval($matches[0]);

if (!empty($matches[1]))

$end = intval($matches[1]);

}

}



if ($begin > 0 || $end < $size)

header('HTTP/1.0 206 Partial Content');

else

header('HTTP/1.0 200 OK');



header("Content-Type: $mimeType");

header('Cache-Control: public, must-revalidate, max-age=0');

header('Pragma: no-cache');

header('Accept-Ranges: bytes');

header('Content-Length:' . ($end - $begin));

header("Content-Range: bytes $begin-$end/$size");

header("Content-Disposition: inline; filename=$filename");

header("Content-Transfer-Encoding: binary\n");

header("Last-Modified: $time");

header('Connection: close');



$cur = $begin;

fseek($fm, $begin, 0);



while (!feof($fm) && $cur < $end && (connection_status() == 0))

{

print fread($fm, min(1024 * 16, $end - $cur));

$cur += 1024 * 16;

}

}




پ.ن :
$location : آدرس فایل در هاست
$filename : نام فایل برای دانلود (نامی که فایل با آن در کامپیوتر و یا تلفن کاربر ذخیره میشود)
$mimetype : mimeType فایل
در صورتی که mimeType فایل مورد نظر را نمیدانید این argument را وارد نکنید
mimeType به صورت پیشفرض "application/octet-stream" میباشد که مرورگر این نوع contentType ها را مستقیما دانلود میکند.

اگر سوالی بود در خدمتم
  پاسخ
تشکر شده توسط : behradrvb
#9
(۱۳۹۷ فروردین ۱۷, ۰۶:۳۴ ب.ظ)behradrvb نوشته:
(۱۳۹۷ فروردین ۱۷, ۱۲:۲۲ ق.ظ)MiladWorkShop نوشته: این بخش از کد :

کد پی‌اچ‌پی:
<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch

مشخص کردم که فایل index.php دسترسی داشته باشه, اگه اسم فایل php چیز دیگه هست کافیه index رو به اسم فایلتون تغییر بدید

اقا به شدددددددددت متشکرم از راهنماییتون.ولی یه سوال دیگه هم دارم ببخشید البته Smile
من با کد زیر به راحتی راه انداختم چیزی که میخواستمو
<Files "b.php">
Allow from All
</Files>

حالا اگه اون فایل b.php ما مثلا تو پوشه بالاتر (قبلی) باشه چیکار باید کرد؟؟
<Files "../b.php">
Allow from All
</Files>
رو هم گذاشتم ولی جواب نداد متاسفانه

اگه فایل PHP که عملیات دانلود رو انجام میده توی پوشه دیگه ای هست و با آدرس دیگه ای فراخوانی میشه دیگه نیاز به قرار دادن کد زیر نیست :

کد پی‌اچ‌پی:
<FilesMatch "^(index\.php)?$">
    
Allow from All
</FilesMatch
  پاسخ
تشکر شده توسط : behradrvb


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان