TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #18 1.04K

Forwarded from | کانال توسعه‌دهندگان لاراول |

💢 آدرس‌های امضاء شده در لاراول

فرض کنید یک سیستم خبرنامه دارید و کاربری درخواست لغو اشتراک خبرنامه را دارد، URL مربوطه می‌تواند به شکل زیر باشد:

example.com/unsubscribe/4

وقتی کاربری این URL را باز می‌کند اشتراک خبرنامه کاربری با آیدی 4 لغو خواهد شد، حالا فرض کنید کاربری از روی عمد آیدی 4 را به 60 تغییر بدهد، در این صورت اشتراک خبرنامه کاربری با آیدی 60 هم بدون اطلاع خودش لغو خواهد شد. این سناریو می‌تواند به مرور باعث لغو اشتراک خبرنامه کلیه کاربران شود؛ یکی از ویژگی‌هایی که لاراول برای جلوگیری از این خراب‌کاری دارد، آدرس‌های امضاء شده است؛ با استفاده از URL های امضا شده، می‌توان تا حدودی از درخواست‌های ایجاد شده با URL های اصلاح شده و همچنین از خراب‌کاری‌های احتمالی جلوگیری کرد.

🔺ساختن یک Signed URL

در مثال بالا فرض کردیم URL لغو اشتراک خبرنامه به شکل زیر است:

example.com/unsubscribe/4

در نتیجه روت آن به این شکل خواهد بود:

Route::get('unsubscribe/{user_id}', '...')->name('unsubscribe');

برای امضاء و امن کردن این URL باید از متد signedRoute که در کلاس URL قرار دارد استفاده کنیم:


$url = URL::signedRoute('unsubscribe', ['user_id' => 1]);


نتیجه کد بالا به شکل زیر خواهد داشت:

example.com/unsubcribe/1/?signature=f834ed8570e05de6c50ad10bd6abcf71e9867fcb14bdf2670b4bf572ce346f3b

و اگر کاربری این URL را تغییر داد به هیچ‌وجه معتبر نخواهد بود و می‌توان این‌گونه از خراب‌ کاری‌های احتمالی جلوگیری کرد؛ همچنین لازم به ذکر است که با متد temporarySignedRoute می‌توان یک تاریخ انقضاء برای URL مان مشخص کنیم و تعیین کنیم URL مربوطه تا چه زمانی می‌تواند معتبر باشد:

$url = URL::temporarySignedRoute(

'unsubscribe',

now()->addMinutes(60), ['user' => 1]

);


🔺 اعتبار سنجی‌ آدرس‌های امضاء شده

برای اعتبار سنجی آدرس‌های مربوطه می‌توانید از متد hasValidSignature که در کلاس Request قرار دارد استفاده کنید و بررسی کنید که URL مربوطه معتبر است یا خیر:

Route::get('unsubscribe/{user_id}/', function (Request $request) {

if (! $request->hasValidSignature()) {
abort(401);
}

// ...
});


همچنین می‌توانید از میدل‌ور ValidateSignature استفاده کنید تا عملیات اعتبارسنجی خودکار انجام برای استفاده کردن از این میدل‌ور فقط کافی است که به فایل Kernel.php بروید و کد زیر را اضافه کنید:

protected $routeMiddleware = [
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
....
];


و در نتیجه این میدلور را به روت‌تان اضافه کنید:

Route::get('unsubscribe/{user_id}', '...')->name('unsubscribe')->middleware('signed');

از حالا به بعد این روت زمانی به درستی کار خواهد کرد که مقدار پارامتر signature معتبر باشید در غیر این صورت خطای 403 به کاربر نمایش داده می‌شود.

📍همچنین یک نمونه بسیار ساده از آدرس‌های امضاء شده در این مخزن ایجاد کرده‌ام که طبق نیاز می‌توانید آن را تغییر داده و استفاده کنید

🔗 اطلاعات بیشتر و داکیومنت مربوطه

👤 Maryam

💎 Channel: @DevelopixLaravel
  • 👍 14
  • 🔥 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →