تلتزم Google Play بضمان الأمان لكلٍّ من المستخدمين والمطوّرين. نحن ندرك أنّ إنشاء نشاط تجاري ناجح للتطبيقات يعتمد على منصة موثوق بها تحمي عائد استثمارك من خلال الدفاع بشكل استباقي عنك ضد الجهات الخبيثة.
تصف هذه الوثيقة اقتراحات لمنع الهجمات على أنظمة الفوترة المدمجة وتقليل تأثير إساءة الاستخدام في تطبيقك.
تحسين إجراءات الحماية
يمكن لواجهات برمجة التطبيقات والأدوات التالية التخفيف من المخاطر في تطبيقك:
- واجهة Voided Purchases API: يمكنك من خلالها إبطال إمكانية الوصول إلى الطلبات المُلغاة.
- رقم تعريف الحساب المموّه: يساعد هذا الرقم في رصد عمليات الشراء التي يتم إجراؤها من أجهزة متعددة على الحساب نفسه خلال فترة قصيرة.
- **الاستهلاك من جهة الخادم**: تنقل أدوات مثل Purchases.products:consume منطق النشاط التجاري إلى الخوادم الخلفية الآمنة، ما يمنع التلاعب من جهة العميل. بالإضافة إلى استخدام واجهات برمجة التطبيقات هذه، ننصحك باتّباع أفضل الممارسات التالية لزيادة أمان عمليات التكامل من الوصول غير المصرّح به.
منع تزييف الموقع الجغرافي
توفّر Google Play إجراءات حماية مضمّنة لمنع الجهات الخبيثة من استخدام مواقع جغرافية مزيّفة لاستغلال الاختلافات في العملات الإقليمية (المعروفة أيضًا باسم تزييف الموقع الجغرافي)، وإساءة استخدام العروض الترويجية والحوافز للاشتراكات، ومحاولة الاحتيال على بطاقات الهدايا.
نقل المنطق الحسّاس إلى الخادم الخلفي
ننصحك بنقل البيانات والمنطق الحسّاسَين إلى خادم خلفي تتحكّم فيه، وذلك بقدر ما يسمح به تصميم تطبيقك. كلما زادت البيانات والمنطق في جهاز من جهة العميل، زادت احتمالية تعديلها أو التلاعب بها.
على سبيل المثال، يجب أن تتحقّق لعبة الشطرنج على الإنترنت من صحة جميع الحركات في الخادم الخلفي بدلاً من الوثوق بأنّ الواجهة الأمامية ترسل دائمًا حركات قانونية.
علاوةً على ذلك، إذا عثرت على نقاط ضعف أو مشاكل أمنية، قد يكون من الأسهل تصحيح الأخطاء وإصلاحها ونشر التحديثات على الخادم الخلفي بدلاً من الواجهة الأمامية، وذلك حسب تصميم نظامك.
التحقّق من عمليات الشراء قبل منح الأذونات
يجب معالجة حالة خاصة من البيانات والمنطق الحسّاسَين في الخادم الخلفي، وهي التحقّق من عمليات الشراء والإقرار بها. بعد أن يُجري المستخدم عملية شراء، عليك اتّخاذ الإجراءات التالية:
- إرسال purchaseToken المقابل إلى الخادم الخلفي. يعني ذلك أنّه عليك الاحتفاظ بسجلّ لجميع قيم purchaseToken لكل عمليات الشراء.
- التحقّق من أنّ قيمة purchaseToken لعملية الشراء الحالية لا تتطابق مع أي قيم purchaseToken سابقة. إنّ purchaseToken فريد على مستوى العالم، لذا يمكنك استخدامه بأمان كمفتاح أساسي في قاعدة البيانات.
- استخدِم نقطتَي النهاية Purchases.products:get أو Purchases.subscriptionsv2:get في Google Play Developer API للتحقّق من خلال Google من أنّ عملية الشراء مشروعة.
- إذا كانت عملية الشراء مشروعة ولم يتم استخدامها في السابق، يمكنك بعد ذلك منح إذن الوصول بأمان إلى المنتج داخل التطبيق أو الاشتراك.
- بالنسبة إلى الاشتراكات، عند ضبط linkedPurchaseToken في Purchases.subscriptionsv2:get، عليك أيضًا إزالة linkedPurchaseToken من قاعدة البيانات وإبطال إذن الوصول الممنوح إلى linkedPurchaseToken لضمان عدم حصول عدة مستخدمين على إذن الوصول إلى عملية الشراء نفسها.
- عليك منح إذن الوصول فقط عندما تكون حالة الشراء PURCHASED والتأكّد من معالجة عمليات الشراء PENDING بشكل صحيح. إذا كان هناك ارتفاع في عمليات الشراء CANCELED، قد تكون تمنح أذونات الوصول عندما تكون حالة الشراء لا تزال PENDING. يمكنك الاطّلاع على مزيد من المعلومات في مقالة معالجة المعاملات المعلقة.
بعد منح إذن الوصول، إذا أردت استهلاك منتج قابل للاستهلاك والإقرار به، استخدِم Purchases.products:consume Play Developer API على خادمك الخلفي الآمن. للإقرار بمنتج غير قابل للاستهلاك أو اشتراك، استدعِ نقطة نهاية Play Developer API ذات الصلة، إما Purchases.products:acknowledge أو Purchases.subscriptions:acknowledgeعلى خادمك الخلفي الآمن. الإقرار مطلوب، لأنّه يُعلم Google Play بأنّه تم منح المستخدم إذن الوصول إلى عملية الشراء. عليك الإقرار بعملية الشراء فور منح إذن الوصول.
يُرجى العِلم أنّه على الرغم من إمكانية الإقرار بعملية الشراء أو استهلاكها من جهة العميل من خلال تطبيقك، توفّر واجهات برمجة التطبيقات من جهة الخادم حماية إضافية من مشاكل مثل ضعف الاتصال بالشبكة والنشاط الخبيث. على سبيل المثال، لنفترض أنّ مستخدمًا اشترى منتجًا من تطبيقك ولكنّه فقد الاتصال بالشبكة أثناء التحقّق من عملية الشراء. بدون الإقرار من جهة الخادم، قد يحتاج المستخدم إلى تسجيل الدخول مرة أخرى من خلال التطبيق لإكمال عملية الإقرار. وإلا، إذا لم يسجّل المستخدم الدخول مرة أخرى خلال ثلاثة أيام، يتم ردّ الأموال تلقائيًا مقابل عملية الشراء بسبب عدم الإقرار بها. يمنع الإقرار من جهة الخادم هذا السيناريو من خلال إرسال الإقرار فور إعلام Google Play للخادم بأنّ عملية الشراء صالحة.
لمزيد من المعلومات عن الإقرار بعمليات الشراء واستهلاكها، يُرجى الاطّلاع على مقالة معالجة عمليات الشراء.
حماية المحتوى الذي تم إلغاء قفله
لمنع المستخدمين الضارين من إعادة توزيع المحتوى الذي تم إلغاء قفله، لا تضمّنه في ملف APK. بدلاً من ذلك، اتّبِع أحد الإجراءَين التاليَين:
- استخدِم خدمة في الوقت الفعلي لإرسال المحتوى، مثل خلاصة محتوى. يسمح لك إرسال المحتوى من خلال خدمة في الوقت الفعلي أيضًا بالحفاظ على حداثة المحتوى.
- استخدِم خادمًا بعيدًا لإرسال المحتوى. عند إرسال المحتوى من خادم بعيد أو خدمة في الوقت الفعلي، يمكنك تخزين المحتوى الذي تم إلغاء قفله في ذاكرة الجهاز أو تخزينه على بطاقة SD الخاصة بالجهاز. إذا خزّنت المحتوى على بطاقة SD، احرص على تشفيره واستخدِم مفتاح تشفير خاصًا بالجهاز.
رصد عمليات الشراء المُلغاة ومعالجتها
عمليات الشراء المُلغاة هي عمليات الشراء التي تم إلغاؤها أو إبطالها أو ردّ الأموال إليها. إذا كانت عملية الشراء المُلغاة قد منحت سابقًا منتجات داخل التطبيق أو محتوى آخر للمستخدم، يمكنك استخدام Voided Purchases API للحصول على سبب إلغاء عملية الشراء وأي محتوى مرتبط يمكنك استرداده.
يمكن إلغاء عمليات شراء المنتجات داخل التطبيق والاشتراكات لعدة أسباب، بما في ذلك ما يلي:
- تم إلغاء عملية شراء، إما من قِبل المستخدم أو المطوّر أو Google (بما في ذلك عمليات الشراء التي تم إلغاؤها تلقائيًا ولم يتم الإقرار بها). بالنسبة إلى الاشتراكات، يُرجى العِلم أنّ ذلك يشير إلى إلغاء شراء الاشتراك، وليس إلغاء الاشتراك نفسه.
- تم ردّ الأموال مقابل عملية شراء.
يلغي مطوّر التطبيق طلب المستخدم أو يردّ الأموال إليه ويضع علامة في الخيار "إبطال" في وحدة التحكّم. استنادًا إلى سبب إلغاء عملية الشراء، مع أخذ بيانات سلوك المستخدم السابقة في الاعتبار، يمكنك تحديد مسار العمل. ننصحك بتنفيذ إجراء واحد أو أكثر مما يلي:
استرداد المنتجات: عند إلغاء عملية شراء، يمكنك استرداد المنتجات غير المستخدَمة كما لو لم يتم شراؤها مطلقًا. على سبيل المثال، إذا تم إلغاء عملية شراء عملة داخل اللعبة، يمكنك استرداد العملة التي تم منحها للمستخدم من قبل. في حال سبق أن أنفق المستخدم العملة، ننصحك بضبط رصيد العملة على قيمة سالبة وتقييد نشاط التطبيق وعمليات الشراء المستقبلية إلى أن يصبح رصيد العملة موجبًا.
تنفيذ نظام الإنذارات المتعددة: ننصحك باتّخاذ إجراءات أقل صرامةً ضد المخالفين للمرة الأولى، مثل عرض تحذيرات داخل التطبيق. أما بالنسبة إلى المخالفين المتكررين، ننصحك باتّخاذ إجراءات أكثر صرامةً.
إيقاف عمليات الشراء مؤقتًا: على غرار نظام الإنذارات المتعددة، ننصحك بإيقاف عمليات الشراء مؤقتًا للمستخدمين الذين ألغوا عمليات شراء إلى أن تتمكّن من التحقيق بشكل أكثر شمولاً في سبب إلغاء عمليات الشراء.
منع الوصول إلى تطبيقك مؤقتًا أو نهائيًا: في الحالات القصوى التي تتضمّن نشاطًا خبيثًا متكررًا، ننصحك بمنع الوصول إلى تطبيقك، إما مؤقتًا أو نهائيًا.
إجراء طلبات متكررة إلى Voided Purchases API: عند رصد عملية شراء مُلغاة واحدة أو أكثر، ننصحك بإجراء طلبات أكثر تكرارًا إلى Voided Purchases API لاسترداد عمليات الشراء قبل أن يتمكّن المستخدم من استهلاكها. يمكنك الاطّلاع على مزيد من المعلومات عن حصص Voided Purchases API في وثائق Voided Purchases API.
مساعدة Google في رصد الاحتيال قبل حدوثه
ترتبط بعض أنواع الاحتيال بالمستخدمين الخبيثين الذين ينشئون حسابات متعددة على Google وداخل التطبيق لإخفاء نشاطهم.
استخدِم الطريقتَين setObfuscatedAccountId و setObfuscatedProfileId في أداة الإنشاء لـ BillingFlowParams لمساعدة Google في ربط حسابات Google بالحسابات داخل التطبيق.
تستخدم Google هذه البيانات لرصد السلوك المريب وحظر بعض أنواع المعاملات الاحتيالية قبل إكمالها.
اتّخاذ إجراءات ضد انتهاك العلامات التجارية وحقوق الطبع والنشر
إذا كنت تستخدم خادمًا بعيدًا لإرسال المحتوى أو إدارته، اطلب من تطبيقك التحقّق من حالة شراء المحتوى الذي تم إلغاء قفله في كل مرة يصل فيها المستخدم إلى المحتوى. يسمح لك ذلك بإبطال الاستخدام عند الضرورة وتقليل القرصنة. إذا لاحظت إعادة توزيع المحتوى على Google Play، احرص على اتّخاذ إجراء سريع وحاسم. لمزيد من التفاصيل، يُرجى الاطّلاع على صفحة الأسئلة الشائعة حول حقوق الطبع والنشر في مركز مساعدة حقوق الطبع والنشر .