اینترنت و به دنبال آن وب ، دنیای نرم افزار را دستخوش تحولات فراوانی نموده است . ظهور نسل جدیدی از برنامه های کامپیوتری موسوم به برنامه های وب از جمله این تحولات عظیم است . پس از ارائه سرویس وب در سال 1991، وب سایت های متعددی ایجاد گردید . اینگونه سایت ها به منظور ارائه اطلاعات به مخاطبان خود از صفحات وب ایستا استفاده می کردند . در چنین وب سایت هائی ، امکان تعامل کاربر با برنامه وجود نداشت .
با توجه به این که رویکرد فوق با ماهیت و یا روح نرم افزار چندان سازگار نمی باشد ، تلاش های گسترده ای در جهت ایجاد محتویات پویا انجام و متعاقب آن ، فن آوری های متعددی ایجاد گردید . به عنوان نمونه ، با پیاده سازی فن آوری CGI ( برگرفته از Common Gateway Interface ) ، امکان استفاده از برنامه های خارجی به منظور تولید محتویات پویا فراهم گردید . بدین ترتیب ، کاربران قادر به درج اطلاعات و ارسال آنها برای یک برنامه خارجی و یا اسکریپت سمت سرویس دهنده شدند . برنامه موجود در سمت سرویس دهنده پس از دریافت اطلاعات و انجام پردازش های تعریف شده ، نتایج را تولید و آنها را برای کاربر ارسال می نمود .
رویکرد فوق ، به عنوان نقطه عطفی در برنامه های وب تلقی می گردد چراکه برای اولین مرتبه امکان تولید محتویات پویا در وب سایت ها فراهم گردید . از آن زمان تاکنون فن آوری های متعددی به منظور تولید برنامه های وب ایجاد شده است . PHP و ASP.NET نمونه هائی در این زمینه می باشند . صرفنظر از این که از کدام فن آوری به منظور ایجاد برنامه های وب استفاده می گردد ، ایمن سازی آنان از جمله اهداف مشترک تمامی پیاده کنندگان است .
امنیت برنامه های وب و برداشت های اولیه
زمانی که در رابطه با امنیت برنامه های وب سخن به میان می آید ، تهاجم علیه یک سایت ، سرقت کارت های اعتباری ، بمباران وب سایت ها در جهت مستاصل کردن آنان به منظور ارائه خدمات و سرویس های تعریف شده ، ویروس ها ، تروجان ها ، کرم ها و ... در ذهن تداعی می گردد . صرفنظر از نوع برداشت ما در رابطه با موارد فوق ، می بایست بپذیریم که تهدیدات امنیتی متعددی متوجه برنامه های وب با توجه به ماهیت آنان می باشد . سازمان ها و یا موسساتی که از اینگونه برنامه ها استفاده می نمایند و یا در صدد طراحی و پیاده سازی آنان می باشند ، می بایست به این نکته مهم توجه نمایند که ایمن سازی یک برنامه وب ، محدود به بکارگیری یک فن آوری خاص نبوده و فرآیندی است مستمر که عوامل انسانی و غیرانسانی متعددی می توانند بر روی آن تاثیرگذار باشند .
امنیت برنامه های وب را می بایست با توجه به
نوع معماری و رفتار آنان بررسی نمود .
برداشت های غیرواقعی از امنیت برنامه های وب
متاسفانه به دلیل عدم شناخت لازم در خصوص ماهیت برنامه های وب از یک طرف و از سوی دیگر عدم آشنائی لازم با مفاهیم امنیت ، شاهد برداشت های نادرست در خصوص امنیت برنامه های وب می باشیم . اجازه دهید به چند نمونه در این خصوص اشاره نمائیم :
• ما ایمن هستیم چون از یک فایروال استفاده می نمائیم . این تصور کاملا اشتباه است و به نوع تهدید بستگی خواهد داشت . مثلا یک فایروال قادر به تشخیص داده ورودی مخرب جهت ارسال به یک برنامه وب نمی باشد . فایروال ها دارای عملکردی قابل قبول در رابطه با اعمال محدودیت بر روی پورت ها می باشند و برخی از آنان می توانند همزمان با بررسی اطلاعات مبادله شده ، امکانات برجسته حفاظتی را ارائه نمایند . فایروال ها جزء لاینفک در یک فریمورک امنیتی می باشند ولی نمی توان آنان را به عنوان یک راهکار جامع به منظور ایجاد و برپائی یک محیط ایمن در نظر گرفت .
• ما ایمن هستیم چون از SSL ( برگرفته ازSecure Sokets Layer ) استفاده می نمائیم . SSL برای رمزنگاری ترافیک موجود بر روی شبکه یک گزینه ایده آل است ولی قادر به بررسی داده ورودی یک برنامه نمی باشد .
• ما ایمن هستیم چون از سیستم عاملی استفاده می نمائیم که نسبت به سایر سیستم های عامل دارای امنیت بیشتری است . استدلال فوق با فرض درست بودن اصل قضیه ، نادرست و غیرمنطقی است چراکه امنیت یک فرآیند است نه یک محصول . بنابراین با بکارگیری یک محصول خاص ( به عنوان نمونه یک سیستم عامل ) نمی توان این ادعا را داشت که ما به یک محیط ایمن به منظور ایجاد برنامه های وب دست یافته ایم .
با رد امنیت یک سیستم عامل نمی توان امنیت یک سیستم عامل دیگر را تائید نمود.
( من خوبم چون شما بد هستید ! )
امنیت چیست ؟
اولین رسالت امنیت ، حفاظت از سرمایه های یک سازمان است که ممکن است شامل آیتم های ملموسی نظیر یک صفحه وب و یا بانک اطلاعاتی مشتریان و یا آیتم های غیرملموسی نظیر شهرت و اعتبار یک سازمان باشد. امنیت یک مسیر است نه یک مقصد و به موازات تجزیه و تحلیل زیرساخت و برنامه های موجود ، می بایست اقدام به شناسائی تهدیدات و خطرات ناشی از آنان نمود . در واقع ، امنیت به مدیریت خطرات و پیاده سازی یک سیستم به منظور پاسخگوئی و مقابله با تهدیدات اشاره داشته و در ارتباط با عتاصر کلیدی زیر است :
• Authentication ، فرآیندی است که به کمک آن به صورت منحصربفرد سرویس گیرندگان یک برنامه شناسائی می گردند . کاربران ، سرویس ها ، فرآیندها و کامپیوترها ، نمونه هائی از سرویس گیرندگان یک برنامه می باشند . در واقع ، authentication هویت استفاده کنندگان یک برنامه را بررسی می نماید .
• Authorization ، فرآیندی است که به کمک آن دستیابی سرویس گیرندگان تائید شده به منابع و عملیاتی که قصد انجام آن را دارند بررسی و مجوز لازم صادر می گردد. فایل ها ، بانک های اطلاعاتی ، جداول ، سطرها ، منابع موجود در سطح سیستم نظیر کلیدهای ریجتسری و داده پیکربندی ، نمونه هائی از منابع مورد درخواست سرویس گیرندگان می باشند . انجام تراکنش هائی خاص نظیر خرید یک محصول ، واریز و انتقال پول از یک حساب به حساب دیگر و یا افزایش اعتبار یک کارت اعتباری از جمله عملیاتی می باشند که می بایست مجوز استفاده از آنان برای سرویس گیرندگان صادر گردد . در واقع ، authorization محدوده مجاز عملیاتی را که یک سرویس گیرنده می تواند انجام دهد را مشخص می نماید .
• Auditing : ممیزی موثر و ثبت عملیات انجام شده یکی از اصول مهم در جلوگیری از انجام اعمال خلاف قانون است . بدین ترتیب این اطمینان ایجاد خواهد شد که یک کاربر نمی تواند باعث عدم انحام یک کار و یا فعالیت در سیستم گردد و یا یک تراکنش را مقداردهی اولیه نماید . مثلا در یک سیستم e-commerce می بایست از مکانیزم هائی استفاده گردد تا این اطمینان حاصل گردد که یک مصرف کننده نمی تواند سفارش انجام شده برای خرید یکصد نسخه از یک کتاب را انکار نماید .
• Confidentiality ، که از آن با نام privacy نیز نام برده می شود ، فرآیندی است که به کمک آن این اطمینان ایجاد می گردد که حریم خصوصی داده رعایت و امکان مشاهده آن توسط کاربران غیرمجاز و یا سایر افرادی که قادر به ردیابی ترافیک یک شبکه می باشند ، وجود نخواهد داشت .
• Integrity ، فرآیندی است که به کمک آن این اطمینان ایجاد می گردد که داده در مقابل تغییرات تصادفی و یا تعمدی حفاظت خواهد شد . همانند privacy ، یکپارچگی اطلاعات یک فاکتور اساسی در خصوص امنیت داده محسوب می گردد ، خصوصا در مواردی که داده در طول شبکه مبادله خواهد شد . یکپارچگی داده در حال حمل ،عموما با استفاده از روش هائی نظیر hashing و یا کدهای تائید پیام انجام می شود .
• Availability ، فرآیندی است که به کمک آن این اطمینان ایجاد خواهد شد که همواره داده برای کاربران مجاز در دسترس و قابل استفاده خواهد بود . در اغلب حملات از نوع DoS ، مهاجمان این هدف را دنبال می نمایند که بتوانند امکان استفاده و در دسترس بودن برنامه برای کاربران مجاز را غیرممکن و عملا آن را از کار بیندازند .