امنیت یکی از مهمترین دغدغه های فکری تولید کنندگان سایتها و برنامه های تحت وب است. برای ایمن سازی هر نرم افزار تحت وب باید اطمینان حاصل کنید که داده های خصوصی که در بین سرویس گیرنده و سرور ارسال می شوند ، کاملا ایمن هستند. اما قبل از پرداختن به مقوله امنیت نرم افزار تحت وب ، باید خود امنیت را تعریف کنیم ؟ تعریف امنیت تحت وب: به مجموعه فرایند هایی گفته می شود که باعث حفاظت از اطلاعات ،بواسطه یکسری محدودیتها و ابزار می شود . طبقه بندی امنیت نرم افزارهای تحت وب : 1-امنیتی که توسط نرم افزار ایجاد می شود یعنی در کد برنامه باید یکسری کدهای امنیتی ایجاد شود در این سطح امنیتی کنترل امنیت کاملا توسط نویسنده نرم افزار ایجاد می شود و برنامه نویس می تواند با خلاقیتهای خود انواع روشهای امنیتی را اعمال کند. 2-امنیتی که توسط سرور یا میزبان نرم افزار اعمال می شود. در این حالت 2 گزینه دارد الف-سرور در اختیار شماست: اگر سرور در سازمان شما باشد شما می توانید همانند حالت 1 گزینه های امنیتی خاص و مورد نیاز خود را تعریف کنید ب- سرور خارجی و در اختیار شما نیست : در این حالت کنترل دست شما نیست و شما مجبور هستید از همان تنظیمات امنیتی تعریف شده توسط شرکت ارایه دهنده سرور استفاده کنید. چه چیزهایی باید ایمن شوند: هنگامی که سازمانی بخواهد سیستمهای خود را امن کند باید نخست نیازمندیها را مشخص کند. دانشگاه نیاز به حفاظت از سلامت دادهها و تا حدی محرمانگی آنها- مانند نمرات- دارد. ضمناً ممکن است نیاز به دسترسپذیر بودن سیستم از طریق اینترنت برای دانشجویان و استادان داشته باشد. در مقابل سازمان نظامی به محرمانگی کلیه کارهای خود تأکید دارد. سیستمهای آن نباید از طریق شبکه در دسترس باشند. سلامت دادهها نیز مهم است ولی نه به اندازه محرمانگی آنها، یک سازمان نظامی ترجیح میدهد دادهها از بین بروند تا اینکه افشا شوند. اما یک نکته مشترک در همه جا وجود دارد و آن هم این است که اطلاعات کجا وچگونه ذخیره شوند در جواب مکان ذخیره شدن باید گفت چون نرم افزار مخاطب شما اطلاعاتی است پس اطلاعات آن در بانک اطلاعاتی ذخیره می شوند و به تبع آن بانک اطلاعات در سرور ذخیره می شود . پس نتیجه می گیریم محل ذخیره شدن اطلاعات تابع حالت2 با لا است(امنیتی که توسط سرور یا میزبان نرم افزار اعمال می شود) اما در جواب چگونگی ذخیره شدن اطلاعات چندین روش وجود دارد که باید به آنها توجه کنید که در اینجا بحث مدیریت اطلاعات مهم مطرح می شود .در بحث مدیریت اطلاعات نیز چند موضوع مهم مطرح می شود : 1-رمز نگاری اطلاعات : برخی اطلاعات جنبه ی حیاتی دارند و حتی خود برنامه نویس هم بعد از انتشار برنامه نباید از اونها مطلع باشه. مثل کلمه ی عبورحساب بانکی یک فرد. در این حالت این کلمه ی عبور باید با یک الگوریتم به رمز در بیاد و در بانک اطلاعاتی ذخیره شود. بهتر هست که این دسته از اطلاعات با استفاده از یک بستر انتقال امن منتقل شوند. مانند پروتکل SSL SSL چیست ؟ نوعی پروتکل امنیتی است که امکان می دهد داده ها را با استفاده از رمز گذاری از طریق اینترنت ارسال کنید .برای تشخیص اینکه داده ها از طریق اتصال امن انتقال می یابند می توانید به آدرس موجود در خط آدرس مرورگر اینترنت دقت کنید اگر به جای http عبارت https آغاز شده باشد در آن صورت متوجه می شوید که شما از طریق اتصال امن در حال انجام عملیات خود هستید . به عنوان مثال به ابتدای آدرس زیر که سایت بانکداری اینترنتی ملت است دقت کنید https://ebanking.bankmellat.ir/ebanking/ پروتکل SSL قبل از اينکه اطلاعات شخصي مشتري از رايانه او خارج شود آنها را کدگذاري و رمز نگاري کرده تا اين اطمينان براي مشتري حاصل شود که هنگام ارسال و دريافت اطلاعات هيچ شخص ديگري نمي تواند اطلاعات را خوانده و يا آنها را تغيير دهد. 2-جلوگیری از ورود اطلاعات پی در پی توسط نرم افزارها : حتما دیده اید که در بعضی سایتها و نرم افزارها برای ثبت نام از تصاویر اینترنتی استفاده می کنند که عبارتی در آن وجود دارد که شما باید آن را در جای مخصوص ثبت کنید ، می دانید چرا ؟ یک تصویر امنیتی از تعدادی حرف و عدد در کنار هم تشکیل شده که تنها انسان ها قادر به خواندن اونها هستند و در جایی که نیاز به ورود اطلاعات هست استفاده میشه. کاربرد تصاویر امنیتی در جلوگیری از ارسال مداوم داده ها به سرور هست . حملاتی که به اشغال شدن سرور منجر میشن به حملات DOS معروف هستند. نوشتن برنامه ای که در فواصل زمانی کوتاه، مدام داده هایی رو از طریق برنامه ی شما به سرور ارسال کنه بسیار راحت هست. بدین دلیل همیشه در صفحاتی که برای عموم قابل مشاهده هست (و نه خواص) حتما از تصاویر امنیتی استفاده کنید. 3-جلوگیری از دسترسی و تخریب اطلاعات توسط کاربران غیر مجاز: برای جلوگیری از تخریب اطلاعات توسط کاربران باید روشهای آسیپ پذیری اطلاعات را بدانیم که بنده به مهمترین آنها اشاره ای می کنم البته روشها زیاد است ولی من 3 تا را بررسی می کنم 1- محافظت از برنامه در برابر SQL Injection به طور خلاصه، به تزریق کدهای SQL از طریق برنامه، SQL Injection گفته میشه. شاید بشه گفت که خطرناکترین نوع حمله ای که می تونه به یک برنامه صورت بگیره SQL Injection هست که متاسفانه بسیاری از افراد اون رو نادیده میگیرن و نسبت به اون بی توجه هستن. عدم توجه به توانایی تزریق SQL به برنامه، عملا دیتابیس رو در اختیار فرد مهاجم قرار میده و می تونه تمام هست و نیستی شما رو بر باد بده! یعنی فرد مهاجم بحای ورود اطلاعات مناسب یک دستور sql به بانک اطلاعاتی ارسال می کند که باعث صدمه به اطلاعات می شود. مثلا به هنگام ورود اطلاعات نام و رمز کاربر برای ورود به برنامه ، مهاجم می تواند یک دستور sqlرا بفرستد ، در این حالت برنامه نویس باید در ورود اطلاعات از برنامه به بانک اطلاعاتی دقت کند . 2-محافظت از برنامه در برابر حملات XSS این روش ایجاد اختلال در صفحات وب با اجرای اسکریپت است .یک هکر برای حمله با تزریق یک اسکریپت در میان صفحه وب از طریق قسمت ورودی های کاربران و کلیک دکمه تایید بدون چک کردن لازم می تواند صفحه شما را مورد حمله قرار دهد . 3-حافظت از برنامه در برابر Session Hijacking یکی از قدیمی ترین حملاتی که به برنامه های وب صورت می گیره سرقت Session هست. Session برای نگهداری داده هایی به کار میره که برای هر کاربر منحصر به فرد هستند. مثلا نمایش نام کاربر پس از لوگین، در تمامی صفحات سایت Session در حافظه ی سرور نگهداری میشه نرم افزار برای اینکه بتونه تشخیص بده که هر Session متعلق به کدام کاربر هست، مشخصه ای یکتا برای هر Session ایجاد می کنه و این مشخصه رو در یک کوکی ذخیره می کند . پر واضح هست که اگر کوکی ها در مرورگر کاربر غیر فعال باشند، استفاده از Session عملا کاربردی نداره به طور خلاصه اگر فردی بتونه این کوکی رو به سرقت ببره، به راحتی می تونه خودش رو صاحب Session شما معرفی کنه.