میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

امنیت و مجوزهای دسترسی در اندروید

با سلام خدمت همه دوستان عزیز در این آموزش قصد داریم در مورد امنیت و مجوزهای دسترسی در اندروید مطالبی را عنوان کنیم

سیستم اندروید به هنگام نصب یک اپلیکیشن بر روی دستگاه، یک ( GID شناسه ی یکتا که به گروه کاربری خاص تخصیص می یابد) و ( UID شناسه ی یگانه ی کاربری) به آن اپلیکیشن اختصاص می دهد. در واقع تمامی فایل های یک آپلیکیشن در انحصار این کاربر یا به اصطلاح private هستند و به تبع دیگر اپلیکیشن ها اجازه ی دسترسی به این فایل ها را ندارند. علاوه بر آن، هر اپلیکیشن اندروید تحت فرایند اختصاصی خود اجرا و راه اندازی می شود. از اینرو، به واسطه ی این ویژگی هسته ی Linux ، هر اپلیکیشن اندرویدی از دیگر برنامه های کاربردی در حال اجرا کاملا مستقل و مجزا است. در صورتی هم که یک اپلیکیشن اندروید می بایست بر حسب نیاز اطلاعاتی را با یک اپلیکیشن دیگر رد و بدل کرده و آن ها را به اشتراک بگذارد، این اتفاق بایستی به صورت صریح و توسط یک کامپوننت نرم افزاری که وظیفه ی آن انتقال داده می باشد همچون یک service یا .content provider صورت گیرد

 


مفهوم مجوزهای دسترسی در اندروید

اندروید از یک سیستم تخصیص مجوز برخوردار است که ویژه ی هر task یا عملیات مجوزها و سطوح دسترسی خاصی معین می کند. در حقیقت هر اپلیکیشن می تواند جهت انجام عملیات خاص ، مجوزهای لازم را از این سامانه درخواست نماید. برای مثال، یک برنامه ی کاربری می تواند از سیستم تخصیص مجوز، درخواست دسترسی به اینترنت را داشته باشد.

سیستم مزبور سطوح مختلفی برای مجوزها دارد که به آن در اصطلاح protection level گفته می شود.

لازم به توضیح است که مفهوم مجوز از کتابخانه های اندروید، نسخه ی API level ) 23 ) تغییر کرده است. قبل از ویرایش مذکور ، یک اپلیکیشن حین نصب مجوزهای مورد نیاز و درخواست خود را به کاربر اعلان می کرد. اما از API 23 به بعد دیگر تنها در زمان اجرای برنامه مجوزهای لازم را از کاربر درخواست می کند.
اپلیکیشن های اندروید مجوزهای مورد نیاز خود را در فایل تنظیمات اندروید ( )manifest اعلان می کنند. البته اپلیکیشن می تواند مجوزهای اضافی در این فایل تعریف کند که دسترسی به برخی کامپوننت های نرم افزار را محدود می سازند.

 


سیستم مدیریت و تخصیص مجوز در اندروید پیش از API 23

قبل از ویرایش ۲۳ کتابخانه های اندروید، مجوزهای مورد نیاز قبل از نصب اپلیکیشن از کاربر درخواست می شدند. کاربر تصمیم می گرفت که آیا مجوزهای مربوطه باید به برنامه داده شوند یا خیر. چنانچه کاربر مجوز مورد درخواست اپلیکیشن را تایید نمی کرد، در آن صورت اپلیکیشن مورد نظر به هیچ وجه بر روی دستگاه نصب نمی شد. اگر مجوز لازم را حین نصب به اپلیکیشن
می داد، اپلیکیشن به بخش های مد نظر خود دسترسی پیدا می کرد و دیگر کاربر نمی توانست این امر را (پس از اتمام نصب برنامه) تغییر دهد.

 


سیستم تخصیص مجوز از API 23 به بعد (اعطای مجوز به هنگام اجرا برنامه)

ویرایش ۶٫۰ سیستم عامل اندروید، ،Marshmallow یک permission model جدید را معرفی کرد که طی آن مجوزهای لازم، در زمان اجرای اپلیکیشن از کاربر درخواست می شود. بنابراین اگر اپلیکیشنی که در دست توسعه دارید، ویژه ی این نسخه طراحی شده ( targetsdkversion آن را بر روی ۲۳تنظیم کرده اید)، لازم است از مدل تخصیص مجوز جدید استفاده نمایید.

در اندروید دو سطح دسترسی و امنیت به شرح زیر تعریف شده است:

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

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

 

برای بررسی اینکه آیا مجوز خاصی به اپلیکیشن داده شده یا خیر، می توان از متد . checkSelfPermission استفاده نمود

 

// called in a standard activity, use ContextCompat.checkSelfPermission for AppCompActivity
int permissionCheck = checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR);
if (!permissionCheck == PackageManager.PERMISSION_GRANTED) {
// User may have declined earlier, ask Android if we should show him a reason
if (shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.WRITE_CALENDAR)) {
// show an explanation to the user
// Good practise: don't block thread after the user sees the explanation, try again to request the
permission.
} else {
// request the permission.
// CALLBACK_NUMBER is a integer constants
requestPermissions(thisActivity, new String[]{Manifest.permission.WRITE_CALENDAR},
CALLBACK_NUMBER);
// The callback method gets the result of the request.
}
} else {
// got permission use it
}

هنگامی که از کاربر درخواست اعطای مجوز می شود، شما یک callback دریافت می کنید.

 

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, do your work....
} else {
// permission denied
// Disable the functionality that depends on this permission.
}
return;
}
// other 'case' statements for other permssions
}
}

 

 


 

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

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟