اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
ASP.NET جهت مقابله با حملات XSS بطور پیشفرض از ورود تگهای HTML جلوگیری میکند و در صورتی که ورودی کاربر شامل این تگها باشد، HttpRequestValidationException صادر میگردد. لاگ کردن و بررسی این خطاها جهت آگاهی از وجود حمله بی اهمیت نیست. اما متأسفانه ELMAH که به عنوان معمولترین ابزار ثبت خطاها کاربرد دارد این نوع Exceptionها را ثبت نمیکند. دلیل آن هم این است که ELMAH در رویههای درونی خود اقدام به خواندن ورودیهای کاربر میکند و در این هنگام اگر ورودی کاربر نامعتبر باشد، Exception مذکور صادر میشود و فرصتی برای ادامه روند و ثبت خطا باقی نمیماند. به هر حال ضروری است که این نقیصه را خودمان جبران کنیم. راه حل افزودن یک فیلتر سفارشی برای ثبت خطاها به شکل زیر است (ASP.NET MVC):
فیلتر فوق باید در Global.asax معرفی شود:
به این ترتیب HttpRequestValidationException هم بعد از این در سیستم ELMAH ثبت خواهد شد.
public class ElmahRequestValidationErrorFilter : IExceptionFilter { public void OnException(ExceptionContext context) { if (context.Exception is HttpRequestValidationException) ErrorLog.GetDefault(HttpContext.Current).Log(new Error(context.Exception)); } }
public static void RegisterGlobalFilters (GlobalFilterCollection filters) { filters.Add(new ElmahRequestValidationErrorFilter()); filters.Add(new HandleErrorAttribute()); }