Google Play متعهد به تضمین ایمنی کاربران و توسعهدهندگان است. میدانیم که ساختن کسبوکار موفق برنامه به پلاتفرمی قابلاعتماد متکی است—پلاتفرمی که با دفاع پیشگیرانه دربرابر عاملان بدخواه، بازگشت سرمایه شما را تضمین میکند.
این سند توصیههایی را برای جلوگیری از حملات به سیستم یکپارچه پرداخت و کاهش تأثیر سوءاستفاده در برنامهتان شرح میدهد.
بهبود محافظتها
میاناهای برنامهسازی کاربردی و ابزارهای زیر میتوانند خطرات را در برنامهتان کاهش دهند:
- Voided Purchases API: دسترسی به سفارشهای باطلشده را لغو کنید.
- شناسه حساب مبهمسازیشده: کمک میکند تا تشخیص دهیم چه زمانی چند دستگاه در یک دوره کوتاه در یک حساب خرید انجام میدهند.
- مصرف باطن: ابزارهایی مانند Purchases.products:consume منطق کسبوکار را به باطنهای امن شما منتقل میکنند و از دستکاری سمت کارخواه جلوگیری میکنند. علاوهبر استفاده از این APIهای پلاتفرم، روالهای مطلوب زیر را برای ایمنتر کردن یکپارچهسازیهایتان دربرابر دسترسی غیرمجاز اتخاذ کنید.
جلوگیری از جعل مکان
Google Play محافظتهای داخلی ارائه میدهد تا از استفاده عوامل مخرب از مکانهای جعلی برای بهرهبرداری از تفاوتهای ارزی منطقهای (که بهعنوان جعل مکان نیز شناخته میشود)، سوءاستفاده از تبلیغات و مشوقهای اشتراک، و تلاش برای کلاهبرداری با کارت هدیه جلوگیری کند.
منطق حساس را به باطن خود منتقل کنید
تا جایی که طراحی برنامهتان اجازه میدهد، دادهها و منطق حساس را به سرور زیرینهای که کنترل میکنید منتقل کنید. هرچه دادهها و منطق بیشتری در دستگاه پیشانه داشته باشید، آسیبپذیری آن دربرابر تغییر یا دستکاری بیشتر میشود.
برای مثال، یک بازی شطرنج آنلاین باید همه حرکتها را در زیرینه درستیسنجی کند و به اینکه پیشزمینه همیشه حرکتهای قانونی ارسال میکند اعتماد نکند.
علاوهبراین، اگر آسیبپذیری یا مشکل امنیتی پیدا کنید، بسته به طراحی سیستم شما، ممکن است اشکالزدایی، رفع، و استقرار بهروزرسانیها در پسنما آسانتر از پیشنما باشد.
درستیسنجی خریدها قبلاز اعطای حقوق
یک مورد خاص از دادهها و منطق حساس که باید در پسبک مدیریت شود، درستیسنجی و تأیید خرید است. پساز اینکه کاربر خریدی انجام داد، باید کارهای زیر را انجام دهید:
- purchaseToken مربوطه را به پسین خود ارسال کنید. این یعنی باید سابقه همه مقادیر purchaseToken را برای همه خریدها نگه دارید.
- بررسی کنید که مقدار purchaseToken برای خرید فعلی با هیچکدام از مقادیر purchaseToken قبلی مطابقت نداشته باشد. purchaseToken در سطح جهانی منحصربهفرد است، بنابراین میتوانید با اطمینان از این مقدار بهعنوان کلید اصلی در پایگاه دادهتان استفاده کنید.
- از نقاط پایانی Purchases.products:get یا Purchases.subscriptionsv2:get در «میانای برنامهسازی کاربردی توسعهدهندگان Google Play» استفاده کنید تا نزد Google تأیید کنید که خرید قانونی است.
- اگر معتقدید خرید قانونی است، در گذشته استفاده یا پردازش نشده است، و کاربر همه بررسیهای واجدشرایط بودن و تقلب را میگذراند، میتوانید با اطمینان حق مالکیت محصول درونبرنامهای یا اشتراک را اعطا کنید.
- بررسیهای واجدشرایط بودن و سوءاستفاده: تأیید کنید که کاربر همچنان برای این مورد واجدشرایط است. اگر جریان صورتحساب را با obfuscatedAccountId یا obfuscatedProfileId پیکربندی کردهاید، بررسی کنید که نگاشت خرید با حساب کاربری موردانتظار در سیستم شما مطابقت داشته باشد. هرگونه بررسی اضافی سوءاستفاده، خطر، یا امنیت موردنیاز توسط پشتیبان شما را انجام دهید.
- استرداد مبلغ صریح برای خریدهای غیرقانونی: اگر خرید در
درستیسنجی یا بررسیهای سوءاستفاده شما ناموفق بود، حق مالکیت را اعطا نکنید و خرید را
تأیید یا مصرف نکنید. بهجای اینکه اجازه دهید خرید بهدلیل عدم تأیید بهطور خودکار مسترد شود (که مبهم است زیرا میتواند ناشی از اتمام مهلت پردازش نیز باشد)، خرید را بااستفاده از نقطه پایانی
purchases.subscriptionsv2:revoke(با"fullRefund": {}) برای اشتراکها یا نقطه پایانیOrders:refundبا پارامترrevokeکه رویtrueبرای محصولات یکباره تنظیم شده است، بهطور صریح لغو و مسترد کنید. لغو خرید تضمین میکند که کاربر دیگر حق استفاده از خرید را ندارد، و به Google Play علامت واضحی میدهد که خرید توسط توسعهدهنده رد شده است.
- برای اشتراکها، وقتی linkedPurchaseToken در Purchases.subscriptionsv2:get تنظیم شده است، باید linkedPurchaseToken را نیز از پایگاه دادهتان بردارید و حق استفادهای را که به linkedPurchaseToken اعطا شده است لغو کنید تا مطمئن شوید که چند کاربر حق استفاده از یک خرید را ندارند.
- فقط زمانی باید حق استفاده را اعطا کنید که وضعیت خرید PURCHASED (خریداریشده) باشد و حتماً خریدهای PENDING (معلقه) را بهدرستی مدیریت کنید. اگر جهشی در خریدهای «لغوشده» وجود دارد، ممکن است زمانیکه خرید هنوز در وضعیت «درحال انتظار» است، حق استفاده اعطا میکنید. میتوانید اطلاعات بیشتری در رسیدگی به تراکنشهای معلق پیدا کنید.
پساز اعطای حق استفاده، اگر میخواهید محصول مصرفشدنی را مصرف و تأیید کنید، از Purchases.products:consume Play Developer API در سرور زیرینه امن خود استفاده کنید. برای تأیید محصول غیرمصرفی یا اشتراک، نقطه پایانی مربوطه در «میانای برنامهسازی کاربردی توسعهدهنده Play» را فراخوانی کنید، یعنی 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 بازتوزیع میشود، حتماً سریع و قاطعانه اقدام کنید. برای جزئیات بیشتر، به صفحه پرسشگان حق نشر در «مرکز راهنمایی حق نشر» مراجعه کنید.