سلام
شاید این موضوع کمی تکراری باشد ولی قصد دارم حداقل در یک تاپیک درخصوص همه موضوعات ارائه نظر بشه. خودم تازه دارم با ASP.Net MVC کار میکنم.
میخواستم بدونم سطوح امنیت در برنامه های وب و مخصوصا ASP.NET MVC چطور پیاده سازی میشه. خب بخشی از این اقدام مربوط به احراز هویت (Authentication) و دسترسی کاربر (Authorization) به بخش های مختلف برنامه میشه. تا اینجا مشخص شد که کاربر به چه بخش هایی دسترسی داره. اما ادامه موضوع را بصورت جداگانه مطرح میکنم:
- درخصوص Authorize کردن متدها آیا این اقدام را برای متدهایی از نوع JsonResult, Void, int هم اعمال میشه؟ البته این امکان وجود داره ولی برای این نوع از متد های نیز الزامی به انجامش هست؟ درخصوص نوع JsonResult که در دستورات Ajax استفاد میشه من استفاده میکنم تا فقط کاربر وارد شده به برنامه بتونه از اون استفاده کنه.
- بجای استفاده از صفت Authorized که عموما استفاده میشه، از روشی که در دروس آموزشی جناب کرامتی یاد گرفتم بررسی متدهای تخصیص داده شده به هر کاربر در ActionFilter هستش که برنامه را در تخصیص دسترسی ها به کاربران بسیار منعطف میکنه و تغییرات در هر لحظه را برای مدیر برنامه اکانپذیر کرده. در واقع قبل اجرای یک متد، ابتدا برنامه بررسی میکنه که متد موجود در Request قبلا به کاربر تخصیص داده شده است یا خیر و در صورتی که تخصیص داده نشده باشه کاربر را به صفحه Access Denied هدایت میکنه.
- در مرحله 1 و 2 من تونستم تا حد قبل ملاحظه ای دسترسی به بخش های مختلف برنامه را کنترل کنم.
- چه تنظیماتی در Web.Config میتونه انجام بشه که بیشتر شدن سطح امنیت کمک کنه؟ برای مثال متن خطاهای برنامه در زمان Exception در مرورگر به کاربر نمایش داده میشه. اول اینکه تا چه مقدار اطلاعات خطا میتونه بهظعف امنیتی برنامه کمک کنه؟ دوم اینکه چه اقداماتی اساسا در این خصوص انجام میشه. البته در فایل Global میشه در متد Applicatio_Error مدیریت کرد. اما بخش های دیگری هم هست که عموما توجهی نمیشه و نقاط کور امنیت برنامه باشه؟
- در یک تاپیک جداگانه موضوعی را سوال کردم که جناب کرامتی پاسخ آن را دادند:
- https://barnamenevis.org/showthread....ew%D9%87%D8%A7
- مورد شماره 5 که لینک آن در آیتم شماره 6 معرفی شده درخصوص اطلاعاتی هست که در View به کاربر نمایش داده میشه. سوالم این هست که آیا برای تمام اطلاعاتی که توسط کاربر به سرور ارسال میشه آیا میشه برای اون متد از صفت POST استفاده کرد؟ البته که میشه ولی سوالم من درخصوص ضرورت این کار هستش. البته برای اطلاعات یک فرم این کار را انجام میدم. مثلا من متدی دارم از نوع JsonResult که مقدار bool برمیگردونه، ایا برای این نوع متدها لازمه که بصورت POST تعریف بشن یا نه؟
- زمانی که اطلاعات به سرور ارسال میشه مطابق معمول ModelState بررسی میشه. حتی ممکنه داده های خاص توسط برنامه نویس به روش خاص نیز بررسی بشه. برای داده هایی از نوع کدهای HTML هم Encoding وجود داره و... که در یک مورد من از کتابخانه HtmlSanitizer استفاده کردم.
- در حال حاضر که دارم تازه با ASP.NET MVC کار میکنم یک هاست گرفتم که http هستش و مرورگر اعلام نا امن بودن برنامه را نایش میده. چطور باید به https تبدیل کنم؟ ایا همان هاست باید این کار را انجام بده یا باید برنامه نویس اقدام خاصی انجام بده؟
- جدای از همه مکانیزم های موجود تا چه حد اطلاعات باید رمزنگاری بشه؟ بطور معمول که رمز عبور کاربران hash میشه و مورد خاصی نیست. سایر اطلاعات چطور؟ فرض یک جدول اطلاعات قراداد یک شرکت هست که نباید بطور معمول قابل رویت و قابل خواندن باشه و باید محرمانه باشه. برای دریافت اطلاعات در زمان بارگذاری و ارسال مجدد به کاربر چه روشی هایی وجودد داره؟
- در ادامه آیتم شماره 10 برای فایل هایی با نوع خاص چه باید کارد؟ مثلا در زمان بارگذاری فایل تصویر چطور باید فایل بررسی بشه. روش معمول بررسی پسوند فایل ها هستش که در یک آموزش دیدم که فایل های Image ابتدا پسوند و پس از آن از حیث بایت های موجود مورد بررسی قرار می گرفت و خروجی bool بر می گردوند. ایا ضروریه که تمام نوع ها بررسی بشه؟ مثل PDF, Video, zip ,...
شاید موارد دیگه ای هم وجود داشته باشه که من قطعا نمیدونم و خواهشی که دارم دوستان حداقل عنوان ها را هم معرفی کنند خودم درموردش مطالعه میکنم. برای مثال کاربرد Session, Ckookie رو میدونم ولی نکاتی که میتونه در استفاده از این ها امنیت برنامه را دچار مشکل کنه نمیدونم.
احیانا مطالبی در خصوص سوالاتم پیدا کردن در ادامه همین پست ارسال میکنم. لینک سایت های مختلف و مطالبی که بدست میارم.
تشکر