الأسرار والأمان النوعي
تعاملوا مع القيم الحساسة من دون تسريبها إلى الأنواع
الأسرار والأمان النوعي درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
تستحق الأسرار عناية خاصة
تُعد مفاتيح API وكلمات المرور والرموز المميزة إعدادات أيضًا، لكن تسريبها في السجلات أو رسائل الخطأ أمر خطير. ويمكن لأمان الأنواع أن يساعد في منع كشف القيم السرية عرضًا.
مشكلة التسجيل غير المقصود
يمكن تسجيل السر النصي العادي في أي مكان عن طريق الخطأ، مثل استخدام console.log(config) أو تفريغ خطأ يحوّل كائن الإعدادات كاملًا إلى سلسلة نصية.
const config = { dbPassword: "hunter2" };
console.log(config); // leaks the passwordالأنواع المميّزة للأسرار
يضع النوع المميّز علامة على السلسلة النصية باعتبارها سرًا أثناء التصريف، بحيث يميّز نظام الأنواع بين Secret والسلسلة النصية العادية، ويفرض التعامل المتعمد معها.
type Secret = string & { readonly __brand: "Secret" };
function secret(s: string): Secret { return s as Secret; }لماذا يفيد التمييز
بما أن Secret لا يمكن إسناده إلى string عادي من دون قصد صريح، فيمكن للدوال طلب Secret عند الحاجة، ولا يمكنك تمريره إلى موضع غير آمن عن طريق الخطأ.
function connect(pw: Secret) { /* uses pw */ }
// connect("plain") -> type error; must wrap with secret()فئة تغليف للسر
يغلّف بديل آخر القيمة في فئة تكون فيها عمليتا toString والتسلسل محجوبتين، بحيث يعرض حتى التسجيل غير الحذر قيمةً نائبة.
class Secret {
constructor(private readonly value: string) {}
expose(): string { return this.value; }
toString() { return "[REDACTED]"; }
}حجب السر أثناء التسلسل
يضمن تخصيص toJSON ألا يظهر السر أبدًا عند إجراء تسلسل لكائن باستخدام JSON.stringify، وهو المسار الأكثر شيوعًا للتسريب غير المقصود.
class Secret {
constructor(private readonly value: string) {}
expose() { return this.value; }
toJSON() { return "[REDACTED]"; }
}
// JSON.stringify({ pw: new Secret("x") }) -> {"pw":"[REDACTED]"}الإظهار الصريح فقط
لا يمكن الوصول إلى القيمة الحقيقية إلا من خلال طريقة صريحة مثل expose(). ويجعل ذلك كل موضع يقرأ سرًا ظاهرًا وقابلًا للمراجعة في الشيفرة.
const pw = new Secret("hunter2");
console.log(String(pw)); // [REDACTED]
connectToDb(pw.expose()); // deliberate accessأبقِ الأسرار خارج الأنواع الواسعة
تجنب وضع السلاسل النصية السرية الخام في واجهات إعدادات عامة يجري تسجيلها كاملةً. استخدم النوع Secret بحيث تُحجب هذه القيم افتراضيًا أينما طُبعت الإعدادات.
interface Config {
host: string;
dbPassword: Secret; // not a plain string
}تحميل الأسرار بأمان
غلّف قيم الأسرار في البيئة أثناء قراءتها، بحيث تكون مميّزة أو مغلّفة منذ اللحظة الأولى، ولا تنتشر أبدًا كسلاسل نصية عادية.
const config = {
host: process.env.DB_HOST!,
dbPassword: new Secret(process.env.DB_PASSWORD!),
};الدفاع متعدد الطبقات
تقلل الأسرار على مستوى الأنواع من التسريبات غير المقصودة، لكنها لا تحل محل الممارسات التشغيلية الجيدة: قيّد من يمكنه قراءة البيئة، وتجنب تسجيل أجسام الطلبات، ونظّف تقارير الأخطاء من البيانات الحساسة.
ملخص التقنيات
استخدم الأنواع ذات العلامات لفرض التعامل المتعمّد، وفئة تغليف تحجب القيمة في toString/toJSON، مع استخدام expose() صراحةً لقراءة القيمة، وبذلك تبقى الأسرار خارج السجلّات والناتج المتسلسل.
مراجعة سريعة
مراجعة سريعة لهذا الدرس.
مراجعة
احمِ الأسرار باستخدام الأنواع ذات العلامات، التي تفرض التعامل المتعمّد، أو باستخدام فئة تغليف تُعيد [REDACTED] من toString/toJSON، ولا تكشف القيمة الحقيقية إلا عبر expose() صراحةً. وبذلك تبقى الأسرار خارج السجلّات وتهيئة البرامج المتسلسلة.
الأسئلة الشائعة
هل درس «الأسرار والأمان النوعي» مجاني؟
نعم — نص درس «الأسرار والأمان النوعي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «الأسرار والأمان النوعي»؟
تعاملوا مع القيم الحساسة من دون تسريبها إلى الأنواع تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الأسرار والأمان النوعي»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تحديد أنواع متغيرات البيئة
- إعدادات تم التحقق منها بالمخطط
- تدرج الإعدادات والقيم الافتراضية
- الأسرار والأمان النوعي