PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : استفاده از ماژول Secure Link در Nginx



esi20
July 24th, 2020, 21:10
سلام و درود

قصد دارم با استفاده از ماژول secure_link لینک هایی با مدت زمان اعتبار معلوم ایجاد کنم ولی کلا 403 میگیرم.



server {
listen 80;
server_name sub.domain.xyz;

location / {
alias /home/www;
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr MySecret";


if ($secure_link = "") {
return 403;
}


if ($secure_link = "0") {
return 410;
}

}
}



کدهای فوق مربوط به کانفیگ nginx هست و لینک هم توسط کد PHP زیر ایجاد میکنم.



<?php




/**
* @param $baseUrl - non protected part of the URL including hostname, e.g. http://example.com
* @param $path - protected path to the file, e.g. /downloads/myfile.zip
* @param $secret - the shared secret with the nginx server. Keep this info secure!!!
* @param $ttl - the number of seconds until this link expires
* @param $userIp - ip of the user allowed to download
* @return string
*/
function buildSecureLink($baseUrl, $path, $secret, $ttl, $userIp)
{
$expires = time() + $ttl;
$md5 = md5("$expires$path$userIp $secret", true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);




return $baseUrl . $path . '?md5=' . $md5 . '&expires=' . $expires;
}




// example usage
$secret = 'MySecret';
$baseUrl = 'http://sub.domain.xyz';
$path = '/path/to/file.zip';
$ttl = 120; //no of seconds this link is active
$userIp = '195.99.99.99'; // normally you would read this from something like $_SERVER['REMOTE_ADDR'];




echo buildSecureLink($baseUrl, $path, $secret, $ttl, $userIp);




ممنون میشم عنایت بفرمایید.

T.Toosi
July 24th, 2020, 22:35
باسلام


$secret = 'the_secret_key_configured_in_nginx';

جایگزین :


$secret = 'MySecret';

esi20
July 24th, 2020, 22:42
باسلام


$secret = 'the_secret_key_configured_in_nginx';

جایگزین :


$secret = 'MySecret';

درود بر شما

عذر میخوام اشتباه گذاشته بودم کد PHP رو.
در واقع در حالی که سکرت MySecret هست لینک رو ایجاد میکنم که بازم 403 میده.

T.Toosi
July 24th, 2020, 23:55
درود بر شما

عذر میخوام اشتباه گذاشته بودم کد PHP رو.
در واقع در حالی که سکرت MySecret هست لینک رو ایجاد میکنم که بازم 403 میده.

باسلام، یک پارامتر اشتباه هست (میتونه آیپی، path یا ... باشه) با آزمون و خطا مشکل را پیدا کنید. به صورت مثال فقط expire را بررسی کنید :

Nginx


secure_link_md5 "$secure_link_expires MySecret";

PHP


$md5 = md5("$expires $secret", true);

esi20
July 25th, 2020, 00:19
باسلام، یک پارامتر اشتباه هست (میتونه آیپی، path یا ... باشه) با آزمون و خطا مشکل را پیدا کنید. به صورت مثال فقط expire را بررسی کنید :

Nginx


secure_link_md5 "$secure_link_expires MySecret";

PHP


$md5 = md5("$expires $secret", true);

سپاسگزارم از پیگیریتون.
ظاهرا اون متغییر uri انجین ایکس انکود شده نیست و حتما باید path رو انکود نشده فرستاد که md5 درست در بیاد.