PDA

View Full Version : الگوریتمی برای جلوگیری کردن از دانلود یک فایل توسط افراد غیر مجاز



amircoco
جمعه 01 آذر 1387, 23:34 عصر
سلام دوستان
کسی الگوریتمی می تونه بگه که چطور می توان کاری کرد که تنها اعضای login کرده بتوانند یک فایل را دانلود کنند و کسی نتواند با نوشتن آدرس فایل به آن دسترسی داشته باشه؟

yaqubian
شنبه 02 آذر 1387, 07:57 صبح
دوست عزیز
این کار با session به راحتی قابل پیاده سازیه!
موفق باشید

narsic
شنبه 02 آذر 1387, 13:15 عصر
در تکمیل صحبت دوست مون یعقوبیان
session ها رو در یک فایل php بررسی کن و بعد از همون فایل لینک دانلود بده لینک دانلود مستقیم قرار نده .
موفق باشید

امید امرایی
شنبه 02 آذر 1387, 14:32 عصر
سلام دوستان
کسی الگوریتمی می تونه بگه که چطور می توان کاری کرد که تنها اعضای login کرده بتوانند یک فایل را دانلود کنند و کسی نتواند با نوشتن آدرس فایل به آن دسترسی داشته باشه؟

اگر با چگونگی تعیین اعتبار کاربر آشنا هستید و منظورتون اینه که از لینک مستقیم استفاده نکنید ، فایل ها رو در یک پوشه private قرار بدید و به منظور دانلود از ضمیمه ای که بنده در پست زیر قرار دادم استفاده کنید .
http://barnamenevis.org/forum/showthread.php?t=96456

amircoco
شنبه 02 آذر 1387, 22:21 عصر
در تکمیل صحبت دوست مون یعقوبیان
session ها رو در یک فایل php بررسی کن و بعد از همون فایل لینک دانلود بده لینک دانلود مستقیم قرار نده .
موفق باشید
فرمایش شما کاملا صحیح است ولی هر کس می توند با نوشتن ادرس فایل در Address Bar به راحتی بدون اینکه سشنی داشته باشد دانلود کند


اگر با چگونگی تعیین اعتبار کاربر آشنا هستید و منظورتون اینه که از لینک مستقیم استفاده نکنید ، فایل ها رو در یک پوشه private قرار بدید و به منظور دانلود از ضمیمه ای که بنده در پست زیر قرار دادم استفاده کنید .

با تعیین اعتبار آشنا هستم تنها الگوریتم دانلود فایل با لینک غیر مستقیم را می خواهم. متشکرم

yaqubian
یک شنبه 03 آذر 1387, 08:07 صبح
[qoute]فرمایش شما کاملا صحیح است ولی هر کس می توند با نوشتن ادرس فایل در Address Bar به راحتی بدون اینکه سشنی داشته باشد دانلود کند [/quote]
دوست عزیز
به اون راحتی هم که شما می فرمایین نیست. نمی دونم با متد session_regenerate_id کار کردید؟
موفق باشید

امید امرایی
یک شنبه 03 آذر 1387, 12:10 عصر
با تعیین اعتبار آشنا هستم تنها الگوریتم دانلود فایل با لینک غیر مستقیم را می خواهم. متشکرم

پس ببخشيد بنده چي عرض كردم ؟
اون متدي كه خدمتتون گفتم در همين مورد بود. وقتي فايلي در يك پوشه private قرار بگيره ابدا نمي شه با لينك مسقيم بهش دسترسي داشت.
كلاسي هم كه بهتون معرفي كردم كارش همينه كه اين فايل ها به صورت غير مستقيم دانلود مي كنه .

با session كه فرموديد آشنا هستيد و ديگه به خودتون مربوط مي شيد كه اين تعيين اعتبار انجام بشه يا خير .

amircoco
دوشنبه 04 آذر 1387, 10:44 صبح
پس ببخشيد بنده چي عرض كردم ؟
اون متدي كه خدمتتون گفتم در همين مورد بود. وقتي فايلي در يك پوشه private قرار بگيره ابدا نمي شه با لينك مسقيم بهش دسترسي داشت.

ممنون . میشه بگید یک پوشه را چگونه می توان private کرد

امید امرایی
دوشنبه 04 آذر 1387, 11:06 صبح
به ضورت پيش فرض يك پوشه با نام private_ در public_html وجود داره كه مي تونيد از اون استفاده كنيد .
در غير اين صورت با استفاده از FTP , File Manager و در كل Control Panel مي تونيد سطح دسترسي رو هم تغيير بديد.
و يا اگه مي خوايد اين كار رو با خود PHP انجام بديد مي تونيد از دستور chmod (http://ir.php.net/chmod) استفاده كنيد .

amircoco
دوشنبه 04 آذر 1387, 11:15 صبح
دوست عزیز
به اون راحتی هم که شما می فرمایین نیست. نمی دونم با متد session_regenerate_id کار کردید؟
موفق باشید

میدانم که برای ایجاد id جدید برای سشن می باشد اما با آن کار نکردم .

amircoco
دوشنبه 04 آذر 1387, 11:42 صبح
به صورت پيش فرض يك پوشه با نام private_ در public_html وجود داره كه مي تونيد از اون استفاده كنيد .
در غير اين صورت با استفاده از FTP , File Manager و در كل Control Panel مي تونيد سطح دسترسي رو هم تغيير بديد.
و يا اگه مي خوايد اين كار رو با خود PHP انجام بديد مي تونيد از دستور chmod (http://ir.php.net/chmod) استفاده كنيد .
من هردو روش شما رو امتحان کردم اول از پوشه private استفاده کردم و بعد فایل را با سطح دسترسی 600 ایجاد کردم و در پوشه downloads خود گذاشتم اما باز با نوشتن آدرس مستقیم آن دانلود شد.
URL: http://www.domain.com/_private/myfile.zip
URL: http://www.domain.com/download/myfile.zip

vahid4134
دوشنبه 04 آذر 1387, 12:50 عصر
من هردو روش شما رو امتحان کردم اول از پوشه private استفاده کردم و بعد فایل را با سطح دسترسی 600 ایجاد کردم و در پوشه downloads خود گذاشتم اما باز با نوشتن آدرس مستقیم آن دانلود شد.
URL: http://www.domain.com/_private/myfile.zip
URL: http://www.domain.com/download/myfile.zip
شما نباید لینک بدید. لینک شما باید به فایل php باشه. فایل php بررسی می کنه کاربر لاگین هست یا نه اگر لاگین بود فایل رو برای دانلود ارسال می کنه.

Bahram0110
دوشنبه 04 آذر 1387, 13:15 عصر
من هردو روش شما رو امتحان کردم اول از پوشه private استفاده کردم و بعد فایل را با سطح دسترسی 600 ایجاد کردم و در پوشه downloads خود گذاشتم اما باز با نوشتن آدرس مستقیم آن دانلود شد.
URL: http://www.domain.com/_private/myfile.zip
URL: http://www.domain.com/download/myfile.zip
هر پوشه ای که می خوای دسترسیشو محدود کنی :
یه فایل .htaccess بساز و اینو توش بنویس :

deny from all

amircoco
دوشنبه 04 آذر 1387, 13:42 عصر
شما نباید لینک بدید. لینک شما باید به فایل php باشه. فایل php بررسی می کنه کاربر لاگین هست یا نه اگر لاگین بود فایل رو برای دانلود ارسال می کنه.
بله ولی فرد غیرمجاز که میتونه آدرس URL فوق الذکر را بده و به فایل دسترسی داشته باشه.


هر پوشه ای که می خوای دسترسیشو محدود کنی :
یه فایل .htaccess بساز

آیا اینکار باعث نمیشه از لینکی که برای دانلود به افراد مجاز میدم جلوگیری بشه

narsic
دوشنبه 04 آذر 1387, 14:42 عصر
با سلام
دوست عزیز مقاله ایی با این نام Secure File Download (javascript:;) رو از این سایت بگیر http://www.babaei.net/ برای پیدا کردن مقاله از سمت راست منو گزینه Article رو انتخاب کن بعد از اون بین مقالات مقاله بالا رو انتخاب کن و دانلود کن همون چیزی که نیاز داری فقط زبانش فرق میکنه که با درک کلی پروژه میتونید خودتون بنویسید .
موفق باشید
یک استفاده نا مناسب از تکنولوژی های روز مثل Ajax باعث عدم وجود لینک مستقسم شد به امید آن که ابتدا نحوه استفاده از یک چیز را فرا بگیریم سپس شروع به استفاده از آن کنیم

vahid4134
دوشنبه 04 آذر 1387, 16:14 عصر
بله ولی فرد غیرمجاز که میتونه آدرس URL فوق الذکر را بده و به فایل دسترسی داشته باشه.

آیا اینکار باعث نمیشه از لینکی که برای دانلود به افراد مجاز میدم جلوگیری بشه
یا فایلت رو قبل از پوشه www بزار با htaccess هم که دوست عزیز گفتند

yaqubian
دوشنبه 04 آذر 1387, 21:20 عصر
دوست عزیز
تنها راه حل شما استفاده از ajax و یا همون htaccess هستش.
موفق باشید.

musiox
سه شنبه 05 آذر 1387, 07:43 صبح
تنها راه حل شما استفاده از ajax
یعنی بدون Ajax نمی شه همچین کاری انجام داد؟

شما نباید لینک بدید. لینک شما باید به فایل php باشه. فایل php بررسی می کنه کاربر لاگین هست یا نه اگر لاگین بود فایل رو برای دانلود ارسال می کنه.
و


یا فایلت رو قبل از پوشه www بزار با htaccess هم که دوست عزیز گفتند

I,Nobody
سه شنبه 05 آذر 1387, 08:34 صبح
فكر نمي كنم اجباري در استفاده از AJAX باشه.
ضمناً كلاس هاي زيادي براي اين كار وجود داره و همچنين با تنظيم htaccess ميشه از لينك مستقيم جلوگيري كرد

اين لينك كاملاً راهنمايي ات ميكنه :
http://forums.codewalkers.com/php-coding-7/secure-file-909634.html

yaqubian
سه شنبه 05 آذر 1387, 12:01 عصر
دوست عزیز musiox
فکر کنم اشتباه نگارشی من باعث شده شما این برداشت رو بکنید. اگه ادامه جمله رو می خوندید:
تنها راه حل شما: استفاده از ajax و یا همون htaccess هستش.
می خواستم بحث رو تموم کنم که این جمله رو نوشتم.
بازم ممنون
موفق باشید

امید امرایی
پنج شنبه 07 آذر 1387, 09:51 صبح
من هردو روش شما رو امتحان کردم اول از پوشه private استفاده کردم و بعد فایل را با سطح دسترسی 600 ایجاد کردم و در پوشه downloads خود گذاشتم اما باز با نوشتن آدرس مستقیم آن دانلود شد.
URL: http://www.domain.com/_private/myfile.zip
URL: http://www.domain.com/download/myfile.zip

قطعا شما مرتكب اشتباهي شديد
http://www.kassit.com/_private

amircoco
پنج شنبه 07 آذر 1387, 15:30 عصر
با تشکر از I,Nobody
در فروم cod walker شخصی با لقب IamALlama در مورد این مسئله بسیار کامل توضیح دادند:



well you should use a php script to start the download. That way the user is never made aware of where the file is at. Then you put the file in either a directory outside of the web root but still accessable by scripts or put it inside a directory and use a .htaccess file with "deny from all" in it that way a browser wouldn't have access to the file but a script would.

an example:



<?php
//path to some secret directory.
$dir = 'someSecretDir/';
//get the filename from $_GET
$file = $isset($_GET['file'])?$_GET['file']:false;

//this validates the filename, filetype (extension) and makes sure it exists.
//also notice the list of valid extensions part of preg_match
//you can add more to that list by adding to exe|zip|some|other|extension
//just add the allowed extension inside the parenthesis with each one
//separated by |
if($file != false && preg_match('/^[a-z0-9]+\.(exe|zip)$/i', $file) && file_exists($dir.$file)){
//send the force download header.
header("Content-Disposition: attachment; filename=" . urlencode($file));
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($dir.$file));
//read the file and send it out to the user.
readfile($dir.$file);
} else {
//file not found or invalid.
echo "Unable to download file. The file was either not found or not a valid type.";
}

?>


That will read a specific file from a directory specified at the top and not show the user the full path to where the file is. You should also add some login verification to the top and then only someone logged in can download. Then if you use apache, in the directory with the files (and no other files like scripts because you will be denied access to them by browser) you put a .htaccess file with this inside it to prevent direct browser access to the files:



deny from all

musiox
پنج شنبه 07 آذر 1387, 22:17 عصر
خب اگه شما دقت کنی می بینی که آقا وحید داشتن همینو می گفتن . فقط شما جزئیات رو نمی پرسیدی .

امید امرایی
جمعه 08 آذر 1387, 00:47 صبح
کلاسی هم که بنده بهتون معرفی کردم از همین متد استفاده می کنه و بسیار کامل تره

narsic
شنبه 09 آذر 1387, 17:35 عصر
به نظر من همون مقاله ایی که لینک گذاشتم کامل و عالی بود .
فقط به زبان asp بود که با یه کم تغییر میشد به راحتی ازش استفاده کرد.
تغیراتش برگرداندن به php و استفاده از بانک اطلاعاتی بود