چگونه امنیت اپلیکیشن آی او اس خود را تامین کنیم؟ - بخش اول
امنیت یکی از جوانب کلیدی در توسعه نرم افزار محسوب می شود، تقربیا تمامی اپلیکیشن های موبایل با اطلاعات کاربر سر و کار داشته و یا با یک سرور ریموت در ارتباط هستند. امنیت در طول دهه های اخیر پیشرفت های چشمگیری را به ثبت رسانده و هنوز هم یکی از موضوعات مورد بحث می باشد. در این مقاله به چندین موضوع مرتبط با امنیت و توسعه موبایل پرداخته می شود و چنیدن مورد از بهترین روش ها و پیشنهاداتی که در راستای امن کردن اپلیکیشن به کار خواهند آمد، شرح داده می شود.
امنیت و حریم خصوصی
امنیت نسبی است، آسیب های امنیتی به طور منظم کشف شده و پچ امنیتی برای آنها ارائه می شود، هیچ چیزی کامل و بی نقص نیست اما شما می توانید با اقداماتی امنیت اپلیکیشن های موبایل خود را ارتقا بخشید.
به عنوان یک توسعه دهنده شما مسئول حفاظت از اطلاعاتی هستید که کاربران در اختیار شما قرار داده اند و در این میان نوع اطلاعات مطرح نیست، شاید برخی از اطلاعات در نظر شما بی اهمیت بنماید، در حالی که برای کاربر بسیار مهم تلقی می شود.
مسئاله امنیت و حریم خصوصی برای اپل بسیار جدی و مهم قلمداد می شود. HealthKit نمونه ای بسیار خوب از تعهد اپل به حفاظت از حریم خصوصی کاربر می باشد، کاربر تصمیم می گیرد که کدام داده های مربوط به سلامتی توسط اپلیکیشن قابل دسترسی باشد. در حالی که اپلیکیشن می تواند درخواست دسترسی به اطلاعات سلامتی کاربر را بدهد، اما HealthKit نمی گوید که به کدام داده دسترسی دارد، به بیان دیگر اپل وضعیت احراز هویت اپلیکیشن را اطلاعات حساسی قلمداد می کند که باید ناشناس بماند.
1. ذخیره سازی داده
آیا اپلیکیشن نیازمند ذخیره سازی داده است؟
پیش از آنکه درباره نحوه و مکان ذخیره سازی بخش خاصی از داده ها بیندیشید، لازم است از خود این سوال را بپرسید که آیا لزومی برای ذخیره این داده ها وجود دارد یا خیر. آیا این امکان وجود دارد که به جای ثبت داده یا ارسال آن به سرور ریموت، آن را در حافظه ذخیره کنید؟ این کار معماری اپلیکیشن شما را به طور چشم گیری ساده کرده و امنیت آن را ارتقا می بخشد.
داده ها را باید در چه جایی ذخیره کنید؟
چنانچه ذخیره سازی داده به صورت لوکال تنها گزینه شما می باشد، باید درباره مکان ذخیره سازی آن بیندیشید. برای اطلاعات حساس مانند گواهی ها، keychain بهترین گزینه می باشد، البته این کار تنها برای حجم کوچکی از داده ها که نیاز به دسترسی مکرر ندارند، امکان پذیر می باشد.
آیا لزومی برای بکاپ گیری داده در iCloud یا iTunes وجود دارد؟ چنانچه پاسخ منفی است، شاید نیاز به ذخیره سازی داده در دایرکتوری Caches سندباکس اپلیکیشن داشته باشید، چرا که در iCloud یا iTunes بکاپی از این دایرکتوری تهیه نمی شود. چرا این کار مهم است؟ داده های که وجود ندارند نمی توانند در معرض خطر قرار بگیرند.
defaults system از طریق کلاس NSUserDefaults در دسترس می باشد و روشی سریع و راحت برای ذخیره سازی بخش هایی از داده ها محسوب می شود. متاسفانه اغلب اوقات استفاده مفرطی از defaults system توسط توسعه دهندگان می شود و در بیشتر شرایط اطلاعات حساس مانند گواهی ها و توکن های دسترسی در defaults system ذخیره می شوند.
یک مکان بهتر برای ذخیره سازی بخش کوچکی از اطلاعات حساس، keychain سیستم می باشد، همانطور که از نام آن نیز مشخص است، این بخش با در نظر داشتن امنیت طراحی شده و چندین سال است که وجود دارد و مورد استفاده قرار می گیرد. keychain به طور پیش فرض توسط سیستم عامل مدیریت می شود، اما سایر اپلیکیشن ها به آیتم هایی از اپلیکیشن که در این قسمت ذخیره شده اند، هیچگونه دسترسی ندارند.
رابطی که به سرویس keychain دسترسی پیدا می کند، کمی قدیمی است، اما خوشبختانه لایبرری های بسیار خوبی وجود دارند که برای رفع این مشکل به کمک شما می آیند. برای نمونه Lockbox یک لایبرری سبک و کم حجم برای تعامل با سرویس های keychain بوده و رابط آن به سادگی قابل درک و استفاده می باشد.
کلیدها، توکن ها و گواهی ها
ذخیره سازی کلیدها، توکن ها و گواهی ها در مکانی مانند Info.plist تارگت و یا یک فایل JSON در بسته اپلکیشن، که به راحتی قابل دسترسی باشد، کمی وسوسه انگیز است. اما واقعیت این است که استخراج این فایل ها از اپلیکیشنی که از اپ استور دانلود شده، بسیار ساده می باشد. با ذخیره سازی توکن API برای وب سرویس در Info.plist اپلیکیشن، سایر توسعه دهندگان به راحتی می توانند آن را پیدا کرده و مورد استفاده قرار دهند.
در مطلب بعدی شما را با سایر روش های تامین امنیت اپلیکیشن های آی او اس آشنا می کنیم.