روش های افزایش امنیت در Asp.NET
دوشنبه 23 اردیبهشت 1392روش های افزایش امنیت در Asp.NET <br/> امنیت در Asp.NET <br/> استفاده از سیستم تشخیص هویت دات نت (Dotnet FormsAuthentication) <br/> تنظیم CustomErrors
امنیت در Asp.NET یکی از مهمترین مسائل در طراحی هر نوع نرم افزار به ویژه نرم افزار های تحت وب امنیت آن است ، امنیت از این جهت از اهمیت بالایی برخوردار است که یک نرم افزار تحت وب یا یک وب سایت در دسترس عموم قرار می گیرد و یک تعامل دو طرفه بین یک وب سایت پویا و کاربر وب سایت برقرار می شود بدین ترتیب کاربران قادرند درخواست هایی را به سرور ارسال نموده و پاسخ آن را دریافت کنند ، ممکن است برخی از این درخواست ها توسط هکر ها صادر شود که میتواند حیات وب سایت شما را به خطر بیاندازد . در این مقاله به ذکر چند نکته جهت بالابردن امنیت وب سایت شما می پردازم :
خاصیت Debug تگ Compilation : دقت نمایید که پس از بارگزاری وب سایت این خاصیت را false نمایید ، این موضوع علاوه بر اینکه بر روی Perfomance سایت شما تاثیر می گذارد میتواند با نمایش دادن متن خطا و بعضا کد های شما راه را برای هک شدن وب سایت شما باز نماید .
لاگ رویداد ها و مدیریت خطاها : این کار علاوه بر اینکه شما را از اتفاقاتی که در وب سایت شما رخ میدهد مطلع می کند می تواند هشداری باشد جهت جلوگیری از نفوذ هکر ها ، سعی کنید هر چند وقت یکبار یک نگاهی به لاگ رویداد ها هم بیاندازید تا اگر مورد مشکوکی بود آن را پیگیری نمایید . همچنین اگر کنترل پنل هاست شما دارای سیستم لاگ گیری است (مثلا کنترل پنل Plesk) حتما هر هفته یک نگاهی به آن بیاندازید ، تمامی موارد مشکوک در آن هشدار داده خواهد شد .
به عنوان مثال فرض کنید یک سیستم ورود و تشخیص هویت ساخته اید که توسط Query زیر کاربر را تشخیص هویت می کند اکنون کافیست هکر در باکس TxtUser کلمه Admin را نوشته و در باکس TxtPass جمله زیر را وارد کند :
با این روش هکر به سادگی با اکانت Admin به سایت نفوذ خواهد کرد . پیشنهاد بنده برای جلوگیری کامل از این حملات استفاده از Stored procedure و پاس دادن مقادیر به صورت پارامتریک است ، برخی از برنامه نویسان برای جلوگیری از این حملات دست به فیلتر کردن جملات وارد شده در فرم ها میزنند که از نظر بنده روش درستی نمی باشد . جلوگیری از حملات XSS : میتوان گفت که خطرساز ترین حمله به یک وب سایت می باشد ، این روش که مخفف Cross-site Scripting است توسط این روش هکر اسکریپت های سمت کلاینت را به صفحات شما تزریق می نماید و از این طریق اطلاعات مورد نیاز خود را واکشی می کند . این حملات معمولا توسط فرم ها و QueryString ها صورت می گیرد ، به عنوان مثلا شما یک صفحه به نام Search.aspx دارید که پارامتر Keyword را دریافت کرده و اطلاعات را از بانک واکشی می کند ، همچنین مقدار Keyword را نیز در Textbox قرار می دهید حال فرض کنید که هکر Url را به صورت زیر تغییر دهد : یا داخل Textbox مقدار زیر را وارد نماید :
در حالت اول تمام اطلاعات کوکی های شما به سایت هکر ارسال شده و در حالت دوم کوکی ها به صورت Alert Box به هکر نمایش داده می شوند . در حالت پیشفرض دات نت تدابیری برای جلوگیری از این حملات اندیشیده ، خاصیت ValidateRequest تمام اطلاعات تبادل شده را اعتبار سنجی می نماید و از وارد کردن چنین کلماتی جلوگیری می کند ، در برخی موارد (مثلا نیاز به استفاده از ویرایشگر متن (ادیتور)) مجبور به غیر فعال کردن این خاصیت می شویم ، دقت نمایید که به هیچ وجه این خاصیت را در تگ Page وبکانفیگ off نفرمایید ، اگر هم نیاز به off کردن آن داشتید آن را در CodePage صفحه غیر فعال کنید و سپس اطلاعاتی که داخل فرم شما وارد می شوند را توسط کلاس HTTPUtility.HTMLEncode انکد نمایید همچنین تا جایی که امکان دارد تمامی فیلدها را اعتبار سنجی نمایید . همچنین میتوانید از تابع زیر جهت تبدیل متونی که دارای تگ هستند به PlainText استفاده کنید : کنترل FileUpload : یکی از خطر ساز ترین کنترل های Asp.NET این کنترل می باشد دلیل آن هم این است که کاربر می تواند از طریق این کنترل فایل خود را وارد سرور نماید ، اجازه بدهید با یک مثال موضوع را روشن تر کنم ، فرض کنید شما یک وب سایت طراحی کرده اید و در آن یک بخش برای عضویت قرار داده اید . کاربران میتوانند در هنگام عضویت عکس خود را بارگزاری نمایند ، شما عکس ها را در پوشه pics ذخیره می کنید و آن را به کاربران نمایش می دهید .ا کنون کار هکر شروع می شود به سادگی به جای اینکه یک عکس آپلود کند یک صفحه aspx ایجاد کرده و آن را آپلود می نماید ، این صفحه aspx میتواند شامل کد هایی باشد که تمامی اطلاعات Web.Config شما را به او نشان دهد و یا او را به سورس فایل های شما برساند و.... برای جلوگیری از این حمله کافیست پسوند فایل های بارگزاری شده را به وسیله یک RegularExpression Validation مشابه زیر بررسی کنید و فقط فایل هایی که عکس هستند را اجازه دهید :
- ASP.net
- 13k بازدید
- 25 تشکر