DanLevy.net

حماية رموزك ومفاتيح API وأسرارك

عام؟ خاص؟ إيه؟

Hero image for حماية رموزك ومفاتيح API وأسرارك

متى يجب حماية رموزك؟

تأمين مفاتيح API والرموز أمر بالغ الأهمية!

خطأ واحد قد يؤدي إلى فقدان السيطرة على خادمك وبياناتك لصالح المخترقين!

لا ينبغي أن يكون من الصعب تحديد ما إذا كان يجب إخفاء رمز معين - حتى بناءً على الوثائق الرسمية!

غالبًا ما يزداد الأمر سوءًا بسبب خليط المصطلحات ذات الصلة التي ستواجهها: الرموز، المفاتيح، بيانات الاعتماد، الأسرار، الخاصة، و_العامة_.

دعنا نعيد صياغة هذا على أنه بين سري وغير سري.



🔒 المفاتيح السرية

** ‼️ مهم:** المفاتيح السرية يجب أن يتجاهلها Git و تُحذف من جميع أكواد المتصفح. كيفية استخدام dotenv


كيف تعرف أنك تتعامل مع مفتاح سري؟


👍 قاعدة عامة: الخوادم التي تُرجع أخطاء CORS تفتقر إلى دعم المتصفح. هذا يشير بقوة إلى أنك يجب أن تُمرر الخدمة عبر وسيط (proxy)، وتتعامل معها كما لو كانت سرية.

👍 قاعدة عامة: الخدمات المكلفة يجب (دائمًا تقريبًا) أن تُمرر عبر وسيط أو تُخفى.

👍 قاعدة عامة: إذا كنت تُجري عملية كتابة (رفع ملف، إدراج صف في قاعدة بيانات)، فقد تتعامل مع مفاتيح سرية.


حالات الاستخدام والميزات: المفاتيح السرية

قائمة التحقق: التعامل الآمن مع المفاتيح السرية

نظرة عامة سريعة

أكمل الخطوات التالية لإزالة المفاتيح السرية من الكود الخاص بك:

لا تقم بإنشاء ملف .env على الخوادم المنشورة. استخدم أداة إدارة متغيرات البيئة التي توفرها خدمة الاستضافة الخاصة بك (مثل Heroku، Netlify، AWS EC2): مثل لوحة التحكم أو سطر الأوامر.

مقال ذو صلة: استخدام dotenv بأمان في NodeJS


🌍 المفاتيح غير السرية

👍 قاعدة عامة: عندما يجب إرسال مفتاح إلى المتصفح في الكود أو بشكل مضمّن (مثلًا عبر وسم <script src="https://my-api/?apiKey=123-abc-456">فهو بالتأكيد غير سري. مثال شائع هو خرائط Google.


حالات الاستخدام والميزات: المفاتيح غير السرية

✅ التعامل مع المفاتيح غير السرية:

من الآمن ترميز المفاتيح غير السرية (العامة) بشكل ثابت في الكود!

اجعل هذا أسهل في الإدارة على المدى الطويل باستخدام ملف config.js مشترك لتطبيقك.

مثال:

config.js
module.exports = {
googleMapsKey: '123-abc'
};
load-map.js
const config = require('./config.js');
const key = config.googleMapsKey;
const src = `//maps.googleapis.com/maps/api/js?key=${key}`;
// ...

ملاحظة: هناك حالات استخدام أخرى لمتغيرات البيئة. بعضها لم أتطرق إليه: CI/CD والاختبار، أعلام الميزات، وإعدادات وقت التشغيل للبيئات الخاصة!