PDA

View Full Version : سوال: امنیت در php



mojtaba00
شنبه 02 خرداد 1388, 14:05 عصر
سلام به همه دوستان عزیز.
من می خوام یه سایت بنویسم که برای بعضی از فایلهایی که آپلود کردم، اجازه دسترسی قرار بدم . یعنی فقط افراد خاصی با نام کاربری و رمز عبور بتونن اون فایلها رو دانلود کنن.

ممنون میشم کمکم کنید.

امیـرحسین
شنبه 02 خرداد 1388, 15:09 عصر
این یک روشه که بجای لینک مستقیم به فایلها از لینک غیرمستقیم استفاده کنید مثل این:

http://site-domain/downlaod.php?file=abc.zip

و توی فایل downlaod.php، اول چک کنید که کاربر اجازه دسترسی به فایل رو داره یا نه. بعد دایرکتوری ها رو به اسم فایل اضافه کنید (یعنی آدرس فایل رو اینجوری کنید: dir1/dir2/dir3/files/abc.zip) و در مرحله آخر کد زیر رو اجرا کنید:

$file = 'files/' . $_GET['file'];

if (file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
else
{
echo "File Not Found!";
}
با این روش می تونید تو این لالوها یه کانتر هم برای شمارش تعداد داونلود برای فایل یا حتی برای هر کاربر درست کنید.

Yousha
شنبه 02 خرداد 1388, 15:42 عصر
سلام،


این یک روشه که بجای لینک مستقیم به فایلها از لینک غیرمستقیم استفاده کنید مثل این:
کد:
http://site-domain/downlaod.php?file=abc.zip

اگر اینطور وارد شد چی؟
http://site-domain/downlaod.php?file=../../../../../../../../../../../../etc/passwd%00
یا
http://site-domain/downlaod.php?file=config.php
یا
http://site-domain/downlaod.php?file=../../../boot.ini
یا
...؟؟

امیـرحسین عزیز، این روش اشتباه و خطرناک هستش.
ایشون می تونن با یک HTAccess ساده و ایمن اینکاو انجام بدن.

mojtaba00
شنبه 02 خرداد 1388, 16:49 عصر
سلام،

اگر اینطور وارد شد چی؟
http://site-domain/downlaod.php?file=../../../../../../../../../../../../etc/passwd%00
یا
http://site-domain/downlaod.php?file=config.php
یا
http://site-domain/downlaod.php?file=../../../boot.ini
یا
...؟؟

امیـرحسین عزیز، این روش اشتباه و خطرناک هستش.
ایشون می تونن با یک HTAccess ساده و ایمن اینکاو انجام بدن.
دوست عزیر میشه بگی توی htaccess چطوری میشه این روش رو گنجوند؟
جواب این سوال رو که بدید ممنون میشم.
ولی فکر کنم من سوال اولم رو درست مطرح نکرده باشم. من می خوام حتی اگر کسی آدرس فایل رو هم داشت، نتونه دانلود کنه. یعنی خود فایل امنیت داشته باشه.
ممنون میشم کمکم کنید.

امیـرحسین
شنبه 02 خرداد 1388, 18:55 عصر
سلام،

اگر اینطور وارد شد چی؟
http://site-domain/downlaod.php?file=../../../../../../../../../../../../etc/passwd%00
یا
http://site-domain/downlaod.php?file=config.php
یا
http://site-domain/downlaod.php?file=../../../boot.ini
یا
...؟؟

امیـرحسین عزیز، این روش اشتباه و خطرناک هستش.
ایشون می تونن با یک HTAccess ساده و ایمن اینکاو انجام بدن.
حق با شماست ولی این کارها به برنامه نویس مربوط میشه. من روش رو گفتم در ضمن وقتی دایرکتوری توی اسکریپت تعیین شه فکر می کنم مشکلش با داونلود فایل از جاهای دیگه حل شه.

sama01
شنبه 02 خرداد 1388, 20:41 عصر
در روش‌های ذکر شده توسط دوستان، شما به جای لینک مستقیم به فایل، به یک صفحه‌ی php وارد می‌شوید که محتوای آن، فایل مورد نظر شماست.
حال شما می‌توانید قبل از این که فایل را داخل صفحه کنید، به هر روشی که مایل بودید، کاربر را بررسی کنید تا در صورت مجاز بودن، بتواند دانلود کند.

mojtaba00
یک شنبه 03 خرداد 1388, 11:33 صبح
ممنون از اطلاعات دوستان.
من یه قسمت مشکلم حل شد. با htaccess و htpasswd. یعنی الآن فقط با نام کاربری و رمز عبوری که گذاشتم میشه فایل رو دریافت کرد. این مربوط میشه به هاست.
حالا قسمت دوم مشکل من. الآن برای دریافت فایل، با مرورگر یا با برنامه های دانلود رمز می خواد. حالا چطور می تونم داخل یه برنامه، نام کاربری و رمز عبور رو به هاست بفهمونم که به من اجازه دسترسی بده.

Yousha
دوشنبه 04 خرداد 1388, 12:09 عصر
مثال:


AuthName "SiteName Administration"
AuthUserFile /home/domain/.htpasswd
AuthType basic
Require valid-user
Order deny,allow
Deny from all
Allow from 24\.205\.23\.222
Allow from w3.org htmlhelp.com
Allow from googlebot.com
Satisfy Any

mojtaba00
سه شنبه 05 خرداد 1388, 12:25 عصر
مثال:


AuthName "SiteName Administration"
AuthUserFile /home/domain/.htpasswd
AuthType basic
Require valid-user
Order deny,allow
Deny from all
Allow from 24\.205\.23\.222
Allow from w3.org htmlhelp.com
Allow from googlebot.com
Satisfy Any

جوابه کاملیه ، تشکر.
یه سوال دیگه واسم مونده. این که به کی و به چه مرجعی اجازه دسترسی داده بشه معلوم شد.
دقیقا نمی دونم سوالم رو چطوری مطرح کنم. من می خوام یه برنامه بنویسم که توی اون برنامه یه نام کاربری و رمز عبور از کاربر بگیرم، بعد این اطلاعات رو بدم به هاست و هاست اجازه دسترسی بده، یعنی دیگه این کادر گرفتن پسورد توسط مرورگر ظاهر نشه
نمی دونم اصلا چنین چیزی امکان پذیر هست یا نه.
ممنون میشم جواب بدید.

Yousha
سه شنبه 05 خرداد 1388, 13:28 عصر
اگر با HTAccess خالص(Pure) انجام بدید امکان پذیر نیست.
ولی اگر PHP رو دخالت بدید، بله میشه.

mojtaba00
سه شنبه 05 خرداد 1388, 13:48 عصر
اگر با HTAccess خالص(Pure) انجام بدید امکان پذیر نیست.
ولی اگر PHP رو دخالت بدید، بله میشه.
میشه یه منبع بهم معرفی کنید که بتونم جواب سوالم رو بدست بیارم.

Yousha
چهارشنبه 06 خرداد 1388, 11:01 صبح
http://www.google.com/search?hl=en&q=PHP+HTAccess+session+auto+login&btnG=Google+Search&aq=f&oq=&aqi=