FreeTextBox یکی از ادیتورهای متنی بسیار خوب تحت وب ASP.Net است که از نگارش 1 تا 3 و نیم ASP.Net را پشتیبانی میکند. به همراه آن یک image gallery هم جهت آپلود تصاویر ارائه میشود که بسیار ارزشمند است. اما مشکلی که دارد عدم بررسی پسوند فایل آپلود شده است. به عبارتی خاصیت AcceptedFileTypes آن هنگام آپلود تصاویر بررسی نمیشود و میتواند مشکلات امنیتی حادی را به وجود آورد (برای مثال شخص بجای تصویر میتواند فایل aspx را نیز آپلود کند). راه حلی هم برای آن وجود ندارد. سورس این کامپوننت فقط به خریداران ارائه میشود و نگارش مجانی آن بدون سورس است.
اما با استفاده از تواناییهای موجود در فایل استاندارد global.asax میتوان روی آپلود تمامی فایلها در برنامه نظارت داشت (نه فقط این یک مورد بلکه سراسر برنامه تحت کنترل قرار میگیرد). روش کار به صورت زیر است:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
List<string> toFilter = new List<string> { ".aspx", ".asax", ".asp", ".ashx", ".asmx", ".axd", ".master", ".svc" };
if (HttpContext.Current != null && HttpContext.Current.Request != null && HttpContext.Current.Request.Files != null)
for (int i = 0; i < HttpContext.Current.Request.Files.Count; i++)
{
string fileNamePath = HttpContext.Current.Request.Files[i].FileName.ToLower();
string name = Path.GetFileName(fileNamePath);
string ext = Path.GetExtension(fileNamePath);
if (toFilter.Contains(ext) || name == "web.config")
{
HttpContext.Current.Response.StatusCode = 403; //Forbidden
HttpContext.Current.Response.End();
}
}
}
در اینجا تمامی فایلهای آپلودی بررسی شده و اگر پسوند خطرناکی داشتند، یک صفحه forbidden به شخص نمایش داده میشود و تمام!
این کد را به صورت
Http module هم میتوان درآورد.