در دو نوشته قبلی (نوشته شماره یک و نوشته شماره)آشنایی کلی با بحث امنیت در نرم افزار به خصوص در طراحی و پیاده سازی نرم افزارهای تحب وب و بحث احرازهویت آشنا شدیم.
در این نوشته به مقوله Authorization یا همان اجازه ها و دسترسی های سیستم می پردازیم.در نوشته شماره یک مثالی داشتیم که فردی زنگ درب منزل را می زند.صاحب خانه نیز پس از احرازهویت فرد به او اجازه وارد شدن یا نشدن به خانه می دهد.فرض می کنیم که صاحب خانه فرد را می شناسد و درب را برویش باز می کند.فرد مرحله اول احراز هویت را با موفقیت پشت سر می گذارد.حالا در داخل خانه، بسته به دسترسی هایی که دارد می تواند از قسمت های مختلف خانه استفاده نماید.مثلا اگر مهمان عادی باشد فقط مجاز به استفاده از قسمت مخصوص مهمان و سرویس بهداشتی است و اجازه به دسترسی به سایر بخش ها را ندارد.
در سیستم های نرم افزاری نیز ما همین مسائل را داریم.یعنی افرادی براساس وظایفی که درسیستم اداری خود دارند، در سیستم نرم افزاری مربوطه نیز شبیه همان دسترسی ها را خواهند داشت.سیستم مدیریت شعب بانک را در نظر بگیرید.یک تحویل دار بانک چه وظایفی دارد؟همان وظایف را در سیستم نرم افزاری نیز خواهد داشت.دقت کنید که گفتیم تحویل دار بانک و نگفتیم آقا یا خانم فلانی چه وظایفی دارد.ما در بحث دسترسی ها با نقش(Role) ها سروکار داریم.باید به دنبال نقش های آن سازمان یا نهاد و یا مجموعه ای باشیم که می خواهیم نرم افزار خود را برای آن طراحی و پیاده سازی کنیم.پس در ابتدا نقش ها را مشخص می کنیم.
چه راهی برای یافتن سریع و تقریبا کامل نقش ها در یک ساختار اداری داریم؟بله...درست حدس زدید.چارت سازمانی یکی از بهترین روش های پیدا کردن نقش های سیستم نرم افزاری می باشد.در چارت سازمانی همه نقش ها مشخص است و همه افراد براساس آن در بخش های مختلف مشغول به کار می شوند.از این رو می توانیم نقش های سیستم را از روی چارت سازمانی تعریف نماییم.حالا پس از مشخص شدن نقش ها به سراغ دسترسی ها و کارهایی که هر نقش باید بتواند انجام دهد می رویم.مثلا نقش تحویل دار بانک چه وظایفی دارد؟این وظایف دسترسی های این نقش در سیستم نرم افزاری خواهد بود.
در نهایت ما مجموعه ای از نقش ها و دسترسی های آنها را خواهیم داشت.حالا فقط کافی است کاربران سیستم (آنهایی که قرار است با سیستم کار کنند) را تعریف نماییم و نقش یا نقش های مربوط به آنها را مشخص و وصل نماییم.مثلا آقای A با نقش تحویل دار و نقش های مشخص در سیستم تعریف می شود.
دسته بندی نقش ها و دسترسی ها باعث می شود که مدیریت دسترسی ها بسیار ساده و دقیق انجام شود.اگر ما نقش را درسیستم نرم افزاری که طراحی می کنیم در نظر نگیریم، باید آن وقت به هرکاربر دسترسی های جداگانه می دادیم که باعث می شد دو کاربر A و B که هر دو تحویل دار هستند دسترسی های یکسان نداشته باشند و هر کدام به بعضی قسمت ها دسترسی داشته باشند که این اتفاق باعث بهم ریختگی و عدم یکپارچگی سیستم می شود.با این توضیحات ما در Authorization با 3 قسمت اصلی سروکار داریم :
1. کاربران 2.نقش ها 3.دسترسی ها
که می توانیم بگوییم هر کاربر چه نقش هایی دارد و هر نقش چه دسترسی هایی.
این روش، یک روش کامل و نسبتا جامع برای پیاده سازی Authorization یا حق دسترسی ها در طراحی و توسعه نرم افزاها است که می تواند جوابگوی اکثر نیازهای ما در مقوله امنیت باشد.تا این قسمت ما آموختیم که Authentication (احراز هویت) و Authorization (دسترسی ها) چیست و برای طراحی این 2 بحث مهم و پایه ای در امنیت نرم افزار به چه چیزهایی نیاز خواهیم داشت.
در نوشته بعدی به صورت فنی تر و با دید پیاده سازی به این دو مقوله در طراحی و پیاده سازی نرم افزار می پردازیم.
رعایت نکات امنیتی بیش از اندازه و غیرضرور در سیستم های نرم افزاری باعث پیچیدگی کار با آن نرم افزار خواهد شد.پس به تناسب اهمیت نرم افزار، امنیت آن را پیچیده نمایید.