همیشه یکی از دغدغه های برنامه نویسان مخفی کردن لینک عکس و تصاویر از دید کاربر می باشد. زیرا کاربر با دانستن آدرس دقیق تصاویر، می تواند به راحتی عکس ها و تصاویر را دانلود نماید. گاهی این تصاویر نباید برای همه قابل مشاهده باشد. بنابراین روشی که در این مطلب آورده شده است این است که همیشه فولدر تصاویر را از دید کاربر مخفی نماییم.
در زمان نوشتن این مطلب یکی از مشکلات شبکه اجتماعی اینستاگرام این است که شما با دانستن لینک مستقیم عکس ها و فیلم های کاربران (حتی آنهایی که صفحه خصوصی دارند و شما جزو فالورهای آنها نیستید) را دانلود نمایید.
یکی از روشها برای جلوگیری از این کار، مخفی کردن آدرس دقیق عکس ها می باشد. به این صورت که به جای آدرس مستقیم تصاویر (که شامل نام سایت و فولدری است که عکس ها آنجا قرار دارند مانند فولدر uploads) می تواند آدرس فایل PHP را قرار داد و در این فایل مشخص کرد که چه کسی می تواند تصویر و عکس را مشاهده نماید و چه کسی نمی تواند.
مثال
برای مثال کد HTML زیر را در نظر بگیرید
<img src="https://hbahonar.ir/uploads/my_image.jpg" />
همانطور که مشاهده می کنید آدرس مستقیم عکس و فولدری که عکس در آن قرار دارد (فولدر uploads) قابل مشاهده می باشد و کاربر با دیدن این کد متوجه می شود که تصویر در کجا قرار دارد.
اما با قرار دادن صفحه PHP به جای آدرس مستقیم، کاربر دیگر نمی داند که عکس در کدام فولدر قرار دارد.
<img src="https://hbahonar.ir/images.php?file_name=my_image.jpg" />
کد PHP
حال وقت آن فرا رسیده است که مشخص کنیم چه کسی می تواند این عکس را مشاهده نماید و چه کسی نمی تواند. برای این کار در فایل image.php کدهای زیر را قرار می دهیم.
if (!User::isLoggedIn()) {
header("Location: login.php");
exit();
}
if (User::UserID()==13) {
$contents = file_get_contents('./uploads/'.$_GET['file_name']);
echo $contents;
}
else {
echo '';
}
در کد بالا می گوییم که اگر کاربر لاگین کرده باشد و شناسه کاربر 13 باشد می تواند این عکس را مشاهده نماید در غیر این صورت محتوای عکس خالی خواهند بود.
نکته: تابع isLoggedIn و UserID توابع کلاس User هستند که شناسه کاربر و لاگین بودن کاربر را بازمیگردانند.
فواید مخفی کردن لینک عکس
- افزایش امنیت فایل ها
- کاربر دیگر آدرس دقیق عکس را نمی بیند
- کنترل مضاعف بر روی نمایش تصاویر
سخن آخر
درست است که اگر کاربر آدرس دقیق عکس را بداند باز هم می تواند آن عکس را مشاهده نماید اما با این روش پیدا کردن آدرس دقیق تصویر را برای کاربر مشکل می کنید. یعنی صرفا با راست کلیک کردن و کلیک بر روی Inspect نمی تواند آدرس مستقیم را مشاهده نماید. از این روش می توانید برای ایجاد لینک دانلود غیر مستقیم در PHP نیز استفاده نمایید.