-
July 24th, 2020, 21:10
#1
استفاده از ماژول Secure Link در Nginx
سلام و درود
قصد دارم با استفاده از ماژول 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);
ممنون میشم عنایت بفرمایید.
ویرایش توسط esi20 : July 24th, 2020 در ساعت 22:40
-
-
July 24th, 2020 21:10
# ADS
-
July 24th, 2020, 22:35
#2
عضو دائم
پاسخ : استفاده از ماژول Secure Link در Nginx
باسلام
کد:
$secret = 'the_secret_key_configured_in_nginx';
جایگزین :
کد:
$secret = 'MySecret';
-
تعداد تشکر ها ازT.Toosi به دلیل پست مفید
-
July 24th, 2020, 22:42
#3
پاسخ : استفاده از ماژول Secure Link در Nginx
نوشته اصلی توسط
T.Toosi
باسلام
کد:
$secret = 'the_secret_key_configured_in_nginx';
جایگزین :
کد:
$secret = 'MySecret';
درود بر شما
عذر میخوام اشتباه گذاشته بودم کد PHP رو.
در واقع در حالی که سکرت MySecret هست لینک رو ایجاد میکنم که بازم 403 میده.
-
-
July 24th, 2020, 23:55
#4
عضو دائم
پاسخ : استفاده از ماژول Secure Link در Nginx
نوشته اصلی توسط
esi20
درود بر شما
عذر میخوام اشتباه گذاشته بودم کد PHP رو.
در واقع در حالی که سکرت MySecret هست لینک رو ایجاد میکنم که بازم 403 میده.
باسلام، یک پارامتر اشتباه هست (میتونه آیپی، path یا ... باشه) با آزمون و خطا مشکل را پیدا کنید. به صورت مثال فقط expire را بررسی کنید :
Nginx
کد:
secure_link_md5 "$secure_link_expires MySecret";
PHP
کد:
$md5 = md5("$expires $secret", true);
-
تعداد تشکر ها ازT.Toosi به دلیل پست مفید
-
July 25th, 2020, 00:19
#5
پاسخ : استفاده از ماژول Secure Link در Nginx
نوشته اصلی توسط
T.Toosi
باسلام، یک پارامتر اشتباه هست (میتونه آیپی، path یا ... باشه) با آزمون و خطا مشکل را پیدا کنید. به صورت مثال فقط expire را بررسی کنید :
Nginx
کد:
secure_link_md5 "$secure_link_expires MySecret";
PHP
کد:
$md5 = md5("$expires $secret", true);
سپاسگزارم از پیگیریتون.
ظاهرا اون متغییر uri انجین ایکس انکود شده نیست و حتما باید path رو انکود نشده فرستاد که md5 درست در بیاد.
-