امنیت نرم افزار از مهمترین مسائل خصوصا در نرم افزارهای تحت وب می باشد. یک نرم افزار تحت وب یا یک وب سایت در دسترس همگان قرار دارد و یک ارتباط دو جانبه بین آنها و کاربر برقرار می شود و کاربران می توانند درخواست هایی را به سرور ارسال نموده و پاسخ آن را دریافت نمایند، ممکن است برخی از این درخواست ها توسط هکر ها ارسال شود که می تواند وب سایت یا نرم افزارتان را به خطر بیاندازد.
با توجه به اهمیت امنیت در نرم افزارهای دوطرفه مثل وب سایت ها و نرم افزارهای تحت وب برای ایجاد این امنیت در برنامه نویسی با asp.net موارد زیر را در نظر بگیرید:
برای شناسایی هویت و مدیریت نقش های کاربران، سیستم امنیت و تشخیص هویتی Dot net Forms Authentication ایجاد شد، که قابل هک شدن نمی باشد.
قبل از بارگزاری صفحه باید این مقدار off باشد، تا خطاها برای برنامه نویس قابل رویت و بررسی باشد. و بعد از اتمام طراحی باید آن راOn یا Remote Only نمایید تا برای کاربر سایت قابل نمایش نباشد.
مدیریت خطاها و لاگ رویداد ها:
این قسمت که به شما کمک می کند تا اتفاق هایی که در سایت تان افتاده را مورد مشاهده و بررسی قرار دهید و همچنین از نفوذ احتمالی هکرها آگاه شوید.
خاصیت Debug تگ Compilation:
قبل از بارگزاری سایت این خاصیت باید true باشد تا بتوانید خطاها و کدهای مشکل دار را ببینید و بعد از اتمام سایت می توانید آن را false نمایید. چون اگر همچنان true بماند هکرها می توانند از این اطلاعات استفاده نمایند و به راحتی سایتتان را هک نمایند.
اگر دیتا بیس شما SQL Server می باشد و می خواهید آن را بر روی سرور اختصاصی یا یک هاست داشته باشید، به چند نکته زیر توجه نمایید:
- همیشه کاربران بانک اطلاعاتی تان را مورد بررسی قرار دهید و اطمینان پیدا کنید کاربران مهمان یا کاربر اضافی دیگری داخل آن نباشد، چرا که دیگر کاربران SQL Server می توانند از این طریق به بانک شما دسترسی داشته باشند.
- اگر سرور اختصاصی دارید حتما برای کاربر admin یک پسورد مناسب تخصیص دهید، همچنین Event Log مربوط به بانک اطلاعاتی تان را بررسی نمایید تا اگر مورد مشکوکی بود IP آن را Block نمایید.
جلوگیری از حملات تزریق دستورات sql:
هکرها با وارد کردن جملات SQL در فرم های وب یا QueryString ها می توانند Query شما را به نفع خود تغییر دهند به این روش SQL Injection می گویند که یکی از رایج ترین روش های نفوذ به وب سایت ها و هک کردن آن ها می باشد.
xss مخفف cross-site script می باشد که خطرساز ترین حمله به یک وب سایت می باشد، هکر با این روش اسکریپت های سمت کلاینت را به صفحات شما ارسال می نماید و از این طریق به اطلاعات مورد نیاز خود دسترسی پیدا می نماید. این حملات معمولا توسط فرم ها و Query ها صورت می گیرد.
این کنترل یکی از خطرناک ترین کنترل های Asp.NET می باشد علتش هم این است که کاربر می تواند از این طریق فایلش را وارد سرور نماید، مثالی می زنیم، مثلا شما یک وب سایت طراحی کرده و برای آن عضویت قرار داده اید و کاربران در هنگام عضویت می توانند عکس خود را آپلود نمایند، شما عکس ها را در پوشه picture ذخیره می کنید و آن را به کاربران نشان می دهید. حال هکر می تواند به راحتی به جای اینکه یک عکس آپلود کند یک صفحه aspx ایجاد و آن را آپلود نماید، این صفحه می تواند شامل کد هایی باشد که تمامی اطلاعات Web.Config شما را به او نشان دهد و یا او را به منبع فایل های شما برساند.
ویرایشگر ها (HTML Editor):
اگر شما از ویرایشگر ها (مانند FckEditor ، HtmlErea , TinyMce , FreeTextBox و...) استفاده می کنید به امکاناتی که در اختیار کاربران قرار می دهید دقت کنید، هیچ گاه اجازه ویرایش سورس Html را به کاربران ندهید، البته مدیران سایت می توانند از این امکان استفاده کنند اما کاربران و بازدیدکنندگان در صورتی که به سورس Html دسترسی داشته باشند، می توانند کد هایی را وارد کنند که سایت شما را به خطر اندازد، در مورد امکانات بارگزاری عکس و فایل و... بازهم به پسوند ها دقت نمایید.
اعتبار سنجی ViewState ها:
در هنگام Postback شدن صفحه حالت ماندگاری کنترل های سمت سرور را ViewState برقرار می نماید، البته یک هکر می تواند با تغییر مقادیر ViewState ها به وب سایت شما نفوذ نماید. برای جلوگیری از این موضوع دات نت به صورت پیش فرض ViewState ها را رمز نگاری و اعتبار سنجی می کند تا از تغییر نکردن آنها مطمئن شود، البته شما می توانید با false کردن خاصیت EnableViewstateMac در تگ Pages در Web.Config یا CodePage صفحه آن را غیر فعال کنید که به هیچ وجه این کار پیشنهاد نمی شود و بسیاری از برنامه نویسان به اشتباه به دلیل دریافت خطاهای نا معلوم این خاصیت را false کرده، که بهتر است آخرین Hotfix های مایکروسافت را بر روی سرور نصب کنید تا خطاهایی که به صورت باگ گزارش شده اند برطرف شود.
رمز نگاری اطلاعات (Encryption):
می توان برای انتقال اطلاعاتی که مایلید از دید کاربر دور بماند آن ها را رمز نگاری کرد، الگوریتم هایی مانند Des و Triple Des برای رمز نگاری مناسب هستند.
هش کردن اطلاعات مهم (Hashing):
به وسیله یک سری الگوریتم ها مانند MD5 یا SHA1 و... اطلاعات مهم مثل پسورد را می توان hash کرد، دقت کنید که اطلاعات Hash شده قابل بازگشت نیستند.
به رمز درآوردن رشته اتصال:
اصولا کسانی به فایل web.config دسترسی دارند که به Ftp اکانت شما دسترسی دارند، بنابراین به رمز درآوردن Connectionstring که در web.config قرار گرفته از نظر امنیتی مهم نیست، اگر از نفوذ هکرها به Ftp مثلا از روش آپلود فایل نگران هستید یا بانک اطلاعاتی شما در سرور دیگری قرار دارد می توانید connectionstring تان را encrypt نمایید.
تصاویر امنیتی (Verification Images):
تصاویر امنیتی برای جلوگیری از هجوم هکرها و ربات ها راه حل مناسبی می باشد این تصاویر می تواند در قسمت هایی از سایت که به شکل فرم می باشد استفاده گردد، مانند فرم ثبت نام، نظرسنجی و ... یعنی ربات می تواند وارد یک سایت شود و به راحتی فرم ها را پر کرده و به سمت سرور ارسال نماید و از این طریق اطلاعات مورد نظرش را دستیابی نماید.