حماية مفاتيح الواجهة
حماية مفاتيح API الخاصة بالدفع: خمس قواعد بسيطة، والتدوير المخطَّط، وما يجب فعله بالترتيب حين يتسرّب مفتاح فعلًا إلى مستودع أو سجل.
مفتاح واجهتكم وحده يخوّل كل ما تغطيه صلاحياته: إنشاء روابط دفع، أو قراءة معاملاتكم، أو إصدار استردادات. فلا تمنحوه من الصلاحيات إلا ما يحتاجه إدماجكم فعلًا. لا عامل ثانٍ ولا تأكيد. إنه سرّ بالمعنى الكامل للكلمة.
القواعد الخمس
المفتاح يعيش على خادم، لا في متصفح أبدًا. لا في جافاسكريبت جهة العميل، ولا في تطبيق جوال — فملف .apk يُفكّك في ثوانٍ. وإن احتاجت واجهتكم الأمامية إطلاق دفعة، فلتستدعِ خادمكم أنتم، وهو يستدعي خادمنا. والبنية الكاملة لـiOS وAndroid موصوفة في الدفع داخل تطبيق الهاتف.
المفتاح يعيش في متغيّر بيئة أو خزنة أسرار، لا في الشيفرة. ولا حتى في مستودع خاص: فالمستودعات تغيّر حالتها، والمتعاونون يغيّرون أرباب عملهم، والنسخ الاحتياطية تُنسخ.
مفتاح الاختبار ومفتاح الإنتاج شيئان مختلفان. البادئة تقول ذلك — chari_sk_test_ مقابل chari_sk_live_ — والبيئة يحدّدها المفتاح نفسه. وهذا بالضبط ما يجعل إرسال اختبار إلى الإنتاج بالخطأ مستحيلًا. ويفصّل دليل المصادقة في توثيق الواجهة البرمجية الترويسة والاستثناء الخاص بنقاط /checkout/*. أما مفتاح الاختبار فتحصلون عليه دون انتظار: يفتح لكم ابدؤوا في وضع الاختبار السندبوكس فور التسجيل، وتنشئون المفتاح بأنفسكم من البوابة.
المفتاح لا يُكتب في سجل. انتبهوا لمتتبّعات الأخطاء وأدوات الرصد التي تلتقط ترويسات HTTP: تلك أشيع تسريب وأهدؤه، لأن السرّ ينتهي عند طرف ثالث دون أن يقرّر ذلك أحد.
المفتاح لا يُتبادَل عبر المراسلة. لا بالبريد، ولا على Slack، ولا عبر واتساب. فهذه القنوات تحتفظ وتفهرس وتنسخ احتياطيًا.
ما يقع فعلًا
السيناريو الذي نراه أكثر ليس هجومًا. بل مطوّر مستعجل يضع المفتاح في ملف إعدادات «للاختبار فقط»، ثم ينسى، ثم يدفع الشيفرة. والمستودع خاص، إذن «لا بأس». وبعد ستة أشهر يصير عامًّا، أو يصل إليه مقاول، أو تحطّ نسخة احتياطية في مكان آخر.
وثاني أشيع سيناريو هو ملف .env المُودَع في اليوم الأول للمشروع، قبل أن يكتب أحد ملف .gitignore. أما الهجمات الأخرى التي تستهدف التاجر — لقطات شاشة مزيّفة، وإيصالات مزيّفة، وولوج مسروق — فيتناولها مقال الاحتيال في الدفع الإلكتروني.
إن تسرّب مفتاح
بالترتيب، ودون انتظار:
- 1ألغوه. المفتاح المخترق ليس مفتاحًا يُراقَب، بل مفتاح يُحذَف. أنشئوا بديله أولًا إن أردتم تفادي انقطاع، لكن لا تؤجّلوا الإلغاء.
- 2اعتبروا التاريخ كله مكشوفًا. حذف الملف من المستودع لا يكفي: فهو يبقى في تاريخ git، والتاريخ يُستنسخ.
- 3انظروا ماذا فُعل به. يقول لكم سجل العمليات ما أُنشئ وما قُرئ وما استُرد، ومتى.
- 4عالجوا السبب. ملف
.gitignore، وفحص أسرار عند الإيداع، وخزنة — وإلا تكرّر الأمر.
التدوير المخطَّط
تدوير المفتاح لا ينبغي أن يكون حدثًا أبدًا — إنه صيانة. المفتاح الذي لم يُدوَّر قط مفتاح لا أحد يعرف كيف يدوَّر، وهذه المهارة تُكتشف دائمًا في أسوأ لحظة: أثناء تسريب.
الحركة بسيطة لأن مفتاحين يمكن أن يتعايشا مدة التبديل: أنشئوا الجديد، انشروه، تحققوا من مرور الحركة، ثم ألغوا القديم. بلا أي انقطاع. افعلوها أول مرة بلا استعجال، ودوّنوا الإجراء — أي سر، في أي مدير، يُنشر كيف — وضعوا موعدًا في التقويم. مرتان في السنة تكفيان؛ المهم ليس الوتيرة بل وجود العضلة.
ويفرض التدوير اكتشافًا مفيدًا أيضًا: القائمة الحقيقية للأماكن التي يعيش فيها المفتاح. إذا كسر التبديل خدمة لم يعد أحد يذكرها، فقد تعلمتم للتو شيئًا كان سيكلف أغلى بكثير أثناء حادث.
المفاتيح داخل فريق
بمطوّرَين، يمرّ المفتاح من يد إلى يد. بعشرة، ينتهي في قناة Slack أو ويكي أو ملف «مؤقت» — وكل واحد من هذه الأماكن تسريب قيد التحضير.
ثلاث قواعد تضبط الفريق:
- مكان واحد للحقيقة: مدير الأسرار. المفتاح المتداول في غيره يُعد مُخترقًا، من حيث المبدأ.
- للتكامل المستمر مفتاحه الخاص. تعمل اختبارات CI على بيئة الاختبار بمفتاح مخصص يمكن للتدوير أن يضحّي به دون مسّ الإنتاج. وهو المنطق نفسه الذي يقوم عليه فصل السندبوكس عن الإنتاج على الدوام.
- مغادرة عضو تُطلق تدويرًا. لا ارتيابًا — بل لأن جهازًا مُرجَعًا وحاسوبًا شخصيًا ومدير كلمات سر فرديًا أماكن لم تعودوا تتحكمون فيها.
وعادة لا تكلف شيئًا: مفاتيح الإنتاج لا تُعرض كاملة على الشاشة أبدًا. تبترها البوابة بعد الإنشاء؛ وينبغي لأدواتكم الداخلية أن تفعل مثلها.
ردّ الفعل الصحيح عند الانطلاق
قبل أول استدعاء لكم، أضيفوا .env و.env.local إلى .gitignore، وتحقّقوا أن أيًّا منهما ليس متتبَّعًا أصلًا في git. ثلاثون ثانية عند انطلاق مشروع، تتفادون بها الصنف الوحيد من الحوادث الأمنية الذي هو مبتذل ومكلف في آن.
وإنشاء المفتاح محميّ هو نفسه: تشترط البوابة إعادة المصادقة قبل كل عملية حساسة — وهي المصادقة القوية الموصوفة في صفحة الأمان. وتعرض المفتاح مرة واحدة لا غير، لحظة إنشائه، في نافذة لا تُغلق إلا بعد نسخه — ولا يُرسل بالبريد الإلكتروني أبدًا، ولا يُعرض بعد ذلك ثانية، ولا لكم أنتم. وهذا القيد مقصود: فالمفتاح الذي يمكن إعادة قراءته هو مفتاح ستعيدون قراءته يومًا في مكان لا تتحكمون فيه.
الخطوة التالية
الوقت المناسب لوضع هذه القواعد هو قبل أول مفتاح إنتاج. يطلب ابدؤوا في وضع الاختبار اسمًا وبريدًا إلكترونيًا مهنيًا واسم الشركة، ثم كلمة مرور تختارونها من رابط التفعيل الذي يصلكم بالبريد؛ بعدها تنشئون مفتاح الاختبار من البوابة وتضعونه مباشرة في خزنة الأسرار — مجانًا وبلا حدّ زمني. ويتابع دليل واجهة الدفع البرمجية في المغرب بقية الإدماج.
بقلم فريق ChariPay.