Skip to content

محافظت از امنیت API

در سرویس‌های API، X-Timestamp، X-Nonce، X-AccessKey و X-Signature اجزای اصلی رایج مکانیسم‌های امضای درخواست API هستند که در درجه اول برای احراز هویت، تایید یکپارچگی داده و جلوگیری از حملات تکراری استفاده می‌شوند.

تجزیه و تحلیل اجزای اصلی

1. X-Timestamp (زمان‌نشانی)

کارکردها

  • زمان شروع درخواست را记録 می‌کند (معمولاً timestamp یونیکس) برای اعتبارسنجی及时性 درخواست در سمت سرور.

مشکلات حل شده

  • جلوگیری از حملات تکراری: سرور یک دوره اعتبار timestamp تعیین می‌کند (مثلاً 5 دقیقه)، و مستقیماً درخواست‌های منقضی شده را رد می‌کند. مهاجمان نمی‌توانند درخواست‌های مشروع معتبر را پس از منقضی شدن تکرار کنند.
  • بررسی همزمانی: از انحراف زمانی بین کلاینت و سرور در یک محدوده معقول اطمینان می‌دهد، و از تأثیر دستکاری زمان بر اعتبار درخواست جلوگیری می‌کند.

2. X-Nonce (عدد تصادفی یک‌بار مصرف)

کارکردها

  • رشته تصادفی منحصر به فرد تولید می‌کند (مثلاً UUID) تا یکتایی هر درخواست را تضمین کند.

مشکلات حل شده

  • جلوگیری از درخواست‌های تکراری: سرور مقادیر Nonce را کش می‌کند (یا با timestamp ترکیب می‌کند) تا درخواست‌های تکراری که قبلاً پردازش شده‌اند را رد کند.
  • افزایش پویایی امضا: حتی برای درخواست‌های با پارامترهای یکسان، نتیجه امضا به دلیل Nonceهای مختلف متفاوت است، که از استفاده مجدد امضا جلوگیری می‌کند.

3. X-AccessKey (کلید دسترسی)

کارکردها

  • هویت کلاینت را شناسایی می‌کند (مثلاً کاربر، برنامه یا سرویس)، که معمولاً با SecretKey تعریف شده توسط سرور جفت می‌شود.

مشکلات حل شده

  • احراز هویت: بررسی می‌کند که آیا درخواست‌دهنده یک کلاینت قانونی ثبت شده است.

4. X-Signature (امضا درخواست)

کارکردها

  • کلاینت از SecretKey برای تولید امضا برای محتویات درخواست (پارامترها، مسیر، timestamp، Nonce و غیره) استفاده می‌کند، و سرور با استفاده از همان الگوریتم امضا را تأیید می‌کند.

مشکلات حل شده

  • یکپارچگی داده: تضمین می‌کند که درخواست در طول انتقال دستکاری نشده باشد (تغییرات پارامتر باعث شکست تأیید امضا خواهد شد).
  • جلوگیری از جعل هویت: مهاجمان بدون SecretKey نمی‌توانند امضا صحیح تولید کنند و نمی‌توانند درخواست‌های معتبر جعل کنند.
  • پیوند پارامترهای کلیدی: الگوریتم‌های امضا معمولاً شامل روش‌های درخواست، مسیرها، پارامترها و غیره هستند، که یکپارچگی بین محتویات درخواست و امضا را تضمین می‌کنند.

مثال فرآیند کلی

مراحل تولید امضا کلاینت

  1. داده‌های درخواست را ترکیب کنید
  2. از SecretKey برای تولید امضا از طریق الگوریتم رمزگذاری استفاده کنید و آن را در هدر X-Signature ذخیره کنید.
  3. X-Timestamp، X-Nonce، X-AccessKey و X-Signature را به هدرهای درخواست اضافه کنید و ارسال کنید.

فرآیند تأیید سمت سرور

  1. تأیید Timestamp: بررسی کنید که آیا در دوره اعتبار است (مثلاً ±5 دقیقه).
  2. تأیید Nonce: بررسی کنید که آیا قبلاً وجود دارد (برای جلوگیری از درخواست‌های تکراری، می‌تواند با timestamp کش شود).
  3. تأیید Signature: SecretKey مربوطه را از طریق AccessKey پیدا کنید، امضا را با همان الگوریتم تولید کنید، و آن را با X-Signature مقایسه کنید.
  4. پردازش نتیجه: اگر تمام تأییدها بروز کنند، منطق درخواست را اجرا کنید؛ در غیر این صورت، خطاهای 401 Unauthorized یا 403 Forbidden را بازگردانید.

خلاصه مزایای مکانیسم

کارکردروش پیاده‌سازی
احراز هویتAccessKey هویت کلاینت را شناسایی می‌کند، Signature تایید می‌کند که کلاینت دارای SecretKey معتبر است.
اقاوم در برابر دستکاری دادهامضا با محتویات درخواست (روش، مسیر، پارامترها و غیره) پیوند می‌کند، هر تغییری باعث شکست تأیید امضا خواهد شد.
جلوگیری از حملات تکراریTimestamp及时性 را تضمین می‌کند، Nonce یکتایی درخواست را تضمین می‌کند، مکانیسم‌های دوگانه درخواست‌های تکراری/منقضی شده را رد می‌کنند.
عدم انکارامضا می‌تواند منشأ درخواست را ردیابی کند، کلاینت‌ها نمی‌توانند از شروع درخواست‌های معتبر انکار کنند.

toolsetlink@163.com