ورود

View Full Version : وب سرویس+پرداخت درون برنامه ای



handinux
جمعه 09 آبان 1393, 19:12 عصر
با سلام

مشکلی که برای من پیش اومده اینه که یه اپلیکیشن دارم که قرار از پرداخت درون برنامه ای بازار استفاده کنه.به این صورت که در ازای پرداخت وحه بتونه یک آگهی در سیستم تبلیغاتی من ثبت کنه.قراره بعد از پرداخت یک وب سرویس اطلاعات تبلیغات رو بگیره و ثبت کنه.اما مشکل اینه که چطوراین وب سرویس فقط به کسانی سرویس بده که پرداخت داشتن و هرکسی نتونه از وب سرویس استفاده کنه.نمی خوام کاربر رو هم مجبور کنم اکانت داشته باشه و یوزر پسورد هندلش کنم.سوال اینه که چطور این وب سرویس رو محدود کنم به اونایی که پرداخت داشتن؟

omid.n1990
جمعه 09 آبان 1393, 22:07 عصر
نمونه پرداخت درون برنامه ای در همین فروم رو دانلود کنید و تست کنید تا روند دستتون بیاد.
شما کاربر رو به پرداخت بازار هدایت میکنید بعد از اینکه پرداخت با موفقیت انجام شد به برنامه اتون بازگشت داده میشه و اگر موفق بود اونوقت شما مثلا کاربر رو به یک اکتیویتی دیگه هدایت میکنید که اون اکتیویتی به وب سرویس اطلاعات میفرسته و اگر پرداخت ناموفق بود که طبعا به اون اکتیویتی هدایت نمیشه کاربر و نمیتونه اطلاعات به وب سرویس ارسال کنه
موفق باشید

handinux
جمعه 09 آبان 1393, 22:50 عصر
نمونه پرداخت درون برنامه ای در همین فروم رو دانلود کنید و تست کنید تا روند دستتون بیاد.
شما کاربر رو به پرداخت بازار هدایت میکنید بعد از اینکه پرداخت با موفقیت انجام شد به برنامه اتون بازگشت داده میشه و اگر موفق بود اونوقت شما مثلا کاربر رو به یک اکتیویتی دیگه هدایت میکنید که اون اکتیویتی به وب سرویس اطلاعات میفرسته و اگر پرداخت ناموفق بود که طبعا به اون اکتیویتی هدایت نمیشه کاربر و نمیتونه اطلاعات به وب سرویس ارسال کنه
موفق باشید
اونوقت ورشکسته مىشم که اىنطورى!
اگر ىک نفر وب سروىس من رو خارج از برنامه من call کنه مى تونه براحتى و بدون پرداخت تبلىغ درج کنه.
دوستانى که در زمىنه امن کردن وب سروىس ها بدون لاگىن تجربه دارند بفرماىند چکار باىد کرد.

pbm_soy
شنبه 10 آبان 1393, 00:11 صبح
من با این امکان بازار کار نکردم ولی باتوجه به تجارب گذشته چند تا نکته را عرض میکنم شاید راه گشا شود و بقیه دوستان هم بیان تجارب و نظراتشان را بگن

شما برای اینکار یک مکانیزم اعتبارسنجی نیاز دارید باتوجه به اینکه شما نمیخواهید کاربر را مجبور به عضویت کنید پس فکر میکنم باید چندکار ترکیبی باید انجام دهید
آیا برنامه شما به ازاء هرپرداخت فقط یکبار به وب سرویس مراجعه می کند و یا اینکه یک مبلغی پرداخت می کند وتا زمانی که آن مبلغ تمام شود هراز چندگاهی می تواند به وب سرویس مراجعه کند و از خدمات آن استفاده کند؟ (بسته به جواب این سوال راه امنیت هم می تواند متفاوتتر باشد)
1- آیا بازار اطلاعاتی مبنی بر پرداخت مشتریان شما به شما میدهد؟ چه نوع اطلاعاتی هستند؟ آیا به این اطلاعات از طریق برنامه نویسی می توانید دسترسی داشته باشید؟ اگر این امکان وجود دارد می توانید در کنار اعتبارسنجی خود کاربران یک اعتبارسنجی موازی هم انجام دهید
2- تا اونجائی که میتوانید وب سرویس را باید محدود کنید تا از کسانی که معتبر نیستند داده دریافت نکند مثلا وب سرویس فقط از گوشی یا فقط از آندروید داده دریافت کند مثلا به همراه اطلاعات پرداختی که برنامه شما به وب سرویس ارسال می کند شماره سریال گوشی و دیگر اطلاعات منحصر به فرد (مانند MAC Address) را به وب سرویس بفرستید (شاید اطلاعات اینچنینی را سیستم پرداخت بازار هم برای خودش ثبت می کند نمیدانم)
3- اکتیویتی که کار ارتباط با وب سرویس را انجام میدهد باید چفت و بست بیشتر بذارید مثل همون چیزی که دوستمون در پست بالا فرمودند درصورتی باز بشه که تائید پرداخت آمده باشد و دیگه هم به هیچ عنوان باز نشود (البته همین قضیه هم میتواند از انعطاف برنامه بکاهد!) قاعدتا به همراه اطلاعات بالائی شما بایداطلاعات تائید پرداخت را هم به وب سرویس بفرستید (اگر بتوانید این اطلاعات را با وب سرویس پرداخت درون برنامه بازار از طریق وب سرویس خودتون چک کنید که دیگر مشکل میتواند حل شود)
4- فرمت و ساختار اطلاعات تائید پرداخت را در وب سرویس چک کنید (ساده ترین موارد مبلغ - نام بانک - تاریخ - کد تراکنش - کد رهگیری بانک - کد رهگیری بازار) اولا مال امروز باشند و حتی ساختار کدهای رهگیری را چک کنید تعداد رقمها و غیره (شاید کار صد در صدی نباشد هرچی باشد یک لایه امنیت به کارتون اضافه کرده اید)
5- مهم:
کسی که بخواهد سوء استفاده کند خیلی راحت با استراق سمع درخواست ارسالی به وب سرویس خودش میتواند در آینده چنین درخواستی را ازطریق برنامه دیگری و یا از طریق حتی یک وب بروزر ساده به وب سرویس شما بفرستد پس تا اونجائی که میتوانید این داده ها را پیچیده به وب سرویس ارسال کنید (کد کنید و حتی در چند مرحله به وب سرویس ارسال کنید) می توانید با چند مرحله ای کردن امنیت را نسبتا بالا ببرید (هرچند که با اینکار انعطاف برنامه کم شود!) مثلا برنامه درخواست ارسال داده به وب سرویس بفرستد وب سرویس هم باید جوابهایی که دربالا عرض کردم را باید درخواست کند البته در چند مرحله و با ترتیبهای کاملا تصادفی از مشتری درخواست کند. مثلا یکبار اول تائید پرداخت بازار را بخواهد و از مشتری دیگری سوم این داده را درخواست کند

*** در هرصورت همه این گفته قابل دور زدن هستند چون برنامه آندروید قابل Decompile شدن است و کسی که میخواهد شما را ورشکسته کند می تواند با مطالعه سورس شما از مکانیز برنامه شما استفاده کند!
بهترین کار اینه که شما بصورت موازی تائید پرداخت را از بازار هم بگیرید حتما بازار ریز پرداختیها را به شما گزارش میدهد (از طریق وب سرویس یا از طریق یک ایمیل یا از طریق یک صفحه وب) در وب سرویس خودتان هروقت درخواستی از کاربر به همراه اطلاعات پرداخت رسید آنرا در گزارشهای بازار هم جستجو کنید (این تنها و مطمئنترین راه است!)

همه کسانی که کار امنیتی انجام دادند هیچ وقت نمیتوانند امنیت را 100% تضمین کنند معمولا کار را با یک سطح امنیت قابل قبول شروع میکنند و با مانیتور کردن سیستم وپیدا کردن حفره ها امنیتی ، آروم آروم لایه های امنیتی اضافه کرده و امنیت را بهتر می کنند

Nevercom
شنبه 10 آبان 1393, 08:24 صبح
یک نکته ی کلی این هست که هر درخواستی که از اپلیکیشن بفرستید، براحتی میشه از محیط دیگه ارسال کرد.
اگر IMEI رو بفرستید یا MAC Address یا هرچیز دیگه، باز هم میشه اون به درخواست اضافه کرد و فرستاد.
هیچ راه تشخیصی هم ندارید که درخواست حتماً از گوشی و اپلیکیشن شما ارسال شده (هر پارامتری رو برای این تشخیص درنظر بگیرید، قابل شبیه سازی هست)

پس باید درخواست دهنده رو خودتون اعتبار سنجی کنید.

درمورد پرداخت درون برنامه ای بازار متاسفانه نمیدونم چه اطلاعاتی بهتون بر میگردونه یا آیا امکان این رو بهتون میده که پارارمتری رو به وب سرویسشون ارسال کنید و اعتبار سنجیش کنید که آیا خرید کرده یا نه.

فرض کنیم یک کاربر خرید رو انجام میده، و بازار هم شناسه ای بهتون نمیده. شما برای انجام پرداخت درون برنامه ای باید یک شناسه ی Unique به بازار ارسال کنید. جالا اگر پرداخت موفق بود، اون شناسه رو بفرستید به وی سرورتون و پس از ثبت در سیستم، یک API Key براش درست کنید و پس بفرستید، هر درخواستی درصورتی معتبر هست که یک API Key معتبر داشته باشه.
روی API Key کنترل دارید و می تونید هرموقع فعالیت مشکوکی داشت، بی اعتبارش کنید.

حالا مشکلی که اینجا وجود داره اینه که باید تایید کنید که فردی که درخواست میده تا براش API Key درست بشه، حتماً در بازار خریدی انجام داده. این قسمت رو بازار باید بصورت وب سرویس در اختیارتون بزاره، در غیراینصورت نمیشه اطمینان داشت به انجام خرید.

handinux
شنبه 10 آبان 1393, 10:06 صبح
​آقاىان pbm و neverrcom خىلى ممنون.من بررسى مىکنم و هروقت به جواب رسىدم ىا سوال تازه اى مطرح شد هم اىنجا اعلام خواهم کرد.

jalil_gh
شنبه 10 آبان 1393, 10:17 صبح
این کاری که شما می‌خوایید انجام بدید فکر کنم با developerPayload قابل پیاده سازی باشه. وقتی شما با متد launchPurchaseFlow درخواست خرید می‌دید یه رشته رو به عنوان developerPayload به این متد می‌دید. این رشته به همراه خرید شما تو مارکت ثبت می‌شه هر وقت خواستید می‌تونید اون رشته رو از طریق مارکت دریافت کنید.
شما می‌تونید یه رشته منحصر به فرد ایجاد کنید به عنوان developerPaylod. هر وقت که خرید با موفقیت انجام شد این رشته رو تو سرور خودتون ذخیره کنید.
بعد از اون هرکس خواست تبلیغ ایجاد کنه باید این رشته منحصر به فرد رو هم ارسال کنه و باقی ماجرا ...

darkeliden
شنبه 10 آبان 1393, 13:19 عصر
از imei گوشی استفاده کن.هربار پرداخت انجام شد تو گوشی imei اش تو سیستم ات ثبت کن

abbasalim
شنبه 10 آبان 1393, 15:28 عصر
از imei گوشی استفاده کن.هربار پرداخت انجام شد تو گوشی imei اش تو سیستم ات ثبت کن

سلام دوستان
دوست عزیز جناب Nevercom (http://barnamenevis.org/member.php?89707-Nevercom) گفتن که این قابل شبیه سازیه و معتبر نیست

darkeliden
شنبه 10 آبان 1393, 22:35 عصر
سلام دوستان
دوست عزیز جناب Nevercom (http://barnamenevis.org/member.php?89707-Nevercom) گفتن که این قابل شبیه سازیه و معتبر نیست

دوست عزیز تمام الگوریتم ها هک میشن . اینجا بحث هزینه الکی هست. کسی نمیاد واسه یه تبلیغات ایمی شبیه سازی کنه. میتونه تلفیقی از ایمی و uuid بزنه و الکی هزینه سرور نکنه . مشکل برنامه نویس های ایرانی همین بالانس نکردن هزینه و درصد خطاست