کلید API و IP مجاز؛ چطور اتصال به وب‌سرویس پیامک را امن کنیم؟

کلید API و IP مجاز؛ چطور اتصال به وب‌سرویس پیامک را امن کنیم؟

تیم وب‌سرویس برنامه‌نویسان

کلید API برای وب‌سرویس پیامک همان کاری را می‌کند که کارت بانکی برای حساب شما: هر کس آن را داشته باشد، می‌تواند از موجودی‌تان پیامک بفرستد. پس امنیت آن نه یک توصیهٔ فنی، که حفاظت مستقیم از پول شماست. در این مقاله می‌گوییم کلید API چیست و با چه لایه‌هایی می‌شود از آن محافظت کرد.

کلید API چیست و چرا جای رمز عبور را گرفته است؟

کلید API رشته‌ای طولانی و تصادفی است که نرم‌افزار شما در هر درخواست می‌فرستد تا سامانه بداند درخواست از طرف کیست. در درگاه پیامک (SMSGate) این کلید در سرآیند Authorization: Bearer ... فرستاده می‌شود. چرا از نام کاربری و رمز عبور استفاده نمی‌کنیم؟

  • رمز عبور مال آدم است، کلید مال نرم‌افزار. اگر رمز پنل را عوض کنید، نباید همهٔ سرورها از کار بیفتند.
  • کلید را می‌شود محدود کرد. یک کلید فقط ارسال کند، دیگری فقط گزارش بخواند.
  • کلید را می‌شود جداگانه باطل کرد بی‌آن‌که بقیهٔ سامانه‌ها آسیب ببینند.

اصل اول: برای هر سامانه یک کلید جدا

به جای یک کلید برای همه‌چیز، برای هر سرور، هر مشتری یا هر بخش کلید جدا بسازید؛ مثلاً «سایت فروشگاه»، «نرم‌افزار حسابداری»، «سرور آزمایشی». در درگاه پیامک هر حساب می‌تواند چند کلید داشته باشد و هر کلید سه ویژگی مستقل دارد:

  1. دسترسی (scope): هر کلید فقط کارهایی را می‌تواند انجام دهد که به آن اجازه داده‌اید. کلیدی که فقط برای ارسال است، نیازی به ساختن کلید دیگر یا انتقال اعتبار ندارد. اگر کلید سراغ عملیاتی برود که اجازه‌اش را ندارد، خطای ۱۰۵ برمی‌گردد.
  2. اعتبار جدا: هر کلید موجودی خودش را دارد که از حساب اصلی به آن منتقل می‌کنید. اگر کلیدی لو برود، بیشترین ضرر همان موجودی همان کلید است، نه کل حساب. وقتی موجودی کلید تمام شود، خطای ۱۲۵ (موجودی کلید ناکافی) می‌گیرید.
  3. IP مجاز: برای هر کلید فهرستی از IPها ثبت کنید؛ درخواست از هر جای دیگر با خطای ۱۰۴ رد می‌شود. IPv4 و IPv6 هر دو پذیرفته‌اند.

یک نکتهٔ مهم: مقدار کامل کلید فقط یک بار، همان لحظهٔ ساخت، نشان داده می‌شود. همان موقع آن را در جای امن ذخیره کنید.

IP مجاز: سدی که کلید لورفته را بی‌اثر می‌کند

فرض کنید کلید شما به‌اشتباه در یک مخزن کد عمومی قرار گرفته است. اگر برای آن IP مجاز ثبت کرده باشید، کسی که کلید را پیدا کرده از سرور خودش نمی‌تواند با آن پیامک بفرستد. به همین دلیل IP مجاز یکی از مؤثرترین و ارزان‌ترین لایه‌های امنیتی است.

خطای «IP مجاز نیست» را چطور رفع کنیم؟

  • IP خروجی واقعی سرور را پیدا کنید. اگر سرور پشت NAT، فایروال یا پراکسی است، IP خروجی با IP داخلی فرق دارد. از خود سرور یک سرویس «IP من چیست» را صدا بزنید.
  • بعد از جابه‌جایی هاست فهرست را به‌روز کنید؛ IP قدیمی دیگر به کاری نمی‌آید.
  • محیط توسعه را جدا کنید. به جای اضافه‌کردن IP رایانهٔ شخصی به کلید اصلی، یک کلید آزمایشی با اعتبار کم بسازید.

کلید را کجا نگه داریم؟

  • بله: متغیر محیطی سرور، فایل تنظیمات بیرون از مخزن کد، یا سامانهٔ مدیریت اسرار.
  • خیر: داخل کد منبع، داخل اپلیکیشن موبایل، جاوااسکریپت مرورگر، اسکرین‌شات، تیکت پشتیبانی یا پیام‌رسان.

اگر اپلیکیشن موبایل شما باید پیامک بفرستد (مثلاً کد تأیید)، اپ از سرور خودتان درخواست کند و سرور با کلید پیامک بفرستد؛ کلیدی که داخل فایل اپ باشد، با ابزارهای ساده استخراج می‌شود.

اگر کلید لو رفت

  1. بلافاصله یک کلید تازه با همان دسترسی‌ها بسازید و سامانه‌ها را به آن منتقل کنید.
  2. کلید قبلی را غیرفعال یا حذف کنید. (کلیدی که با آن وارد شده‌اید، خودش را نمی‌تواند حذف کند؛ این کار را با کلید دیگری انجام دهید.)
  3. گزارش ارسال‌های چند روز اخیر را مرور کنید تا ارسال ناشناخته‌ای نبوده باشد.

جمع‌بندی

سه عادت ساده بیشترِ خطر را از بین می‌برد: کلید جدا برای هر سامانه، دسترسی و اعتبار محدود برای هر کلید، و IP مجاز. جزئیات کامل ساختن کلید، انتقال اعتبار و مدیریت IPها در مستندات درگاه پیامک در doc.webservice.ir آمده است.