TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #31 4.16K
💢 آدرس‌های امضاء شده در لاراول

فرض کنید یک سیستم خبرنامه دارید و کاربری درخواست لغو اشتراک خبرنامه را دارد، 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
  • 👍 10
  • ❤ 1
More from @developixlaravel
  1. Oct 10, 2026🛠 فیلترهای API را تمیزتر بنویس وقتی لیست کاربران فیلتر، مرتب‌سازی و صفحه‌بندی می‌خواهد، ش…
  2. Oct 10, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش چهارم - بررسی شماتیک سرویس در بخش چهارم آمو…
  3. Oct 9, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت دوم در بخش دوم از آمو…
  4. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  5. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  6. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
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 →