گوگل پلی به تضمین امنیت کاربران و توسعهدهندگان متعهد است. ما درک میکنیم که ایجاد یک کسبوکار اپلیکیشن پررونق به یک پلتفرم قابل اعتماد متکی است - پلتفرمی که با دفاع پیشگیرانه در برابر عوامل مخرب، بازگشت سرمایه شما را تضمین میکند.
این سند توصیههایی را برای جلوگیری از حملات به یکپارچهسازی صورتحساب شما و کاهش تأثیر سوءاستفاده در برنامه شما شرح میدهد.
محافظتهای خود را بهبود بخشید
APIها و ابزارهای زیر میتوانند خطرات موجود در برنامه شما را کاهش دهند:
- API خریدهای باطلشده : دسترسی به سفارشهای باطلشده را لغو کنید.
- شناسه حساب مبهم : به تشخیص زمانی که چندین دستگاه در یک دوره کوتاه از یک حساب خرید میکنند، کمک میکند.
- مصرف بکاند : ابزارهایی مانند Purchases.products:consume منطق کسبوکار را به بکاندهای امن شما منتقل میکنند و از دستکاری سمت کلاینت جلوگیری میکنند. علاوه بر استفاده از این APIهای پلتفرم، بهترین شیوههای زیر را برای ایمنسازی بیشتر ادغامهای خود در برابر دسترسی غیرمجاز اتخاذ کنید.
جلوگیری از جعل موقعیت مکانی
گوگل پلی محافظتهای داخلی ارائه میدهد تا از سوءاستفادهی افراد سودجو از موقعیتهای مکانی جعلی برای سوءاستفاده از تفاوتهای ارزی منطقهای (که به عنوان جعل موقعیت مکانی نیز شناخته میشود)، سوءاستفاده از تبلیغات و مشوقهای اشتراک و کلاهبرداری با کارت هدیه جلوگیری کند.
منطق حساس را به backend خود منتقل کنید
تا جایی که طراحی برنامه شما اجازه میدهد، دادهها و منطق حساس را به سرور بکاندی که کنترل میکنید منتقل کنید. هرچه دادهها و منطق بیشتری در دستگاه فرانتاند داشته باشید، آسیبپذیری آن در برابر تغییر یا دستکاری بیشتر میشود.
برای مثال، یک بازی شطرنج آنلاین باید تمام حرکات موجود در بکاند را اعتبارسنجی کند، نه اینکه به این اعتماد کند که فرانتاند همیشه حرکات مجاز را ارسال میکند.
علاوه بر این، اگر آسیبپذیریها یا مشکلات امنیتی پیدا کنید، بسته به طراحی سیستم شما، ممکن است اشکالزدایی، رفع مشکل و اعمال بهروزرسانیها در backend آسانتر از frontend باشد.
قبل از اعطای مجوز، خریدها را تأیید کنید
یک مورد خاص از دادهها و منطق حساس که باید در backend مدیریت شود، تأیید و اعلام خرید است. پس از اینکه کاربر خریدی انجام داد، باید موارد زیر را انجام دهید:
- purchaseToken مربوطه را به backend خود ارسال کنید. این بدان معناست که شما باید سابقهای از تمام مقادیر purchaseToken را برای همه خریدها نگهداری کنید.
- تأیید کنید که مقدار purchaseToken برای خرید فعلی با هیچ یک از مقادیر purchaseToken قبلی مطابقت ندارد. purchaseToken به صورت جهانی منحصر به فرد است، بنابراین میتوانید با خیال راحت از این مقدار به عنوان کلید اصلی در پایگاه داده خود استفاده کنید.
- از نقاط پایانی Purchases.products:get یا Purchases.subscriptionsv2:get در API توسعهدهندگان گوگل پلی برای تأیید قانونی بودن خرید توسط گوگل استفاده کنید.
- اگر خرید قانونی باشد و قبلاً استفاده نشده باشد، میتوانید با خیال راحت حق استفاده از آیتم یا اشتراک درونبرنامهای را اعطا کنید.
- برای اشتراکها، وقتی linkedPurchaseToken در Purchases.subscriptionsv2:get تنظیم شده باشد، باید linkedPurchaseToken را از پایگاه داده خود حذف کنید و حقی را که به linkedPurchaseToken اعطا شده است، لغو کنید تا اطمینان حاصل شود که چندین کاربر برای یک خرید حق استفاده ندارند.
- شما باید فقط زمانی که وضعیت خرید «خریداری شده» است، مجوز خرید (entitlement) اعطا کنید و مطمئن شوید که خریدهای در حال انجام (PENDING) را به درستی مدیریت میکنید. اگر تعداد خریدهای لغو شده (CANCELED) افزایش یافته است، ممکن است زمانی که خرید هنوز در وضعیت «در حال انجام» است، مجوز خرید (entitlement) اعطا کنید. میتوانید اطلاعات بیشتر را در بخش «مدیریت تراکنشهای در حال انجام» (Managing Pending transactions) بیابید.
پس از اعطای مجوز، اگر میخواهید یک محصول مصرفی را مصرف و تأیید کنید، از Purchases.products:consume Play Developer API در سرور امن backend خود استفاده کنید. برای تأیید یک محصول غیر مصرفی یا اشتراک، نقطه پایانی مربوط به Play Developer API را، یا Purchases.products:acknowledge یا Purchases.subscriptions:acknowledge در سرور امن backend خود فراخوانی کنید. تأیید لازم است، زیرا به Google Play اطلاع میدهد که به کاربر مجوز خرید اعطا شده است. شما باید بلافاصله پس از اعطای مجوز، خرید را تأیید کنید.
توجه داشته باشید که اگرچه میتوانید خرید را در سمت کلاینت از طریق برنامه خود تأیید یا مصرف کنید، APIهای سمت سرور محافظت بیشتری در برابر مشکلاتی مانند اتصال ضعیف شبکه و فعالیتهای مخرب ارائه میدهند. به عنوان مثال، در نظر بگیرید که کاربری کالایی را از برنامه شما خریداری کرده است اما در حین تأیید خرید، اتصال شبکه خود را از دست داده است. بدون تأیید سرور، ممکن است لازم باشد برای تکمیل فرآیند تأیید، دوباره از طریق برنامه وارد سیستم شود. در غیر این صورت، اگر کاربر ظرف سه روز وارد سیستم نشود، به دلیل عدم تأیید خرید، مبلغ خرید به طور خودکار بازپرداخت میشود. تأیید سرور با ارسال تأیید به محض اینکه گوگل پلی به سرور اطلاع میدهد که خرید معتبر است، از این سناریو جلوگیری میکند.
برای اطلاعات بیشتر در مورد تأیید خرید و مصرف، به پردازش خریدها مراجعه کنید.
محافظت از محتوای قفلگشاییشدهی شما
برای جلوگیری از توزیع مجدد محتوای قفلگشاییشده توسط کاربران مخرب، آن را در فایل APK خود قرار ندهید. در عوض، یکی از موارد زیر را انجام دهید:
- از یک سرویس بلادرنگ برای ارائه محتوای خود استفاده کنید، مانند فید محتوا. ارائه محتوا از طریق یک سرویس بلادرنگ همچنین به شما این امکان را میدهد که محتوای خود را بهروز نگه دارید.
- از یک سرور راه دور برای ارائه محتوای خود استفاده کنید. وقتی محتوا را از یک سرور راه دور یا یک سرویس بلادرنگ ارائه میدهید، میتوانید محتوای قفلگشایی شده را در حافظه دستگاه ذخیره کنید یا آن را روی کارت SD دستگاه ذخیره کنید. اگر محتوا را روی کارت SD ذخیره میکنید، حتماً محتوا را رمزگذاری کنید و از یک کلید رمزگذاری مخصوص دستگاه استفاده کنید.
شناسایی و مدیریت خریدهای باطل شده
خریدهای باطلشده، خریدهایی هستند که لغو، ابطال یا وجه آنها بازگردانده شده است. اگر یک خرید باطلشده قبلاً اقلام درونبرنامهای یا محتوای دیگری را به کاربر اعطا کرده باشد، میتوانید از API خریدهای باطلشده برای دریافت دلیل ابطال خرید به همراه هرگونه محتوای مرتبط که میتوانید پس بگیرید، استفاده کنید.
خریدهای مربوط به اقلام درونبرنامهای و اشتراکها میتوانند به دلایل مختلفی از جمله موارد زیر لغو شوند:
- یک خرید، یا توسط کاربر، توسط توسعهدهنده یا توسط گوگل (از جمله خریدهای لغو خودکار تأیید نشده) لغو میشود. در مورد اشتراکها، توجه داشته باشید که این به لغو خرید اشتراک اشاره دارد، نه لغو خود اشتراک .
- هزینه خرید برگشت داده میشود.
توسعهدهندهی اپلیکیشن، سفارش کاربر را لغو یا وجه آن را بازپرداخت میکند و گزینهی «لغو» را در کنسول بررسی میکند. بر اساس دلیل لغو خرید و با در نظر گرفتن دادههای رفتاری قبلی کاربر، میتوانید در مورد یک مسیر اقدام تصمیمگیری کنید. توصیه میکنیم یک یا چند مورد از موارد زیر را اجرا کنید:
انجام بازپسگیری: وقتی خریدی لغو میشود، میتوانید اقلام استفاده نشده را طوری پس بگیرید که انگار هرگز خریداری نشدهاند. به عنوان مثال، اگر خرید ارز درون بازی لغو شود، میتوانید ارزی را که قبلاً به کاربر اعطا شده بود، پس بگیرید. در صورتی که کاربر قبلاً ارز را خرج کرده باشد، میتوانید موجودی ارز را منفی تنظیم کنید و فعالیت برنامه و خریدهای آینده را تا مثبت شدن موجودی ارز محدود کنید.
اجرای چندین ضربه: برای متخلفانی که برای اولین بار مرتکب تخلف میشوند، اقدامات ملایمتری مانند نمایش هشدارهای درون برنامهای در نظر بگیرید. برای متخلفان مکرر، اقدامات شدیدتری را در نظر بگیرید.
غیرفعال کردن موقت خریدها: مشابه پیادهسازی چندین اخطار، غیرفعال کردن خریدها را برای کاربرانی که خریدهایشان باطل شده است، در نظر بگیرید تا زمانی که بتوانید دلیل ابطال خریدها را بهطور کامل بررسی کنید.
دسترسی به برنامه خود را به طور موقت یا دائم غیرفعال کنید: در موارد شدید با فعالیت مخرب مکرر، دسترسی به برنامه خود را به طور موقت یا دائم غیرفعال کنید.
فراخوانیهای مکرر API مربوط به خریدهای باطلشده: وقتی یک یا چند خرید باطلشده را شناسایی کردید، فراخوانیهای مکرر API مربوط به خریدهای باطلشده را در نظر بگیرید تا خریدها را قبل از اینکه کاربر بتواند آنها را مصرف کند، پس بگیرید. میتوانید اطلاعات بیشتر در مورد سهمیههای API مربوط به خریدهای باطلشده را در مستندات API مربوط به خریدهای باطلشده بیابید.
به گوگل کمک کنید تا کلاهبرداری را قبل از وقوع تشخیص دهد
برخی از انواع کلاهبرداری مربوط به کاربران مخربی است که چندین حساب گوگل و درون برنامهای ایجاد میکنند تا فعالیت خود را پنهان کنند.
از متدهای setObfuscatedAccountId و setObfuscatedProfileId در سازندهی BillingFlowParams استفاده کنید تا به گوگل کمک کنید حسابهای گوگل را به حسابهای درونبرنامهای نگاشت کند.
گوگل از این دادهها برای شناسایی رفتارهای مشکوک و مسدود کردن برخی از انواع تراکنشهای کلاهبرداری قبل از تکمیل آنها استفاده میکند.
اقدام علیه نقض علامت تجاری و حق چاپ
اگر از یک سرور راه دور برای ارائه یا مدیریت محتوا استفاده میکنید، از برنامه خود بخواهید که وضعیت خرید محتوای قفل نشده را هر زمان که کاربر به محتوا دسترسی پیدا میکند، تأیید کند. این به شما امکان میدهد در صورت لزوم استفاده را لغو کنید و دزدی دریایی را به حداقل برسانید. اگر مشاهده کردید که محتوای شما در Google Play دوباره توزیع میشود، حتماً سریع و قاطعانه اقدام کنید. برای جزئیات بیشتر، به صفحه سوالات متداول در مورد حق چاپ در مرکز راهنمای حق چاپ مراجعه کنید.