PDA

View Full Version : سوال: چگونه متوجه بشم ریکوئست ارسال شده از application خودم اومده ؟



dezchilds
سه شنبه 14 اسفند 1397, 18:41 عصر
سلام دوستان ، یک برنامه اندرویدی قراره نوشته بشه که سمت سرورش php هست و اطلاعات رد و بدل شونده هم json هستند ، حالا سوالم اینه چطوری متوجه بشم که ریکوئست های ارسال شده از برنامه ای هست که خودم نوشتم و از برنامه های غیره نیومده ؟ راهکارش چیه ؟

farhad_shiri_ex
چهارشنبه 15 اسفند 1397, 14:08 عصر
سلام دوستان ، یک برنامه اندرویدی قراره نوشته بشه که سمت سرورش php هست و اطلاعات رد و بدل شونده هم json هستند ، حالا سوالم اینه چطوری متوجه بشم که ریکوئست های ارسال شده از برنامه ای هست که خودم نوشتم و از برنامه های غیره نیومده ؟ راهکارش چیه ؟

سوالتون خیلی شفاف نیست؟
البته اینم که نوشتم توضیح واضحات هست...
وقتی شما api وب سرویس سمت php می نویسید داخل برنامه خودتون سمت اندروید باید آدرس url وب سرویس خودتون را استفاده کنید بنابراین جواب دریافتی تون هم از وب سرویس خودتون هست

ali_sed
چهارشنبه 15 اسفند 1397, 23:36 عصر
سلام دوستان ، یک برنامه اندرویدی قراره نوشته بشه که سمت سرورش php هست و اطلاعات رد و بدل شونده هم json هستند ، حالا سوالم اینه چطوری متوجه بشم که ریکوئست های ارسال شده از برنامه ای هست که خودم نوشتم و از برنامه های غیره نیومده ؟ راهکارش چیه ؟

سلام

معمولا از یک رشته درهم استفاده می شود. api_code این مقدار در برنامه ذخیره شده و همراه تمامی درخواست ها ارسال می شود و سمت سرور بررسی می شود. البته توجه داشته باشید که ارتباط بین برنامه و سرور باید کد شده باشد مثلا از ssl استفاده کنید.

peymang
پنج شنبه 16 اسفند 1397, 00:26 صبح
اگه یه api key داخل برنامتون ذخیره بشه یه نفر دیگه می تونه با مهندسی معکوس اون api key رو بدست بیاره و داخل یه کد دیگه استفاده کنه.

اگه فقط می خواین برنامه ی خودتون از api که نوشتین استفاده کنه باید اول کاربر ثبت نام کنه و بعد از وارد شدن بتونه از api استفاده کنه( اینطوری می تونید اگه کسی هم بیش از حد از api استفاده می کنه محدود کنید)

** داخل راه حلی که گفته شد هنوز اپ دیگه ای می تونه از api استفاده کنه ولی خوبیش اینه که می تونید کاربر هاتون رو بر اساس تعداد درخواست و آی پی محدود کنید

dezchilds
جمعه 17 اسفند 1397, 16:52 عصر
سلام

معمولا از یک رشته درهم استفاده می شود. api_code این مقدار در برنامه ذخیره شده و همراه تمامی درخواست ها ارسال می شود و سمت سرور بررسی می شود. البته توجه داشته باشید که ارتباط بین برنامه و سرور باید کد شده باشد مثلا از ssl استفاده کنید.



خوب اگه یه نفر این وسط بشینه و این api_code رو بدست بیاره و یه برنامه بنویسه که این api_code رو ارسال کنه ، نرم افزار من چطوری تشخیص بده که این api_code از یه برنامه ثانویه اومده ؟ یا برای مثال برنامه رو ریورس کنه و api_code رو بدست بیاره


اگه یه api key داخل برنامتون ذخیره بشه یه نفر دیگه می تونه با مهندسی معکوس اون api key رو بدست بیاره و داخل یه کد دیگه استفاده کنه.

اگه فقط می خواین برنامه ی خودتون از api که نوشتین استفاده کنه باید اول کاربر ثبت نام کنه و بعد از وارد شدن بتونه از api استفاده کنه( اینطوری می تونید اگه کسی هم بیش از حد از api استفاده می کنه محدود کنید)

** داخل راه حلی که گفته شد هنوز اپ دیگه ای می تونه از api استفاده کنه ولی خوبیش اینه که می تونید کاربر هاتون رو بر اساس تعداد درخواست و آی پی محدود کنید

یعنی راه حل قطعی وجود نداره که ریکوئست ها رو بتونی اعتبار سنجی کنی که از برنامه خودت اومده باشن ؟ میشه بیشتر در مورد مکانیزم چیزی که میگید توضیح بدید

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

peymang
شنبه 18 اسفند 1397, 00:41 صبح
اگه از سمت وب باشه می شه با یک key یا token و آی پی کنترل کرد(به خاطر اینکه قابل دیدن برای کلاینت نیست و آی پی ثابته) ولی اینجا کلاینت کنترل کامل روی اطلاعات ارسالی داره و از طرفی ممکنه کاربرها با یک ای پی درخواست بدن ( وقتی که روی یک شبکه باشند) که راه اعتبارسنجی از طریق ای پی هم بی استفاده میشه
برای همین تنها راه به نظرم میمونه اعتبار سنجی از طریق نام و رمز که کاربر باهاش ثبت نام کرده

مکانیزیم خاصی هم نداره مثلا وقتی که کاربر یه درخواست داد مثلا ستون "تعداد_درخواست" یک عدد اضافه بشه و اگه از یک حدی زیادتر شد محرومیت موقت یا دائم براش اعمال بشه و اگر هنوز به حداکثر درخواست نرسیده بود اطلاعات براش ارسال بشه

plague
شنبه 18 اسفند 1397, 14:18 عصر
2 راه داری
1 - کل دیتای ارسالی رو انکریپت کن و بعد بفرست و توی سرر دیکریپتش کن
2 - توکن یا api_Code یا حالا هرچی رو با یه فرمول مشخص تولید کن مثلا ساعت و دقیقه فعلی رو میزاری کنار هم مثلا الان 2:38 دقیقست میشه 238
وقتی درخواست رسید به سرور اوجا هم با همین فرمول عدد رو بدست میاری و مقایسه میکنی البته این یه مثال فوقالعاده ساده بود

ali_sed
یک شنبه 19 اسفند 1397, 14:54 عصر
خوب اگه یه نفر این وسط بشینه و این api_code رو بدست بیاره و یه برنامه بنویسه که این api_code رو ارسال کنه ، نرم افزار من چطوری تشخیص بده که این api_code از یه برنامه ثانویه اومده ؟ یا برای مثال برنامه رو ریورس کنه و api_code رو بدست بیاره

دلیل شما برای اینکه میخواهید تنها برنامه اندرویدی امکان ارسال درخواست داشته باشد چیست؟ به عبارت دیگر هدف اصلی شما از این کار چیست؟

وقتی شما public API ایجاد می کنید باید به این نکته توجه کنید که هر ریکوئستی که توسط برنامه اندرویدی شما ارسال شود می تواند توسط هر ابزار دیگری نیز ارسال شود و نمی توانید کنترلی روی آن داشته باشید تمامی راه حل های ارائه شده تنها کار را سخت تر می کند و یا به شما اجازه میدهد ریکوئست های متعدد ارسال شده از سوی یک کاربر خاص یا یک آی پی معین را مسدود کنید.

در ضمن در ریکوئست های خود بجای استفاده از ID بهتر است از یک عبارت درهم استفاده کنید که مانع از دریافت کلیه اطلاعات سرور توسط مهاجم شوید. همچنین درخواست ها را بصورت کد شده و با متد پست ارسال کنید.

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