آسیب پذیری Error Handling


شرح آسیب پذیری:

یکی از مواردی که در برنامه نویسی مهم است جلوگیری از افشاء اطلاعات حساس توسط برنامه است. خطاهای برنامه نویسی دید بسیار عمیقی از نحوه عملکرد برنامه به مهاجم (هکر) می دهد. باید اطمینان حاصل کرد که برنامه تحت وب به هیچ عنوان و در مواجه شدن با هیچ شرایطی اطلاعاتی حساس را افشاء نمی کند.

به طور مثال همانطور که در تصویر بالا مشاهده می نمائید، خطاهای سمت سرور نظیر 500 و 400 باعث افشاء نام وب سرور و سیستم عامل می گردند و مهاجم می تواند از این اطلاعات (در صورت وجود نسخه وب سرور) نسبت به یافتن Exploit مناسب برای آسیب پذیری استفاده نماید.

برخی دیگر از خطا ها هم همانند خطای بالا، باعث افشاء اطلاعات دیگری نظیر مسیر فیزیکی فایلی که کدهای داخل آن دچار خطا شدند می گردد. به طور مثال از تصویر بالا هم مسیر فیزیکی قابل مشاهده است، هم این مورد که به دلیل عبارت www در مسیر فیزیکی مشخص می شود که سیستم عامل سرور ویندوز است. همچنین تابعی که خطا در آن دریافت شده هم قابل نمایش است که مهاجم را در حدس زدن اجزای داخلی سایت و نحوه کد نویسی آن یاری می نماید.

چگونه این آسیب پذیری را رفع کنیم ؟

1) استفاده از Custom Error Page ها ( برای اطلاعات بیشتر کلیک کنید. )
2) رفع خطاهای برنامه نویسی از طریق قرار دادن Exception ها در کد های Back-end تا در صورت بروز خطا، بر اساس Exception نوشته شده مسیر برنامه ادامه یابد.
به طور مثال می توانید از try و Catch در زبان های Java/Net. استفاده نمائید. مثال:

public class DoStuff {
    public static void Main() {
        try {
            StreamReader sr = File.OpenText("stuff.txt");
            Console.WriteLine("Reading line {0}", sr.ReadLine());    
        }
        catch(Exception e) {
            Console.WriteLine("An error occurred. Please leave to room”);
	 logerror(“Error: “, e);
        }
    }
}

3) استفاده از فایل Global.aspx برای مدیریت خطا در برنامه های Net.

<%@ Import Namespace="System.Diagnostics" %>
  <script language="C#" runat="server">
    void Application_Error(Object sender, EventArgs e) {
         String Message = "\n\nURL: http://localhost/" + Request.Path
                          + "\n\nMESSAGE:\n " + Server.GetLastError().Message
                          + "\n\nSTACK TRACE:\n" + Server.GetLastError().StackTrace;
         // Insert into Event Log
         EventLog Log = new EventLog();
         Log.Source = LogName;
         Log.WriteEntry(Message, EventLogEntryType.Error);
       Server.Redirect(Error.htm) // this shall also clear the error
    }
</script>

کد بالا یک متد از Application_Error است. ابتدا خطا Log شده و سپس کاربر به مسیر دیگری Redirect می گردد. این تنها یک مثال بوده و شما می توانید برای جزئیات بیشتر این کد را تکمیل نمائید.

4) استفاده از فایل Web.Config

<customErrors mode="On" defaultRedirect="error.html">
    <error statusCode="500" redirect="err500.aspx"/>
    <error statusCode="404" redirect="notHere.aspx"/>
    <error statusCode="403" redirect="notAuthz.aspx"/>
</customErrors>

نمونه کد بالا این مورد را شرح داده است و می توانید بدین منظور از آن استفاده نمائید.

میلاد خوشدل

در حوزه‌ی امنیت وب و شبکه فعالیت می کند، عاشق پارکور است و مدیریت دیتاسنتر، امن سازی شبکه های مخابراتی و کابلی و برنامه نویسی وب و موبایل از تجارب کاری او می باشد. او در حال حاضر بنیانگذار ریجاکس است.

نظر خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

2 × 5 =


تگ های html مجاز به استفاده می باشند: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ارسال یک پیام