با Sqids شناسههای کوتاه و امن برای URL بساز
خلاصهٔ کاملتر
تو این مقاله از Laravel News اومده که Sqids یه پکیج PHP هست که یه یا چند عدد صحیح غیرمنفی رو میگیره و به یه رشتهی کوتاه و امن برای URL تبدیل میکنه، و همون رشته رو هم میتونه دوباره به عددهای اصلی برگردونه. این پکیج جانشین Hashids هست و چون همین روش کدگذاری تو بیش از ۴۰ زبان پیاده شده، یه آیدی که تو PHP ساخته شده با تنظیمات یکسان تو JavaScript، Python یا Rust هم به همون شکل decode میشه. نسخهی PHP به PHP 8.1 و یکی از اکستنشنهای gmp یا bcmath نیاز داره.
نویسنده میگه رایجترین کاربردش پنهانکردن کلیدهای پشتسرهم دیتابیس تو URLهای عمومیه. وقتی آدرسهایی مثل /invoices/1 و /invoices/2 رو نشون میدی، عملاً به بازدیدکننده میگی چندتا رکورد داری و دعوتش میکنی کل بازه رو بالا و پایین کنه. اگه کلید اصلی رو encode کنی، بهجاش یه رشتهی مبهم میگیری.
ساختن آبجکت هیچ آرگومان اجباریای نمیخواد؛ یه آرایه از عددها رو به encode() میدی و با decode() برشون میگردونی:
$sqids = new Sqids();
$id = $sqids->encode([7, 8, 9]); // "ylrR3H"
$numbers = $sqids->decode($id); // [7, 8, 9]چون یه آیدی میتونه چندتا عدد رو همزمان نگه داره، میتونی مقدارهای مرتبط مثل شناسهی یه مدل و یه نوع رو تو یه توکن بستهبندی کنی و موقع برگشت یکجا بازشون کنی. بهصورت پیشفرض آیدی فقط به اندازهی لازم کوتاهه، پس عددهای کوچیک رشتههای خیلی کوتاه میسازن؛ با تنظیم minLength میتونی همهی آیدیها رو تا یه طول ثابت پُر کنی تا هم یکدست بشن و هم مقدارهای کوتاه و قابلحدس سختتر پیدا بشن.
نویسنده توضیح میده که با دادن یه alphabet سفارشی میتونی تعیین کنی چه کاراکترهایی و با چه ترتیبی تو آیدی ظاهر بشن؛ این کار مثل یه درهمریزی سادهی مخصوص اپلیکیشن عمل میکنه و خروجی رو نسبت به الفبای پیشفرض عوض میکنه. یه blocklist داخلی هم داره که کلمات رکیک رایج رو میشناسه و هر آیدیای که یکی از اونها توش باشه رو دوباره encode میکنه؛ این لیست رو میتونی با کلمات خودت جایگزین کنی.
نکتهی مهمی که نویسنده تأکید میکنه اینه که Sqids یه encoder هست نه ابزار رمزنگاری. خروجیش برای هر کسی که الفبا رو بدونه برگشتپذیره، پس نباید ازش برای محافظت از دادهی حساس یا بهجای کنترل دسترسی استفاده کنی. برای شناسههای عمومی، کوتاهکردن لینک، encode کلیدهای اصلی و توکنهای کوتاهمدت مثل لینکهای ورود یکبارمصرف مناسبه؛ ولی برای هر چیزی که باید مخفی بمونه باید سراغ رمزنگاری واقعی و احراز هویت درست بری.
نکات کلیدی:
- Sqids یه یا چند عدد صحیح غیرمنفی رو به رشتهی کوتاه و امن برای URL تبدیل و دوباره decode میکنه
- جانشین Hashids هست و تو بیش از ۴۰ زبان با خروجی سازگار پشتیبانی میشه
- نسخهی PHP به PHP 8.1 و اکستنشن gmp یا bcmath نیاز داره
- با minLength، alphabet سفارشی و blocklist میتونی خروجی رو تنظیم کنی
- یه encoder برگشتپذیره، نه رمزنگاری؛ جای احراز هویت و محافظت از دادهی حساس رو نمیگیره




