این سوال بحثبرانگیزی است که همیشه باعث درگرفتن بحثهای داغی بین طرفداران زبانهای مختلف میشود. این سوال را به روشهای مختلفی میتوان پاسخ داد؛ اما WhiteHat Security در جدیدترین گزارش خود در ارتباط با اطلاعات آماری امنیت وبسایت سعی کرده به این سوال پاسخ دهد و دادههای آماری مربوط به زبانهای برنامهنویسی وب و همچنین مقایسه قدرت امنیتی آنها را آنالیز کرده است.
این کمپانی امنیتی میزان آسیبپذیری سی هزار وبسایت تحت مدیریت خود را ارزیابی کرده است و این کار را با هدف اندازهگیری عملکرد امنیتی زبانهای برنامهنویسی بهکاررفته و چارچوب آنها انجام داده است؛ در ادامه نکات برجستهی این یافتهها آورده شده است.
اما پیش از هرچیزی به این نکته توجه داشته باشید: در هر تحقیق مستقل، فرد یا گروه تحقیقکننده باید جنبههای مختلف تحقیق و همچنین دامنهی تحقیق را پیش از هرگونه قضاوت در ارتباط با امنیت زبانهای برنامهنویسی (یا عدم امنیت آنها) در نظر داشته باشد. در ارتباط با گزارش WhiteHat Security باید گفت که تمام سی هزار وبسایت استفاده شده در تحقیق متعلق به مشتریان WhiteHat بودهاند و به نظر میرسد میتوان آنها را نمایندهی کاملی برای بزرگترین و قدیمیترین زبانهای برنامهنویسی وب دانست: ASP/.NET، Perl، PHP، Java و ColdFusion.
تمام این زبانهای برتر برنامهنویسی و چارچوب آنها بدون شک در راستای توسعه اپلیکیشن وب به شکل امروزی بسیار مفید واقع شدهاند؛ با این وجود، زبانها و چارچوبهای جدیدتر مانند Ruby/Ruby-on-Rails، پایتون (Django و Flask) و Go تبدیل به گزینههایی محبوب بین زبانهای برنامهنویسی وب شدهاند.
پرکاربردترین زبانهای برنامهنویسی وب
در تحقیق WhiteHat Security محبوبترین زبانهای برنامهنویسی ASP، ColdFusion، .NET، Java، Perl و PHP هستند (زبان برنامهنویسی کلاسیک ASP و تکنولوژیهای جدیدتر .Net از هم متمایز شدهاند). سه زبان برتر و محبوب برنامهنویسی وب به شرح زیر است:
- .Net (%۲۸.۱)
- Java (%۲۴.۹)
- ASP (%۱۵.۹)
رتبهبندی میزان آسیبپذیری مربوط به هر زبان هم دقیقا با رتبهبندی بالا هماهنگی دارد. زبان برنامهنویسی وب NET. به میزان ۳۱ درصد آسیبپذیر است درحالیکه زبانهای Java و ASP به ترتیب ۲۸ درصد و ۱۵ درصد آسیبپذیرند.
هر صنعتی زبان برنامهنویسی وب خاصی را انتخاب میکند – برای مثال بخش مالی بیشتر از زبان ASP استفاده میکند در حالیکه در صنعت بازی زبان PHP حرف اول را میزند. در بانکداری زبانهای Java و.NET بیشتر استفاده میشوند و به نظر میرسد که نهادهای دولتی به هنگام ساخت اپلیکیشنهای وب از زبانهای ColdFusion و Perl دوری میکنند.
آسیبپذیرترین زبانهای برنامهنویسی وب
یافتههای این گزارش نشان میدهد که مقام نخست در میان آسیبپذیرترین زبانهای برنامهنویسی وب به .NET تعلق میگیرد و زبانهای Java و ASP در مقامهای بعدی قرار دارند:
- .Net (%۳۱)
- Java (%۲۸)
- ASP (%۱۵)
- PHP (%۲)
WhiteHat Security در تفسیر این ارقام بسیار محتاطانه عمل کرده است، و این مسئله را در نظر داشته که فاکتورهای بسیاری میتوانند بر این اعداد تاثیر داشته باشند: تعداد بسیار بالای اپلیکیشنهای نوشتهشده با زبان برنامهنویسی وب .NET و Java، پیچیدگی/سایز وبسایتها و اپلیکیشنهای نوشتهشده با این زبانها در مقایسه با زبانهای دیگر و از همه مهمتر، هیچ شواهدی مبنی بر اینکه .NET یا Java امنیت کمتری در مقایسه با زبانهای دیگر دارند وجود ندارد.
با کدنویسی امن در پایتون آسیبپذیریها را به حداقل برسانید:
آسیبپذیریهای رایج زبانهای برنامهنویسی وب
در بحث آسیبپذیری، حملات XSS بیشتر به زبانهای ASP، ColdFusion، Java، Perl و PHP انجام میشوند. حملات XSS شامل تزریق اسکریپت توسط کاربر –معمولا اسکریپتهای نوشتهشده با زبان جاوا- به صفحات وب مشاهدهشده توسط او برای عبور از کنترلهای دسترسی است. برای اپلیکیشنهای .Net نشت اطلاعات –یا آشکار کردن تصادفی دادههای حساس (برای مثال کامنتها، اطلاعات مربوط به عیبیابی و رفع آن، پیامهای ارور)- آسیبپذیری اصلی محسوب میشود. زبان ColdFusion بالاترین میزان آسیبپذیری را در برابر تزریق SQL دارد (۱۱ درصد)؛ در حقیقت، با یک جستجوی ساده در گوگل درباره تزریق SQL برای زبان ColdFusion، نتایج بیشماری را خواهید یافت. در حمله تزریق SQL، عامل تهدید دستورات SQL را در یک برنامه تحت وب مبتنی بر دیتابیس وارد میکند تا بتواند با استفاده از آنها دیتااستور (یا همان انبار داده) آن دیتابیس را دستکاری کرده یا تغییراتی در آن ایجاد کند.
آسیبپذیریها را پیش از هکرها بیابید! دورههای تست نفوذ لیان:
همانطور که احتمالا خودتان متوجه شده باشید، هیچ راهی وجود ندارد که از طریق آن بتوان گفت چه زبانی امنیت بیشتری دارد. گزینههای نهچندان محبوب در میان زبانهای برنامهنویسی وب میتوانند به عنوان زبانهای دارای امنیت بالاتر شناخته شوند زیرا افراد کمی در استفاده (و سواستفاده) از آنها مهارت دارند. از طرف دیگر یک زبان ناشناخته، کار توسعهدهندگان اپلیکیشنها را سخت میکند و آنها نمیتوانند به راحتی اپلیکیشنهای ایمن را با استفاده از شیوههای اثباتشده و مطمئن توسعه دهند. در سطوح سازمانی و تیمی، برخورداری از مهارت کافی در یک زبان معمولا به این معنی است که شیوههای برنامهنویسی ایمنتری مورد استفاده قرار میگیرند. با این حال، در مورد زبانهای .Net و Java محبوبیت و گسترش روزافزون استفاده از آنها، تبدیل به نقطهضعف این زبانها شده است.
در این تحقیق به جای بدگویی یا تعریف کردن از مزایا و معایب زبانهای برنامهنویسی وب، در ارتباط با آسیبپذیریهای هر زبان و نوع حملات هکری رایج وارده بر هرکدام اطلاعات ارزشمندی ارائه شده است. شاید این به شما در انتخاب ایمنترین زبان کمک نکند ولی به شما کمک میکند که اقدامات امنیتی درستی را پس از نوشتن نرمافزار اتخاذ کنید. بنابراین، هیچ جواب قانعکنندهای در ارتباط با اینکه کدام زبان امنیت بیشتری دارد وجود نخواهد داشت و یافتههای این تحقیق صرفا نشاندهنده این است که به طور کلی بسیاری از اپلیکیشنهای وب موجود آسیبپذیر بوده و امنیت ضعیفی دارند. توسعهدهندگان نرمافزار با داشتن دانش کافی نسبت به زبانها، چارچوبها و ابزارهای مورد استفادهی خود، میتوانند آسانتر امنیت را در چارچوبهای توسعهی خود لحاظ کنند و در تمامی فازهای توسعه نرمافزار میزان آسیبپذیری را ارزیابی کرده و تستهای نرمافزاری را انجام دهند. برای گروه امنیتی لیان بهمنظور دستیابی به این هدف، خدمات ارزیابی جامع میزان آسیبپذیری و مانیتورینگ (کنترل) را برای اپلیکیشنهای وب، سرورها، روترها و غیره ارائه میکند.