برقراری امنیت یکی از مهمترین و البته چالش برانگیزترین موضوعاتی است توسعه دهندگان باید آن را پیادهسازی کنند. برقراری امنیت برای یک وبسایت از راههای مختلفی انجام میشود اما همواره یکی از ثابتترین و البته مهمترین بخشهای برقراری امنیت، ایجاد قابلیتهای احراز هویت و اعتبار سنجی است.
در حالیکه امروزه بیشتر اوقات از عبارات احراز هویت و اعتبار سنجی به صورت جایگزین استفاده میشود اما باید بگویم که این دو مورد کاملا متفاوت از هم بوده و هر کدام رویکرد متفاوتی را پیش میگیرند. در زبان انگلیسی برای احراز هویت از کلمه Authentication و برای اعتبارسنجی Authorization استفاده میشود.
همانطور که از اخبار میشنوید روزانه وبسایتهای بسیار زیادی هک شده. و اطلاعات به دست افرادی میافتد که در حقیقت مجوز دسترسی به آن اطلاعات را ندارند. یکی از راهکارهای اصلی برای جلوگیری کردن از این موضوع، پیادهسازی امکان احراز هویت و اعتبارسنجی به صورت قدرتمند است. در نتیجه این دو، مباحث بسیار مهمی هستند که باید حتما در توسعه اپلیکیشنها آنها را در نظر داشته باشید.
در این مطلب اختصاصی از وبسایت راکت قصد داریم این دو مورد را با همدیگر مقایسه بکنیم و به درک درستی از چیستی هر کدام برسیم. یادگیری این مطلب برای توسعه دهندگان Back-End بسیار امر حیاتی است.
احراز هویت در مقابل اعتبارسنجی
دو اصطلاح احراز هویت و اعتبارسنجی مفاهیم جداگانهای هستند که به صورت اشتباه به جای همدیگر مورد استفاده قرار میگیرند. در این بخش قصد داریم با ایجاد یک مرز میان این دو مورد مفاهیمشان را برای شما واضحتر بکنیم.
احراز هویت: احراز هویت به روندی گفته میشود که در آن هویت فردی که قصد ورود به سیستم را دارد بررسی شده و در صورت تایید شدن در رابطه با اینکه آیا واقعا این فرد همان فردی است که قابلیت ورود را دارد، وارد اپلیکیشن میشود.
برای مثال اگر فردی با استفاده از فرم ورود یا Login قصد ورود به وبسایت را داشته باشد به صورت عادی باید نام کاربری و رمز عبور وی بررسی شود و در صورتی که درست باشد باید به پنل مدیریت هدایت شود.
اعتبارسنجی: اعتبارسنجی به روندی گفته میشود که در آن تعیین میشود که چه کسی به چه دادههایی دسترسی داشته باشد. در واقع اعتبارسنجی مرحلهای بعد از احراز هویت است.
برای مثال فردی که در مثال قبلی وارد پنل مدیریت شد باید دسترسیهای مشخصی به قسمتهای مختلف داشته باشد. برای مثال اگر این فرد مدیر اصلی وبسایت باشد قابلیت آن را خواهد داشت که کل وبسایت را حذف کند. اما اگر یک نویسنده باشد باید تنها به بخش مقالات دسترسی داشته باشد.
برای این موضوع میتوان مثالهای بسیار زیادی را نام بُرد. در سیستمهای مدیریت محتوا این دو مسئله به خوبی پیادهسازی شدهاند. برای مثال در وردپرس شما برای مدیریت بخش اعتبارسنجی میتوانید در پنل مدیریت از طریق بخش کاربران، سطح دسترسی هر کدام از کاربران به بخشهای مختلف وبسایت را تعیین کنید.
همچنین وب فریمورکهایی مانند لاراول و جنگو قابلیتهای آمادهای را برای مدیریت این بخشها در نظر گرفتهاند. در نتیجه اگر از توسعه دهندگان این دو فریمورک باشید به سادگی میتوانید قابلیتهای احراز هویت و اعتبارسنجی را پیادهسازی بکنید.
یک مثال دیگر: تصور کنید که قصد یک سفر با هواپیما را دارید. در مرحله اول زمانی که وارد فرودگاه میشوید شخصی از شما درخواست بلیط هواپیما را میکند. اگر بلیط هواپیما را در اختیار داشته باشید میتوانید وارد هواپیما شوید. این همان مرحله احراز هویت است. در مرحله بعدی اگر شما در داخل هواپیما درخواستهای ویژه مانند غذا و نوشیدنی را داشته باشید فرد سرویس دهنده باید بررسی کند که آیا بلیط شما قابلیت ارائه چنین خدماتی را دارد یا خیر. این همان مرحله اعتبارسنجی خواهد بود.
تفاوتها
احراز هویت به دنبال تایید هویت فرد است اما اعتبارسنجی تعیین کننده میزان دسترسی فرد تایید شده برای منابع مختلف وبسایت است.
احراز هویت با استفاده از روشهایی مانند رمز عبور ثابت و یک بار مصرف، اطلاعات بیومتریک (اثر انگشت، عنبیه چشم و…) و موارد دیگری که برای وارد شدن به سیستم مورد استفاده قرار میگیرد، هویت فرد را تایید میکند. اما اعتبار سنجی مرحله بعد از احراز هویت است که برای پیادهسازی چیستی و چگونگی آن، برنامه نویس اصلی باید آن را کدنویسی کند.
مراحل احراز هویت توسط کاربر مشاهده شده و کاربر به صورت مستقیم با آن در تعامل است. اما اعتبارسنجی به صورت مخفی اتفاق افتاده و کاربر معمولا خبری از آن ندارد.
روشهای مرسوم برای احراز هویت
روشهای متفاوتی برای احراز هویت وجود دارد که برخی از آنها بسیار معمولی بوده و برخی دیگر از آنها روشهای هوشمندانهای به حساب میآیند که امروزه طرفدار بسیار زیادی نیز دارد. بیایید نگاهی به این روشها بیاندازیم:
نام کاربری و رمز عبور: مرسومترین و ابتداییترین روش برای مدیریت احراز هویت استفاده کردن از نام کاربری و رمز عبور است. مطمئنا با این نحوه از احراز هویت برخورد کردهاید و برای وارد شدن به سایتهای مختلف با آن مواجه شدهاید.
من ربات نیستم: با گسترش عملیاتهای نفوذ به وبسایت، یک گزینه دیگر به روش مرسوم نام کاربری و رمز عبور اضافه شده است. در این روش کاربر بعد از وارد کردن نام کاربری و رمز عبور با استفاده از یک سوال هویت انسانیاش را تایید میکند. یکی از مرسومترین این پرسشها تصاویری است که گوگل به شما نمایش میدهد و از شما میپرسد که تصاویری که در آنها برای مثال یک موتور دیده میشود را انتخاب کنید. باتها معمولا توانایی حل این مسئله را ندارند اما انسانها به سادگی میتوانند این کار را انجام دهند.
رمز عبور یکبار مصرف: در برخی از وبسایتها برای وارد شدن به آنها نیاز است که کدی که به موبایل یا ایمیل به صورت یکبار مصرف ارسال میشود را وارد کنید. این مورد یکی از ایمنترین روشهای برای تایید هویت فرد است.
اطلاعات بیومتریک: در وبسایتهایی که حساسیت دادهها بسیار زیاد است از این روش استفاده میشود. در این روش کاربر برای وارد شدن به وبسایت باید از اثر انگشت یا عنبیه چشم خود استفاده کند. از آنجایی که این موارد منحصر به فرد هستند تقریبا امکان دور زدنشان توسط افراد دیگر وجود ندارد.
در بیشتر موارد احراز هویت معمولا یک بخش ثابت مانند نام کاربری و رمز عبور به صورت ثابت وجود داشته و بعد از موارد دیگر استفاده میشود. بنابراین شما میتوانید به صورت ترکیبی و چندگانه از این موارد استفاده کنید.
روشهای مرسوم برای اعتبارسنجی
بعد از آنکه مراحل احراز هویت انجام شد وارد فاز اعتبار سنجی خواهیم شد. روشهای متفاوتی برای پیادهسازی این مرحله نیز وجود دارد که در این بخش دو مورد از این روشها را بررسی خواهیم کرد:
کنترل دسترسی مبتنی بر نقش – Role-Based Access Control
در این روش، اعضا سازمان براساس نقشی که دارند به اطلاعات دسترسی خواهند داشت. برای مثال در یک سازمان ممکن است همه کارمندان عادی بتوانند اسناد را مطالعه کنند اما نتوانند در آنها تغییری را ایجاد کنند. از طرفی دیگر مدیر بخش نیروی انسانی قابلیت آن را خواهد داشت که به اسناد دسترسی مستقیم داشته و حتی آنها را تغییر دهد. این ساختار یکی از مرسومترین روشهاست که در سیستم مدیریت محتوا وردپرس نیز میتوانید آن را مشاهده بکنید.
کنترل دسترسی مبتنی بر خاصیت – Attribute-Based Access Control
در این روش دسترسیها براساس خاصیتها و ویژگیهایی که یک کاربر خواهد داشت ارائه میشود. برای مثال username یک کاربر میتواند معرف این باشد که چه سطح از دسترسی را میتواند دریافت بکند. در این روش که البته ممکن است پیادهسازی آن پیچیدهتر باشد نیاز است که نامهای کاربری و یا دیگر مشخصات فرد کنترل شود. مرسومترین خاصیتی که در این حالت مورد استفاده قرار میگیرد کد ملی فرد و یا کد سازمانی وی است.
در پایان: بدنبال استراتژی مستحکمی برای احراز هویت و اعتبار سنجی باشید
یکی از مهمترین ملزومات امنیتی یک وبسایت بخش احراز هویت و اعتبار سنجی آن است. به یاد داشته باشید که این بخش خط مقدم شما در مقابله با هک و نفوذ خواهد بود. در نتیجه بهتر است استراتژی مستحکم و یکپارچهای را برای مدیریت این بخش در نظر بگیرید.