PDA

View Full Version : امنیت در ساخت یک api



android-coder
یک شنبه 25 مرداد 1394, 10:41 صبح
سلام خسته نباشید.
بنده میخوام یک برنامه سایت برای موبایل بنویسیم ، اما نمیدونم باید چطور امنیتش رو برقرار کنم.
یعنی چطور کاری کرد که هیچکس جزء برنامه اندرویدی خودم نتونه از اطلاعات استفاده کنه.
لطفا راهنمایی کنید

Nevercom
یک شنبه 25 مرداد 1394, 21:58 عصر
در یک کلام، نمیتونید !

هر شرط و پارامتری که برای تایید اصالت درخواست دهنده قرار بدید، قابل شبیه سازی هست.
ضمن اینکه امنیت این نیست که تنها یک Client بتونه از API شما استفاده کنه، بلکه اینکه چه اطلاعاتی برای چه کسانی نمایش داده بشه، یا تعیین سطوح دسترسی که هر درخواست دهنده بتونه تنها عملیاتی که برای مجوز صادر شده رو انجام بده.

AliRezaBeytari
دوشنبه 26 مرداد 1394, 00:41 صبح
در یک کلام، نمیتونید !

هر شرط و پارامتری که برای تایید اصالت درخواست دهنده قرار بدید، قابل شبیه سازی هست.
ضمن اینکه امنیت این نیست که تنها یک Client بتونه از API شما استفاده کنه، بلکه اینکه چه اطلاعاتی برای چه کسانی نمایش داده بشه، یا تعیین سطوح دسترسی که هر درخواست دهنده بتونه تنها عملیاتی که برای مجوز صادر شده رو انجام بده.

حتی اگر از API در ++C به صورت NDK استفاده بشه هم باز API ها لو میرند ؟؟!!!

amin_lni
دوشنبه 26 مرداد 1394, 01:14 صبح
پس توکن چیه ؟
دوست عزیز روش های رمز نگاری نامتقارن استفاده کنید . (اگر میخواهید خیلی پیشرفته کار کنید )
اگر نه با یک سری دستکاری و عوض کردن پروتکول و ارسال اطلاعات تاییدی و توکن و چک کردن بعضی مشخصات در طرف سرور میشه امنیت نصبی برقرار کرد

Nevercom
دوشنبه 26 مرداد 1394, 18:01 عصر
حتی اگر از API در ++C به صورت NDK استفاده بشه هم باز API ها لو میرند ؟؟!!!
فرض می کنیم شما آدرس وب سرویس رو کاملاً مخفی کردید، من نیاز ندارم که سورس کد شما رو برای پیدا کردن آدرس وب سرویس بدست بیارم، کافیه برنامه ی شما رو اجرا کنیم و یک پروکسی رو شبکه ایجاد کنم و با ابزارهایی مثل Wireshark شبکه رو مانیتور کنم، کل درخواست شما به همراه آدرس API و تمام پارامترها رو میتونم ببینم، حتی Response سرور رو هم میتونم ببینم.

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

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

AliRezaBeytari
سه شنبه 27 مرداد 1394, 00:56 صبح
فرض می کنیم شما آدرس وب سرویس رو کاملاً مخفی کردید، من نیاز ندارم که سورس کد شما رو برای پیدا کردن آدرس وب سرویس بدست بیارم، کافیه برنامه ی شما رو اجرا کنیم و یک پروکسی رو شبکه ایجاد کنم و با ابزارهایی مثل Wireshark شبکه رو مانیتور کنم، کل درخواست شما به همراه آدرس API و تمام پارامترها رو میتونم ببینم، حتی Response سرور رو هم میتونم ببینم.

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

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

میشه بگید چطور میشه ریموت کرد تمام درخواست هایی که یه برنامه ارسال میکنه ؟؟!!؟!

Nevercom
سه شنبه 27 مرداد 1394, 17:30 عصر
میشه بگید چطور میشه ریموت کرد تمام درخواست هایی که یه برنامه ارسال میکنه ؟؟!!؟!

با Wireshark میشه خیلی ساده شبکه رو تحت نظر گرفت، مثلاً میتونید برنامه رو تو Genymotion اجرا کنید و با Wireshark ترافیک رو مانیتور کنید

از پروسه ای که میگم فیلم گرفتم که میتونید ببینید: http://bayanbox.ir/download/6285163167619727284/wireshark-android.mp4

AliRezaBeytari
یک شنبه 08 شهریور 1394, 12:37 عصر
با Wireshark میشه خیلی ساده شبکه رو تحت نظر گرفت، مثلاً میتونید برنامه رو تو Genymotion اجرا کنید و با Wireshark ترافیک رو مانیتور کنید

از پروسه ای که میگم فیلم گرفتم که میتونید ببینید: http://bayanbox.ir/download/6285163167619727284/wireshark-android.mp4

خیلی ازتون ممنونم. اما یه مشکلی هست !!
بعضی از برنامه ها هستند که از پروتوکل های دیگه ای مثل TCP یا TLS استفاده میکنند.
برای اون ها باید چیکار کرد ؟؟!!!