آموزش روش هایی برای افزایش امنیت در برنامه نویسی اندروید استودیو

آموزش امنیت در برنامه نویسی اندروید -بررسی امنیت سیستم عامل اندروید - الکامکو

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

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

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

1- از ذخیره سازی داخلی برای داده های حساس استفاده کنید

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

برای اینکه بهترین مسیر برای دایرکتوری ذخیره سازی داخلی برنامه را تعیین کنید، توصیه می شود که از روش ()getFilesDir استفاده کنید. هنگامی که مسیر آن را شناختید، ارجاع به فایل های داخل آن به همان سادگی ارجاع به فایل هایی که در داخل پوشه دیگری وجود دارد است. به عنوان مثال ، در اینجا چگونگی ارجاع فایلی به نام myfile.dat در دایرکتوری ذخیره سازی داخلی برنامه  آورده شده است:

File myFile = new File(getFilesDir(), “myfile.dat”);

2. افزایش امنیت اپلیکیشن اندروید با رمزگذاری داده ها در حافظه خارجی

ظرفیت حافظه های داخلی در دستگاه اندرویدی معمولا محدود است. بنابراین بعضی موقع ها ممکن است چاره ای جز ذخیره کردن اطلاعات حساس در حافظه های خارجی مثل SD کارت ها نداشته باشید.

از آنجا که کاربران و سایر برنامه های دستگاه به طور مستقیم می توانند به داده های ذخیره شده در حافظه های خارجی دسترسی پیدا کنند، این موضوع مهم است که آنها را به صورت رمزگذاری شده ذخیره کنید. یکی از محبوب ترین الگوریتم های رمزگذاری که امروزه توسط توسعه دهندگان مورد استفاده قرار می گیرد، AES با اختصار Advanced Encryption Standard با اندازه کلید 256 بیت است.

نوشتن کد برای رمزگذاری و رمزگشایی داده های اپلیکیشن شما که با استفاده از پکیج javax.crypto ، که در Android SDK موجود است، می تواند گیج کننده باشد. بنابراین ، بیشتر توسعه دهندگان استفاده از کتابخانه های شخص ثالث مثل کتابخانه  Facebook’s Conceal را ترجیح می دهند که کار با آن بسیار ساده تر است.

3- برای افزایش امنیت اندروید از Intent ها برای IPC استفاده کنید

برنامه نویسانی که به تازگی شروع به ساخت نرم افزارهای اندرویدی کرده اند معمولا سعی می کنند از sockets ، named pipes یا shared files استفاده کنند تا بتوانند همزمان با برنامه های دیگر نصب شده در دستگاه اندرویدی ارتباط برقرار کنند. این رویکردها نه تنها سخت است، بلکه از نظر امنیتی مستعد تهدید هستند. ولی یک روش آسان تر و ایمن تر برای ارتباط درون پردازشی در سیستم عامل Android ، استفاده از intent ها است.

برای ارسال داده به یک کامپوننت خاص در اپلیکیشن، باید یک نمونه جدید از کلاس Intent ایجاد کنید و از روش () setComponent آن استفاده کنید تا هم نام پکیج نیم و هم نام کامپوننت اپلیکیشن مشخص شود. سپس می توانید داده ها را با استفاده از روش ()putExtra  اضافه کنید.

به عنوان مثال، در اینجا می بینید که چطوری رشته Hello World به Activity ای به نام MyActivity فرستاده می شود، که متعلق به پکیج نیم کامل یک برنامه بنام  my.other.app است:

// Create an intent
Intent intent = new Intent();
// Specify the component name
intent.setComponent(
    new ComponentName("my.other.app","my.other.app.MyActivity")
);
// Add data
intent.putExtra("DATA", "Hello World!");
// Send the intent to the activity
startActivity(intent);
برای ارسال داده ها یکباره به چند تا اپ، شما می توانید intent را به صورت broadcast با روش ()sendBroadcast ارسال کنید. هرچند به صورت پیشفرض Broadcast می تواند توسط هر اپی خوانده شود که به طور مناسب به صورت BroadcastReceiver پیکربندی شده است.

در نتیجه اگر می خواهید اطلاعات حساس را به صورت Broadcast ارسال کنید، باید از یک مجوز سفارشی استفاده کنید که protectionLevel روی آن signature شده است. با این کار ، سیستم عامل اندروید مطمئن می شود که فقط برنامه هایی که با استفاده از کلید امضای شما امضا شده اند می توانند broadcast را دریافت کنند.

در اینجا یک قطعه کد وجود دارد که نحوه ارسال رشته Hello World را به عنوان یک broadcast امن به شما نشان می دهد:

// Create an intent
Intent intent = new Intent();
// Add data
intent.putExtra("DATA", "Hello World");
// Specify an action name for
// the receiver's intent-filter
intent.setAction("my.app.receive");
// Send as a broadcast using a custom permission
sendBroadcast(intent, "my.custom.permission");
توجه داشته باشید که کد بالا فقط در صورتی عمل می کند که مجوز سفارشی در فایل های مانیفست برنامه های فرستنده و گیرنده اعلام و استفاده شود.

4- برای امنیت سیستم عامل اندروید از HTTPS استفاده کنید

تمام ارتباطات بین برنامه و سرورهای شما باید از طریق اتصال HTTPS باشد، ترجیحاً از کلاس HttpsURLConnection استفاده کنید. اگر فکر می کنید استفاده از HTTP برای داده هایی که محرمانه نیستند خوب است، سخت در اشتباهید.

بسیاری از کاربران اندروید هر روزه در خیلی از مکان های عمومی به چندین نقطه Wi-Fi بدون وارد کردن رمز متصل می شوند. بعضی از این نقاط ممکن است مخرب باشند. یک کانون مخرب می تواند به راحتی محتوای ترافیک HTTP را تغییر دهد تا برنامه شما رفتار غیرمنتظره ای داشته باشد.

با استفاده از HTTPS، به شرطی که سرور با گواهی صادر شده توسط یک مرجع معتبر گواهی مانند DigiCert یا GlobalSign پیکربندی شود، می توانید مطمئن باشید که ترافیک شبکه شما هم در برابر شنودها و هم در برابر حملات MITM یا man-in-the-middle امن ست.

توضیحات : حملات MITM شیوه‌ای از شنود فعال است که حمله‌کننده، ارتباط مستقلی را با قربانی، برقرار می‌کند و پیام‌های بین آنها را بازپخش می‌کند. به گونه‌ای که آن‌ها را معتقد می‌کند که در یک ارتباط مستقیم و خصوصی با یکدیگر، صحبت می‌کنند؛ در حالی که همه گفتگوهای آنها توسط حمله‌کننده، کنترل می‌شود. حمله‌کننده باید توانایی شنود همه پیام‌های فرستاده شده بین دو قربانی و گذاشتن پیغام تازه را داشته باشد که در بسیاری از شرایط درست کار کنند.  منبع ویکی پدیا

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

5- برای بالا بردن امنیت اندروید از GCM به جای SMS استفاده کنید

زمانی که GCM که مخفف Google Cloud Messaging است وجود نداشت، بسیاری از توسعه دهندگان از SMS برای انتقال داده از سرورهای خود به اپلیکیشن های خود استفاده می کردند. امروزه این کار تا حد زیادی از بین رفته است.

اگر شما از جمله توسعه دهندگانی هستید که هنوز از SMS به جای GCM استفاده می کنید، باید بدانید که پروتکل SMS نه رمزگذاری شده است و نه در برابر حملات جعل (spoofing attack) ایمن است.

توضیحات: حمله spoofing یا حمله جعل، شرایطى است که در آن یک شخص یا برنامه خود را به عنوان یکی دیگرى معرفی کرده و یا با جعل داده‌ها موفق به دست آوردن مزیت نامشروع می‌شود.

علاوه بر این، هر اپلیکیشنی که در دستگاه کاربر وجود دارد و دارای مجوز READ_SMS است، می تواند SMS را بخواند.

GCM بسیار امن ترین روش ارسالی برای انتقال پیام به یک اپلیکینشن است زیرا تمام ارتباطات GCM رمزگذاری شده است. احراز هویت آنها با استفاده از نشانه های ثبت منظم تازه شده در سمت مشتری و یک کلید API منحصر به فرد در سمت سرور انجام می شود.

6. از پرسیدن درباره اطلاعات شخصی خودداری کنید

این روزها به حریم خصوصی کاربر اهمیت زیادی داده می شود. در حقیقت قوانینی مانند دستورالعمل حفاظت از داده های اتحادیه اروپا Data Protection Directive و قانون محافظت از اطلاعات شخصی و اسناد الکترونیکی کانادا Personal Information Protection and Electronic Documents Act وجود دارد که حفاظت از حریم خصوصی کاربر را مجاز می داند. بنابراین مگر اینکه دلیل کافی و زیرساخت بسیار مطمئنی برای جمع آوری، ذخیره و انتقال اطلاعات شخصی کاربر داشته باشید، در غیر اینصورت باید از درخواست مستقیم آن در برنامه های خود خودداری کنید.

روش بهتر برای تأیید اعتبار کاربر و جستجوی اطلاعات پروفایل کاربر در سیستم عامل اندروید استفاده از Google Identity Platform است. Google Identity Platform به کاربران اجازه می دهد تا با استفاده از حساب Google خود به سرعت وارد برنامه شما شوند.

پس از ورود موفقیت آمیز به سیستم عامل، هر زمان که لازم باشد، برنامه شما می تواند به راحتی جزئیات مختلفی از جمله نام کاربر، آدرس ایمیل، عکس نمایه، مخاطبین و موارد دیگر را درباره کاربر جستجو کند. متناوباً ، می توانید از سرویس های رایگان مانند Firebase استفاده کنید که می توانند احراز هویت کاربر را برای شما مدیریت کنند.

اگر خودتان باید از اطلاعات کاربری استفاده کنید  توصیه می شود که آنها را به صورت هش های امن ذخیره و انتقال دهید. ساده ترین راه برای تولید انواع مختلف هش با استفاده از Android SDK و استفاده از کلاس MessageDigest است.

در اینجا یک قطعه کد کوچک آورده شده است که نحوه ایجاد یک هش از رشته Hello World با استفاده از عملکرد هش SHA-256 را نشان می دهد:

// Initialize MessageDigest to use SHA-256
MessageDigest md = MessageDigest.getInstance("SHA-256");
// Convert the string to a hash
byte[] sha256Hash = md.digest("Hello World".getBytes());

7. برای بالا بردن امنیت اندروید ورودی کاربر را اعتبار سنجی کنید

در سیستم عامل Android ، ورودی نامعتبر از طرف کاربر معمولاً منجر به مشکلات امنیتی مانند اضافه شدن بافر نمی شود. ولی اگر به کاربران اجازه می دهید با یک پایگاه داده SQLite یا یک ارائه دهنده محتوا که در داخل از یک پایگاه داده SQLite استفاده می کند تعامل داشته باشند، باید ورودی کاربر را چک کنید یا از parameterized queries استفاده کنید. عدم انجام این کار، اطلاعات شما را در برابر حملات تزریق اس کیو ال (SQL injection attacks) آسیب پذیر می کند.

توضیحات : حملات تزریق اسکیوال چه زمانی رخ می دهند ؟

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

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

اگر از ورودی کاربر برای تولید کد پویا برای اجرا بر روی یک موتور برنامه نویسی تعبیه شده مانند Mozilla Rhino استفاده می کنید، اعتبارسنجی و اعتبار ورودی کاربر نیز بسیار مهم است.

8. قبل از انتشار از ProGuard استفاده کنید

اگر مهاجمان بتوانند سورس کد اپلیکشن شما را در اختیار بگیرند، اقدامات امنیتی داخلی که در برنامه اندرویدی شما وجود دارد به شدت آسیب می بیند. بخاطر همین قبل از انتشار برنامه، توصیه می شود از ابزاری برای ایمن سازی اپلیکیشن های اندرویدی به نام ProGuard استفاده کنید، که در Android SDK موجود است.

این ابزار بهینه ساز برای Java bytecode است و باعث می شود تا برنامه های جاوا و اندروید شما تا 90 درصد کوچکتر و تا 20 درصد سریعتر شوند.

اگر buildType روی release تنظیم شده باشد، اندروید به طور خودکار ProGuard را در مراحل ساخت قرار می دهد. در اکثر برنامه ها کانفیگ پیش فرض ProGuard در فایل proguard-android.txt در Android SDK در دسترس است.

اگر می خواهید این تنظیمات را شخصی سازی کنید و تغییر دهید، می توانید این کار را در داخل فایلی به نام proguard-rules.pro که بخشی از هر پروژه اندروید استودیو است انجام دهید.

نتیجه گیری از بررسی امنیت سیستم عامل اندروید :

امیدواریم حالا که این مقاله را خواندید به اطلاعات شما درباره امنیت اپلیکیشن اندروید بیشتر شده باشد. اکثر روشهایی که در این مقاله به شما معرفی کردیم فقط در صورتی کاربرد دارد که از Android SDK برای توسعه برنامه های اندرویدی خود استفاده می کنید.


خلاصه مطلب : استفاده از این قابلیت برای نمایش یک وب‌سایت کامل در قالب یک اپلیکیشن موبایلی، راهکار استانداردی نیست و تجربه کاربری (UX) قابل قبولی را رقم نمی‌زند. هنگامی از این راهکار استفاده کنید که هیچ گزینه‌ی دیگری روی میز نباشد! در نتیجه اگر می خواهید در کنار وب سایت خود اپلیکیشنی حرفه ای و استاندارد داشته باشید باید بفکر شرکت یا افرادی که طراحی اپلیکیشن موبایل انجام می دهد باشید. مثل تیم طراحی اپلیکیشن موبایل الکامکو

پیشنهادات ویژه برای شما

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

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

توضیحات دوره آموزش برنامه نویسی اندروید الکامکو 

برای اینکه شما عزیزان بتوانید برنامه نویسی اندروید را از صفر تا صد و پروژه محوری یاد بگیرید، این دوره حرفه ای را برای شما آماده کردیم که بتوانید هر اپلیکیشن موبایل اندرویدی را بسازید و از انها کسب درآمد کنید و وارد بازار کار اندروید شوید.

با امید به اینکه با مشاهده این فیلم های آموزشی که هزینه خیلی کمی را نسبت به کلاس رفتن و وقت گرفتن از شما می گیرد، و همچنین با همکاری و تلاش خودتان به یک برنامه نویس حرفه ای اندروید تبدیل شوید.

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

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

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

مشاهده همه دوره های آموزش برنامه نویسی اندروید الکامکو
{ آموزشگاه آنلاین الکامکو }

مرجع آموزش برنامه نویسی اندروید

طراحی اپلیکیشن موبایل

طراحی سایت

مطالب مرتبط

شما چه راه حل های دیگری برای بالا بردن امنیت در اندروید یا برنامه نویسی اندروید می دونید که می تونه کاربردی باشه؟ اگه نکته ای جا مانده یا در صورتی که سوال و  یا نظری در این رابطه دارید خوشحال می شویم زیر همین پست با ما درمیان بگذارید.

4 دیدگاه
بازخورد درون خطی
مشاهده همه نظرات
سهیل شبانی
16 روز گذشته

منم یه جا خوندم که برای بالا بردن امنیت اندروید DexGuard از اپلیکیشن شما در مقابل تجزیه و تحلیل های پویا (Runtime Application Self-Protection or RASP) محافظت می کند و با بررسی کردن اعتبار مجوزها و محیط اجرایی برنامه، از تغییرات در برنامه حین اجرا پیشگیری می کنه

زیبا مقدم (پشتیبانی)
پاسخ دادن به  سهیل شبانی
16 روز گذشته

اینم می تونه تحلیل خوبی در زمینه این مقاله امنیت اندروید ما باشد. در آپدیت های بعدی حتما به این موضوعات اشاره می کنیم . مرسی از شما

omid
16 روز گذشته

سلام مرسی از مطلب خوبتون. همونطور که در مرحله 8 گفتید بجز آبفسکیتور ProGuard که آبفسکیتور پیش‌فرض اندروید استودیو هستش بهتره از آبفسکیتورهای مثل DexGuard, DexProtector هم حتماً استفاده بشه.

زیبا مقدم (پشتیبانی)
پاسخ دادن به  omid
16 روز گذشته

اره درسته از این موارد هم میشه استفاده کرده. مرسی از شما

فهرست