قد يكتب فريق التطبيق كودًا قليل الجمع للبيانات ثم يضيف SDK للتحليلات وSDK للإعلانات وSDK للcrash reports وSDK للpush وخرائط وchat وauthentication. كل مكتبة تعمل داخل التطبيق وقد تحصل على identifiers أو network access أو context أو permissions من host app، وقد تتغير بعد تحديث package أو remote configuration. لهذا لا يكفي أن تقول سياسة شركتنا لا تجمع الموقع إذا dependency تستطيع قراءته أو إرسال device identifier. في تطبيقات الأطفال، سلسلة التوريد البرمجية هي أيضًا سلسلة توريد بيانات وسلامة: من كتب الكود، ماذا يقرأ، أين يرسل، لأي غرض، تحت أي child mode، متى يتحدث إلى خوادمه، وكيف نوقفه إذا تغير سلوكه.
ابدأ بـSDK Inventory لا بقائمة Vendors في العقد فقط
استخرج dependencies الفعلية من build وlockfile وbinary، بما فيها transitive SDKs. سجّل الاسم والإصدار والowner والغرض والplatform والdomains والpermissions والdata categories. vendor في العقد قد يضم عدة packages، ومكتبة مفتوحة المصدر قد تستدعي service آخر. inventory يجب أن يتطابق مع ما يشحن للمستخدم لا spreadsheet قديمة.
Transitive Dependency قد تكون غير مرئية لفريق المنتج
SDK A قد يعتمد على مكتبة B وC. لا تفترض أنك وافقت على A فقط. SBOM أو dependency graph يساعد في معرفة السلسلة والإصدارات والثغرات. لكن SBOM لا يشرح data flow وحده؛ تحتاج runtime/network observation وسياسة vendor.
الغرض يسبق اختيار SDK
لا تضف analytics library لأن كل التطبيقات تفعل ذلك. اكتب السؤال: أي metric نحتاج؟ هل يمكن قياسه server-side أو locally أو بمكتبة أقل جمعًا؟ إذا crash reporting يكفيه stack trace، لا تشترِ session replay كامل. procurement يبدأ من الحاجة ثم capability لا من شعبية vendor.
Google Play Families يحمّل التطبيق مسؤولية SDKs
سياسات Google Play Families تضع متطلبات على التطبيقات التي يكون الأطفال ضمن جمهورها، وتشمل استخدام SDKs وممارسات البيانات والإعلانات. لا تفترض أن كون SDK مشهورًا يضمن توافقه مع use case. افحص target audience والسياسة والإصدار والإعدادات، خصوصًا ads/analytics. التزام platform لا يلغي التزامات القانون أو تصميم المصلحة الفضلى.
Apple Kids Category تقيّد Third-party Analytics and Ads
Apple App Review Guidelines تضع متطلبات إضافية لتطبيقات Kids، ومنها قيود تتعلق بالتحليلات والإعلانات من أطراف ثالثة إلا في حالات محدودة وبشروط. لا تبنِ architecture تعتمد على ad SDK ثم تحاول تفعيل child flag لاحقًا. صمم النسخة الموجهة للأطفال من البداية وفق platform policy والغرض.
COPPA: الطرف الثالث لا يمحو مسؤولية Operator
في الخدمات المشمولة، FTC COPPA يتعامل مع جمع معلومات الأطفال عبر operators والأطراف التي تجمع نيابة عنها ضمن القاعدة. لا تستخدم نحن لا نرى البيانات كدفاع إذا SDK في تطبيقك يجمعها. اعرف ما يجمع الطرف الثالث ولماذا وكيف تحميه وتحذفه.
Child Mode يجب أن يكون Server-enforced لدى Vendor
إذا SDK لديه child-directed أو restricted-data mode، فعّله قبل initialization إن أمكن، وتحقق أن server يحترمه. لا تجعل flag client-side يمكن أن يُنسى في screen واحدة. اكتب automated test يثبت أن child account لا يرسل advertising identifiers أو fields المحظورة. version update يعيد الاختبار.
Initialize Late لا عند App Launch بلا حاجة
بعض SDKs تبدأ network calls فور تشغيل التطبيق. إذا feature لا يحتاجها حتى screen محددة، لا initialize عند launch. هذا يقلل collection قبل user context/age known. إذا age classification لم تُحسم، استخدم safest mode أو لا تبدأ SDK الحساسة حتى القرار.
Permissions يرثها SDK من التطبيق
المكتبة داخل process قد تصل إلى APIs متاحة للتطبيق حتى لو لم تطلب permission بنفسها. إذا app يملك location للعبة، analytics SDK قد يستطيع قراءتها ما لم تمنعه architecture/config. راقب runtime access وnetwork payloads، ولا تعتمد على documentation فقط.
Advertising ID ليس المعرف الوحيد
حتى لو عطلت ad ID، يمكن SDK استخدام app instance ID أو device model أو IP أو fingerprinting signals. راجع payloads وربطها. لا تسمح fingerprinting للتحايل على child restrictions. identifiers اللازمة للأمن أو push لها أغراض منفصلة ولا تنتقل تلقائيًا للإعلان.
Analytics Event Schema قد يسرب Content
اسم event screen_view آمن نسبيًا، لكن custom parameter قد يحمل search query أو username أو message أو school. اعتمد allowlist للfields بدل إرسال objects كاملة. لا تسمح للمطور بإضافة user_email إلى analytics من دون review. child data tags في schema تساعد CI يمنع fields الحساسة.
Crash SDK قد يصور الشاشة أو يسجل Breadcrumbs
راجع session replay، screenshots، network breadcrumbs، user IDs وcustom metadata. أوقف automatic capture في chat/health/login/AI prompt surfaces أو بالكامل للقاصرين إذا لا حاجة. استخدم redaction واختبرها فعليًا؛ لا تفترض أنها تمحو keyboard أو webview content.
Crash Attachment قد يكون أشد حساسية من الخطأ نفسه
موظف قد يرفق screenshot أو log يدويًا يحمل طفلًا أو message. دعم داخلي يحتاج guidance وtools للredaction. لا تفتح attachment لكل engineer. استخدم access roles وretention أقصر من source code issue إن كان المحتوى حساسًا.
Session Replay ليس Analytics عادية
تسجيل taps/screens/inputs يقترب من مراقبة سلوك كامل. لا تستخدمه افتراضيًا في تطبيق طفل. إذا bug حرج يحتاج replay، استخدم synthetic testing أو opt-in محدودًا مع masking موثوق. لا تسجل keyboard/password/health/chat/images. ضع kill switch.
Ads SDK يحتاج مسار مراجعة مستقل
الإعلانات في child-directed apps تخضع لمتطلبات platform والقانون. استخدم فقط SDKs/modes المسموحة في سياقك، وامنع behavioral profiling وdata sharing غير المسموح. لا تضع multiple ad networks في waterfall بلا فهم data egress. revenue optimization لا يتجاوز child policy.
Mediation يضاعف سلسلة الأطراف
ad mediation قد تستدعي networks مختلفة حسب المزاد. inventory يجب أن يشمل bidders/adapters والبلدان. لا تكتفِ بعقد mediator. إذا لا تستطيع معرفة من استلم request لقاصر، architecture غير قابلة للمساءلة. استخدم child-safe supply محدودة أو أزل monetisation.
Maps وPlaces SDK
قد يرسل location أو search للvendor. إذا تحتاج رسم خريطة عامة، لا ترسل precise user location. استخدم coordinates فقط عند feature وبscope مناسب. افصل API key وrestrictions، ولا تضع child identifier في query. راجع cache/telemetry.
Push SDK
push provider يحتاج token ومحتوى notification أحيانًا. لا تضع تفاصيل حساسة في payload إن كان نظام التشغيل أو vendor سيعالجها. استخدم generic notification ثم fetch بعد auth للمواد الحساسة. احذف tokens القديمة، ولا تستخدم push identifier للإعلان cross-app.
Auth SDK
مزود login قد يرى email أو age/guardian claims. اطلب scopes minimal. لا تنقل profile كاملًا. عند account deletion أو unlink، revoke tokens. لا تسمح social login بتجاوز age gate أو إنشاء adult account لأن provider قال user over 13 دون سياق كافٍ.
Chat/Support SDK قد ينسخ المحادثة إلى Vendor
إذا تستخدم third-party chat للدعم، قد تصل إليه safeguarding disclosures. حدد retention/access/AI training/subprocessors. لا تستخدم free plan بممارسات غير مناسبة لمجرد سرعة الدمج. route child protection cases إلى مساحة مقيدة أو system داخلي إذا vendor لا يفي بالمتطلبات.
Remote Config يغير السلوك دون تحديث Package
vendor يستطيع تشغيل collection أو feature server-side. contract/config monitor يجب أن يلتقط changes. لا تعتمد فقط على version pinning. اختبر network payload دوريًا، واحتفظ baseline domains/events. إذا تغير behavior، kill switch أو proxy يمنع egress حتى review.
Dynamic Code وWebViews
SDK قد يحمل web content أو scripts. لا تمنحه bridges واسعة إلى native data. استخدم allowlist domains وContent Security Policy حيث مناسب. child restrictions يجب أن تطبق في web component أيضًا. لا تستخدم remote code لتجاوز app-store review أو privacy controls.
Version Pinning وLockfiles
ثبّت versions وتابع security updates. auto-update غير المراجع قد يغير data behavior؛ pinning الأبدي يبقي vulnerabilities. أنشئ process يراجع changelog، SBOM، permissions/network diff ثم يحدث بسرعة. emergency security patch يمر fast track مع child-data tests.
SBOM مهم لكنه لا يثبت Privacy
Software Bill of Materials يوضح components/versions ويساعد الثغرات، لكنه لا يخبرك ما data التي يرسلها runtime. اربطه data inventory وnetwork tests وvendor contracts. لا تعتبر وجود SBOM دليلًا أن SDK child-safe.
NIST SSDF وسلسلة التوريد
NIST SSDF يشجع ممارسات تطوير آمن تشمل مكونات الطرف الثالث وإدارة المخاطر البرمجية. طبقة الطفل تضيف data minimisation وage policies وruntime behavior. vulnerability-free SDK قد يكون غير مناسب للأطفال إذا يجمع بيانات أكثر من الغرض.
CVE عالية لا تعني دائمًا Child Harm أعلى والعكس
رتب security severity مع data exposure/use case. SDK بلا CVE قد يرسل precise location قانونيًا تقنيًا لكنه غير مبرر. CVE في parser غير reachable أقل urgency من token leak reachable. استخدم threat model لا score واحدًا.
Domain Inventory يلتقط Shadow Egress
سجل hosts التي يتصل بها build النظيف في child account scenarios. قارن بعد update. domain جديد يفتح review. لا تحظر CDN شرعية آليًا، لكن اعرف ownership والغرض. DNS/proxy logs في test environment تساعد اكتشاف calls غير موثقة.
Payload Inspection في بيئة اختبار فقط عند الحاجة
استخدم test certificates/proxies وحسابات مصطنعة لفهم payloads بما يتفق مع شروط وأمن النظام. لا تفك تشفير traffic حقيقي لأطفال بلا أساس. الهدف verification قبل release، لا مراقبة production private communications.
Kill Switch للSDK
يجب أن تستطيع تعطيل initialization أو network egress لمكتبة عالية المخاطر عبر config تتحكم به أنت، دون waiting app-store review إذا incident. اختبر switch. إذا SDK ضروري login، جهز fallback. لا تجعل remote vendor قادرًا على إعادة تشغيله من جهته.
Vendor Breach
اعرف أي child data وصلت SDK كي تحدد scope بسرعة. contract يحدد incident notice وevidence وsubprocessors. عند breach، rotate keys/tokens، أوقف SDK أو fields، وقيّم إخطار المستخدمين. لا تنتظر vendor public blog إذا لديك contract signal.
Vendor Acquisition أو Policy Change
إذا اشترت شركة أخرى SDK أو تغيرت privacy policy، أعد review. لا يعني نفس package name نفس controller والغرض. freeze high-risk data إن تغير الشروط جوهريًا حتى يقرر privacy/product. لا تستخدم continued use كconsent تلقائي للقاصر.
Deprecation وخطة إزالة
كل SDK له owner وexit plan. لا تبقِ مكتبة قديمة لأن إزالةها صعبة. اعرف replacement أو internal alternative، وحذف data vendor بعد الخروج. بعد إزالة package، تحقق network/domains والpermissions وserver integrations لا binary فقط.
School Procurement يراجع SDKs لا App Name فقط
المدرسة تسأل vendor عن third parties وanalytics/ads/crash/AI. لا تكتفِ privacy policy العامة. contract يمنع إضافة subprocessors أو SDKs حساسة دون notice حيث مناسب. app update خلال العام يخضع re-review إذا data flow تغير.
Child Mode Tests في CI
شغّل app بحساب child/mixed/adult مصطنع، وقارن network events. child mode يجب أن يقلل fields/SDKs حسب policy. test يفشل إذا advertising endpoint ظهر أو PII field أرسل. لا تعتمد على manual QA فقط.
Release Diff يجمع Code وData
لكل release، diff dependencies، permissions، domains، event schemas، vendor versions وprivacy configs. reviewer يرى التغيير في صفحة واحدة. لا يوقع approval إذا new SDK بلا owner أو purpose. هذا release gate عملي لحماية الطفل.
مقاييس
قِس SDK count، transitive unknowns، child-mode violations، unexpected domains، PII fields blocked، stale versions، CVEs reachable، vendors بلا deletion confirmation، kill-switch time، session-replay captures، ad/analytics events للقاصرين وrelease diffs unresolved. لا تجعل zero SDK هدفًا؛ الهدف سلسلة مفهومة ومحدودة.
خطة 90 يومًا
30 يومًا: SBOM + SDK/data/domain inventory. 31–60: child mode، schema allowlists، CI network tests، contracts وowners. 61–90: kill switches، vendor incident drill، release diff، school procurement view وexit plans. أزل أي SDK لا تستطيع شرح غرضه أو data flow.
نموذج روافد المفاهيمي: المكتبة والغرض والبيانات والمخرج
تقترح روافد أربع طبقات: ما المكتبة، ما الغرض، ما البيانات المتاحة لها، وإلى أين تخرج. يضاف العمر والإصدار. النموذج conceptual وغير متحقق. يقاس بعدد flows غير المعروفة وunexpected egress ووقت kill switch وحذف vendor data.
ابدأ بقائمة مكونات فعلية لا باسم المورد فقط
تطبيق الطفل قد يحتوي عشرات SDKs تصل عبر مكتبات أخرى ولا تظهر في شاشة المنتج. لذلك يحتاج الفريق إلى Software Bill of Materials أو سجل مكونات يربط اسم الحزمة والإصدار والغرض والمالك والبيانات والصلاحيات والوجهات الشبكية. لا يكفي قول «نستخدم مزود تحليلات» إذا كانت الحزمة تحمل وحدات إعلان أو crash reporting أو remote config. ويجب تحديث السجل من عملية البناء نفسها قدر الإمكان، لأن ملفًا يدويًا يتقادم بسرعة. لكل مكون يحدد هل يعمل في حسابات القاصرين، وهل يمكن تعطيله حسب العمر أو المنطقة، وما الذي يحدث إذا توقف المورد. هذه الخريطة تجعل السؤال قابلًا للإجابة عند حادث: أي إصدار كان موجودًا، ما الأجهزة المتأثرة، وما البيانات التي استطاع الوصول إليها.
الصلاحية غير المباشرة قد تكون أخطر من طلب SDK نفسه
قد لا يطلب SDK الكاميرا مباشرة لكنه يعمل داخل تطبيق حصل على صلاحية الصور أو الموقع أو الميكروفون، فيصبح قادرًا على تلقي بيانات يمررها التطبيق. لذلك لا تُراجع Manifest وحدها؛ تُراجع تدفقات البيانات عند نقاط الاستدعاء وما الحقول التي تصل إلى المكتبة. كما يجب اختبار الإعدادات الافتراضية للمورد: هل يجمع معرف إعلان أو عنوان IP أو معلومات جهاز حتى عندما لا يستدعي المطور دالة صريحة؟ هل يبدأ النقل قبل معرفة العمر أو الموافقة المناسبة؟ الحل هو تقليل البيانات قبل تمريرها للمكتبة، تعطيل الوحدات غير اللازمة، وفصل مسارات القاصر عن الاستخدام العام بحيث لا تعتمد الحماية على وعد خارجي فقط.
Remote Config والتحديث الصامت يغيران الخطر بعد المراجعة
قد يجتاز إصدار من SDK المراجعة ثم يغير المورد سلوكه عبر إعداد بعيد أو تحديث dependency تلقائي. لهذا تُثبت الإصدارات في البناء، وتُراجع Release notes والتغييرات في الصلاحيات والوجهات والواجهات قبل الترقية. وإذا سمح Remote Config بتشغيل جمع جديد أو تجربة إعلان أو تغيير endpoint، يعامل ذلك كتغيير منتج يحتاج ضوابط. يمكن مراقبة Network diff في اختبارات آلية: ما النطاقات الجديدة، ما الحقول التي ظهرت، وهل تغير السلوك بين حساب بالغ وقاصر؟ وعند تغير مفاجئ يجب أن توجد قدرة على تعطيل المكون أو الوظيفة دون انتظار إصدار متجر جديد إذا كان ذلك ممكنًا هندسيًا.
Kill switch وخطة العمل عند فشل المورد
المكتبة الحرجة التي لا يمكن تعطيلها تجعل المورد نقطة تحكم في أمان التطبيق. يحتاج الفريق إلى معرفة ما الذي يحدث إذا قرر إيقاف SDK: هل يتعطل تسجيل الدخول؟ هل تتوقف الرسائل؟ هل يفقد التطبيق بيانات؟ المكونات غير الأساسية مثل التحليلات والإعلانات يجب أن تملك مسار تعطيل واضحًا، بينما المكونات الأساسية تحتاج بديلًا أو وضعًا منخفض الوظائف يحافظ على السلامة. يُختبر Kill switch دوريًا لا يوثق على الورق فقط. وفي الحادث يمكن تعطيل إرسال بيانات القاصرين وحده إذا كانت البنية تسمح، مع الحفاظ على الخدمة لبقية المستخدمين. هذا يقلل الضغط التجاري الذي قد يدفع الفريق إلى إبقاء مكون مشكوك فيه لأنه لا يملك طريقة أخرى لتشغيل التطبيق.
اختبار تدفق البيانات على جهاز حقيقي أو بيئة مماثلة
الوثائق لا تكشف دائمًا Telemetry الفعلي. تُشغل نسخة اختبار مع حسابات صناعية بأعمار وإعدادات مختلفة، ويُراقب الاتصال قبل تسجيل الدخول وبعده، في الخلفية، عند فتح الكاميرا أو رفع ملف أو تلقي إشعار. تُسجل الوجهات وأنواع الحقول ولا تحفظ محتوى حساسًا غير لازم. ثم تقارن النتيجة بما في خريطة البيانات والعقد. إذا ظهر endpoint غير معروف أو معرف دائم بلا غرض، لا يُقبل كتفصيل صغير؛ يُحدد المصدر والإعداد الذي فعله. ويعاد هذا الاختبار عند ترقية نسخة أو إضافة Feature flag، لأن سلوك المكتبة جزء من التطبيق الذي يصل فعليًا إلى الطفل.
Logs وcrash reports قد تحمل محتوى لم يُقصد جمعه
قد يرسل Crash SDK قيمة متغير أو URL أو نص استثناء يحتوي اسم مستخدم أو معرف ملف أو جزءًا من رسالة. لذلك تُراجع حقول السجل قبل تمريرها، وتُستخدم قوائم حظر أو تنقية للبيانات الحساسة، وتُحدد مدة احتفاظ ووصول. كما يُختبر سيناريو فشل في شاشة تحتوي بيانات طفل لمعرفة ما الذي يغادر الجهاز. لا يُسمح للمطور بإضافة payload كامل «للمساعدة في التصحيح» دون تقييم. عند الحاجة إلى تشخيص مشكلة إنتاجية، يمكن استخدام معرف قصير أو حدث تقني بدل نسخ المحتوى، مع أدوات داخلية للوصول المقيد عندما يكون ذلك ضروريًا ومبررًا.
العقد والـAttestation لا يغنيان عن الاختبار
يحدد العقد الغرض والبيانات والمناطق والموردين الفرعيين والإخطار بالتغيير والحادث والحذف ودعم التدقيق. ويمكن طلب Attestation أو تقرير أمني، لكنه يثبت نطاقًا وزمنًا محددين ولا يضمن سلوك نسختك من المكتبة. لذلك تُطابق الوعود مع الاختبار الفعلي. إذا قال المورد إنه لا يجمع بيانات قاصرين لكن SDK لا يعرف عمر المستخدم، يجب أن يشرح كيف يتحقق ذلك تقنيًا أو يوفر وضعًا يعطله التطبيق. كما يمنع العقد استخدام البيانات لتدريب أو إعلان أو بناء ملفات خارج الغرض المتفق، ويحدد أثر الاستحواذ أو تغيير الملكية، لأن الجهة التي تتلقى البيانات قد تتغير دون تغيير اسم الحزمة.
إزالة SDK ليست نهاية دورة البيانات
عند استبدال المكتبة، يُزال الكود والمفاتيح والإعدادات والـdeep links والـbackground tasks المرتبطة بها، وتُراجع النسخ الاحتياطية والبيانات لدى المورد وفق الالتزامات. كما يُفحص أن dependency غير مباشرة لم تعد تسحب الحزمة إلى البناء. تُلغى مفاتيح API أو الشهادات التي لم تعد لازمة، وتُراجع لوحات المورد وحسابات الموظفين. إذا انتقل الغرض إلى مزود جديد، لا تنقل البيانات القديمة تلقائيًا لمجرد الاستمرارية؛ يُعاد تقييم الضرورة والأساس والسياسة. ويُحفظ سجل قرار الإزالة حتى يمكن تفسير سبب وجود اتصالات أو بيانات تاريخية لاحقًا.
مقاييس سلسلة توريد SDK للأطفال
تتابع المؤسسة عدد SDKs النشطة في مسار القاصر، نسبة المكونات التي تملك مالكًا وغرضًا ونسخة مثبتة، عدد الوجهات الشبكية غير المسجلة، زمن مراجعة تحديث عالي الأثر، وقدرة الفريق على تعطيل مكون غير أساسي. كما يقاس عدد الحقول المرسلة لكل غرض، الموردون الفرعيون الجدد، وفشل اختبارات الفرق بين القاصر والبالغ. ارتفاع عدد SDKs ليس مشكلة آلية، لكنه يزيد سطح الاعتماد والمراجعة. يمكن تحديد Budget معماري للمكونات الخارجية بحيث يحتاج إضافة جديد إلى تبرير وعدم وجود قدرة داخلية مناسبة. المقياس النهائي هو تقليل البيانات والاعتماد غير المرئي، لا مجرد امتلاك قائمة طويلة من الموردين.
Regression gate قبل كل إصدار
بوابة الإصدار تقارن ملف المكونات بالإصدار السابق: حزمة جديدة أو نسخة أو صلاحية أو domain أو manifest entry أو تغير حجم شبكة غير متوقع. تُشغل اختبارات حساب قاصر على السيناريوهات الحساسة، وتفشل البوابة إذا ظهر إرسال قبل تفعيل السياسة أو إذا عادت مكتبة محذوفة عبر dependency. كما يُراجع Hash أو توقيع الحزمة ومصدرها لمنع استبدال غير موثوق. النتائج تحفظ كأثر إصدار قابل للتتبع، بحيث يستطيع الفريق بعد حادث تحديد متى دخل التغيير. هذه البوابة تربط أمن سلسلة التوريد بخصوصية الطفل وسلامته بدل التعامل معها كاختبار منفصل في نهاية التطوير.
قرار إدخال SDK يجب أن يثبت قيمة لا راحة هندسية فقط
قبل إضافة مكتبة يسأل الفريق ما الوظيفة التي توفرها، وهل يمكن تنفيذها بواجهة النظام أو خدمة داخلية أقل وصولًا، وما تكلفة المراجعة والاستبدال والحذف. المكتبة التي تضيف تحليلاً صغيرًا لكنها تجمع معرفات وموقعًا وبيانات جهاز قد لا تكون صفقة مناسبة لمنتج أطفال. يوثق القرار البدائل والبيانات والصلاحيات والموردين والـkill switch، ثم يحدد موعد مراجعة. وإذا اختفت الحاجة لاحقًا تُزال المكتبة بدل بقائها لأن «لا أحد يعرف من يستخدمها». تقليل المكونات غير الضرورية أحد أقوى الضوابط لأنه يلغي مسار خطر كامل بدل محاولة مراقبته إلى الأبد.
أسئلة شائعة
أسئلة شائعة
هل SDK طرف ثالث مسؤولية المطور فقط؟
التطبيق الذي يدمجه يحتاج فهم data flow وسياسات الأطفال؛ الطرف الثالث لا يلغي مسؤولية المنتج ضمن القوانين والسياسات المطبقة.
هل SBOM يكفي؟
لا؛ يوضح components لكن تحتاج runtime data/network behavior وpurpose وcontracts.
هل SDK يرى Permissions التطبيق؟
قد يستطيع الوصول إلى APIs المتاحة داخل process، لذلك اختبر runtime ولا تعتمد على documentation.
هل Crash SDK آمن للأطفال؟
يعتمد على config؛ أوقف screenshots/session replay والfields الحساسة غير اللازمة وحدد retention.
ماذا عن Ads SDK؟
تحتاج سياسات platform والقانون والchild mode وسلسلة الموردين؛ لا تستخدم behavioral profiling غير المناسب.
كيف نوقف SDK في Incident؟
باستخدام kill switch أو تعطيل endpoints/config مع fallback للوظائف الحرجة.
متى نعيد مراجعة SDK؟
عند update أو policy/owner change أو permission/domain/data-flow جديد أو incident.
ما أهم قاعدة؟
لا تشحن مكتبة لا تعرف غرضها وبياناتها ووجهتها وإعداد الطفل وخطة إيقافها وحذف بياناتها.
المصادر والمنهجية
تعتمد الصفحة على FTC COPPA، Google Play Families وFamilies Ads SDK policies، Apple App Review Guidelines Kids، ICO Children’s Code، eSafety Safety by Design، NIST SSDF، CISA SBOM guidance وUNICEF privacy principles. تم الجمع بين software supply-chain security وchild-data supply chain في lifecycle واحد.
بوابة قرار للمكون الخارجي قبل الدمج
قبل دمج أي SDK يمر القرار عبر خمس أسئلة موثقة: هل الوظيفة ضرورية لمسار الطفل؟ ما البيانات والصلاحيات التي يحتاجها فعليًا؟ هل يمكن خفضها بإعداد أو واجهة محلية؟ هل يستطيع الفريق تعطيل المكون واستبداله؟ وما الدليل الذي سيثبت أن سلوكه بعد الدمج يطابق الوعد؟ يُنفذ اختبار شبكة بحساب قاصر صناعي قبل الدمج وبعده، وتُقارن الوجهات والحقول والأحداث. إذا ظهر جمع لا يرتبط بالغرض، لا يُعالج بإضافة سطر إلى سياسة الخصوصية؛ يوقف الدمج أو يعاد تكوين المكتبة. كذلك يحدد الفريق موعد مراجعة للإصدار، لأن المكون الذي كان مناسبًا عند التعاقد قد يصبح غير ضروري أو أكثر وصولًا بعد عام. وعند وجود عدة SDKs تؤدي وظائف متقاربة، تُراجع إمكانية توحيدها لتقليل سطح الموردين والمفاتيح ومخاطر التحديث. القرار الجيد ينتج سجلًا مختصرًا يربط الغرض بالمصدر والنسخة والبيانات والاختبار والمالك ووسيلة الإيقاف. هذا السجل يسمح لاحقًا بإجابة عملية عند حادث أو طلب حذف أو تغيير تنظيمي، ويمنع بقاء مكتبة في التطبيق لأن الفريق نسي سبب إضافتها. كما يُفحص مسار النسخ الاحتياطية وبيئات الاختبار؛ فقد تتوقف مكتبة في الإنتاج بينما تبقى مفاتيحها أو بياناتها داخل بيئة تجريبية أقل حماية. وأخيرًا يراجع الفريق ما إذا كان المكون يؤثر في الأطفال بشكل مختلف عن البالغين، مثل الإعلانات أو التخصيص أو الموقع، ويجعل هذا الفرق جزءًا من اختبار القبول لا إعدادًا مخفيًا يعتمد على حسن سلوك المورد.
الحد الأدنى المقبول قبل الإصدار
لا يدخل SDK جديد مسار حسابات القاصرين ما لم يملك مالكًا داخليًا، غرضًا مكتوبًا، نسخة مثبتة، قائمة بيانات وصلاحيات، اختبار شبكة، وسيلة تعطيل، وشروط حذف وتغيير متفقًا عليها. إذا غاب عنصر حرج، يبقى المكون خارج البناء أو يعمل في وضع لا يصل إلى بيانات القاصر. هذه البوابة تجعل عبء الإثبات على من يضيف الاعتماد الخارجي بدل أن يصبح على فريق الخصوصية اكتشاف السلوك بعد الإطلاق.