PDA

View Full Version : یک سوال از دوستان حرفه ای در مورد ایجاد فایل برای دانلود کاربر بصورت امن



aliphp1
یک شنبه 23 تیر 1392, 00:30 صبح
سلام دوستان سوالم رو با یک مثال توضیح میدم که کامل متوجه بشید
فرض کنید یک سایت فروش شارژهست که کاربر بعد از پرداخت هزینه باید تعداد شارژ هایی که خرید رو بصورت یک فایل تکست دانلود کنه
حالا بهترین روش برای اینکه این لینک فقط برای این کاربر کار کنه (لاگین کرده باشه) و نشه ازش سوء استفاده کرد چیه ؟
درواقع یک روش امن می خوام برای این کار
با تشکر از دوستان گرامی

aliphp1
یک شنبه 23 تیر 1392, 01:06 صبح
دوستان کسی نبود کمک کنه

parsboy
یک شنبه 23 تیر 1392, 01:18 صبح
سلام دوستان سوالم رو با یک مثال توضیح میدم که کامل متوجه بشید
فرض کنید یک سایت فروش شارژهست که کاربر بعد از پرداخت هزینه باید تعداد شارژ هایی که خرید رو بصورت یک فایل تکست دانلود کنه
حالا بهترین روش برای اینکه این لینک فقط برای این کاربر کار کنه (لاگین کرده باشه) و نشه ازش سوء استفاده کرد چیه ؟
درواقع یک روش امن می خوام برای این کار
با تشکر از دوستان گرامی
باسلام دوست عزیززمانی که کاربری لاگین میکنه شما باید یه Session ایجادکنید
وزمانی کاربرمیتونه دسترسی داشته باشه که این Session ایجادشده باشه درغیراین صورت هیچ دسترسی نداره!
موفق باشید.

ayub_coder
یک شنبه 23 تیر 1392, 02:12 صبح
می تونی دسترسی به اون فایل رو با htaccess ببندی یا اینکه اون فایل روت خارج پوشه روت بذاری بعد بخونیش.

aliphp1
یک شنبه 23 تیر 1392, 02:26 صبح
نه دوستان مثل اینکه سوالم رو خوب نخوندید
یک دونه فایل که نیست توی همون مثالی که زدم در هر خرید یک فایل باید ایجاد بشه و کاربر دانلود کنه ولی باید طوری باشه که کسی غیر از همون کاربری که خریده نتونه اون فایل رو دانلود کنه

houshang.karami
یک شنبه 23 تیر 1392, 02:45 صبح
می توانید از GUID برای نامگذاری فایل تان استفاده کنید اگر کاربر اجازه یافت تا فایل را دانلود کنه شما باید یک فایل با روش نامگذاری GUID استفاده کنید سپس به کاربر نسبت دهید
GUID منحصر بفرد می باشد و احتمال باز سازی با حدس آن تقریبا نزدیک به صفر می باشد

aliphp1
سه شنبه 25 تیر 1392, 00:26 صبح
می توانید از GUID برای نامگذاری فایل تان استفاده کنید اگر کاربر اجازه یافت تا فایل را دانلود کنه شما باید یک فایل با روش نامگذاری GUID استفاده کنید سپس به کاربر نسبت دهید
GUID منحصر بفرد می باشد و احتمال باز سازی با حدس آن تقریبا نزدیک به صفر می باشد

ممنون لطف می کنید بیشتر توضیح بدهید ؟
یعنی همین که اسم فایل منحصر به فرد باشه کافیه؟
من می خوام حتی اگر کاربر اسم فایل رو هم حدس زد نتونه دانلود کنه

houshang.karami
سه شنبه 25 تیر 1392, 02:32 صبح
همچنين يك سري اسكريپت پك براي كنترل دانلود به صورت جاوا اسكريپت موجود هست
اگر دانلود تمام شد يا كاربر از ان صفحه اي كه دانلود مي كرد به صفحه ديگري رفت مي توانيد يك flag ازنوع boolean تعريف كنيد و ان را ست نماييد درضمن چون فايل هاي دانلودي شما بسيار كم حجم مي باشد شما همان به محض كليك كاربر اين flag را مي توانيد ست بكنيد
و سپس هر بار كه كاربر وارد قسمت دانلود مي شود اين flag را كنترل كنيد و به كاربر اجازه يا عدم اجازه دانلود فايل را بدهيد

lord_viper
سه شنبه 25 تیر 1392, 09:39 صبح
شما میتونی یه جدول بسازی
id
user_id
filename
هر کاربری که خرید میکنه فایل رو میسازین و ذخیره میکنین و اسم فایل و ایدی کاربری که اونو خریده رو اینجا ذخیره میکنین
موقع دانلود چک میکنین که ایا کاربری که میخواهد اونو دانلود کنه ایدیشو با user_id مقایسه کنید اگه یکی بود اجازه دانلود بدید

aliphp1
سه شنبه 25 تیر 1392, 18:40 عصر
دوستان راه های زیادی هست که اشاره کردید ولی من می خوام که بهترین راه رو پیدا کنم ضمن اینکه کامل توضیح بدید
با تشکر

Unique
سه شنبه 25 تیر 1392, 23:56 عصر
متاسفانه خوب توضیح نمیدید ! بعدش هم میگین یک فایل نیست و چند تا فایله !

دوست عزیز ، با توجه به اطلاعات زیر :
۱- شما این اطلاعات را توی پایگاه ذخیره میکنید !
۲ - توی سایت شما کاربران عضو هستند و نام کاربری و کلمه عبور مجزا دارند و امنیت لازم برای دسترسی به بخش های شخصی مهیاست !
۳ - شما میخواین کاربر بتونه یک فایل شامل اطلاعات شارژ های خریداری شده (من فرض میکنم excel آماری هستش) یا چند فایل برای هر خرید دانلود کنه (مسخره میشه چون هر excel فقط یک ردیف خواهد داشت)

خوب بهترین گار اینه که فایلی اصلا ایجاد نشه ! یعنی شما هر وقت کاربر خواست اون فایل را بگیره اول چک کنید لاگین کرده ، بعدش آمار شارژ های مربوط به این کاربر را در بیارین و به صورت excel یا csv (میتونه توی همون excel بازش کنه) در بیارین و با header به صورت یک فایل برای دانلودش بفرستین !

اینطوری اصلا فایلی نیست که امنیتش به خطر بیفه و هر کاربر فقط به اطلاعات خودش دسترسی داره !
شرمنده نمیتونم کد بنویسم اما تنها نکتش میتونه استفاده از header باشد که کافیه همین کلمه header و attachment را توی انجمن php جستجو کندیو کلی جواب بگیرین ! خود من حداقل ۱۰ توی ۱۰ تا پست کدهای نظیر گذاشتم !

موفق باشین.

aliphp1
چهارشنبه 26 تیر 1392, 18:57 عصر
ممنون از پاسخ شما
اگر توجه کرده باشین توی پست اول توضیح دادم
من یکسری شارژ مثلا میام توی دیتابیس وارد می کنم
بعد هر کاربری میاد تعداد درخواستی از هر نوع رو میزنه و فاکتور براش صادر میشه و پرداخت میکنه
حالا بعد از پرداخت موفق برای هر نوع شارژ یک لینک بیاد براش که فایل مربوطه رو دانلود کنه
فکر می کنم همین چیزی که شما گفتین بهترین کار باشه
فقط من نمی دونم چطوری بدون ایجاد فایل کاربر اون رو دانلود کنه
ضمنا می خوام فایل تکست باشه و مثلا هر روز توی یک خط باشه که البته این رو مشکلی ندارم الان می تونم همه این کارها رو انجام بدم فقط مشکل امنیت رو داشتم
ولی اگه فایل تولید نشه و کاربر بتونه دانلود کنه مشکل حل میشه

aliphp1
چهارشنبه 26 تیر 1392, 20:21 عصر
کد زیر رو دارم حالا نمی دونم چطوری محتوا رو بزارم توش (یعنی همون شارژ هایی که برای کاربر از دیتابیس خارج شده )

header('Content-type: application/txt');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.txt"');

Unique
پنج شنبه 27 تیر 1392, 00:37 صبح
خوب echo کنید ! در آخر هم (0)exit !


header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="sharj.txt"');

echo "this is the line you need to show to buyer !";
exit(0);

aliphp1
پنج شنبه 27 تیر 1392, 22:09 عصر
خوب echo کنید ! در آخر هم (0)exit !


header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="sharj.txt"');

echo "this is the line you need to show to buyer !";
exit(0);
نه منظورم اینه که چطوری محتوا رو بزارم توی فایل که دانلود بشه
مثلا شارژ ها که از دیتابیس خارج شده رو ریختم توی یه متغیر به نام $charge حالا این متغیر رو چطوری بذارم توی این هدر تا دانلود بشه
مثلا شما با همین هدر یه فایلی دانلود کنید که توش این باشه "1111111111111111111111111"

shahriyar3
پنج شنبه 27 تیر 1392, 22:14 عصر
ببین وقتی هدر ست میشه روی مثلا فایل تکست یا اکسل یعنی وقتی یوزر آدرس و وارد میکنه یا خودت ریدایرکت میکنی یوزر و اونجا چیزی که میبینه یه پیغام برای دانلود همون فایله که هدرش ارسال شده دیگه.
محتویاتش هم همون چیزی میشه که شما echo کردین . حالا هر چی که باشه .
همین چیزی که آقای Unique گفت درسته .

aliphp1
پنج شنبه 27 تیر 1392, 23:51 عصر
ببین وقتی هدر ست میشه روی مثلا فایل تکست یا اکسل یعنی وقتی یوزر آدرس و وارد میکنه یا خودت ریدایرکت میکنی یوزر و اونجا چیزی که میبینه یه پیغام برای دانلود همون فایله که هدرش ارسال شده دیگه.
محتویاتش هم همون چیزی میشه که شما echo کردین . حالا هر چی که باشه .
همین چیزی که آقای Unique گفت درسته .


بله درسته
شرمنده من تست نکرده بودم
از شما سپاسگذارم و از جناب Unique هم تشکر ویژه می کنم