اسپرینگ فریمورک

بندانگشتی|رهگیرهای امنیتی و مدل «شیء امن»
**اسپرینگ فریمورک**  یک چارچوب نرم‌افزاری و مدیر وارونگی کنترل متن‌باز برای سکوی جاوا است.

ویژگی‌های اصلی این فریمورک می‌تواند توسط هر برنامه جاوا مورد استفاده قرار گیرد، اما دارای افزونه‌هایی برای ساختن برنامه‌های کاربردی وب بر روی پلت فرم JavaEE می‌باشد. اگر چه این فریمورک هیچ مدل برنامه‌نویسی خاصی را به برنامه‌نویس تحمیل نمی‌کند، اما در میان برنامه نویسان جاوا به عنوان یک راهکار دوم، یا یک جایگزین یا حتی افزونه ای برای مدل Enterprise JavaBeans (EJB) تبدیل شده‌است.

این فریمورک توسط آقای **راد جانسون** (Rod Johnson) نوشته شده و برای اولین بار در سال **۲۰۰۳** ارائه شد. نسخه دوم در سال ۲۰۰۶ ارائه شده و موفق به دریافت جوایز متعدد گردید؛ و تاکنون تا نسخه ۴٫۳ از این فریمورک منتشر شده‌است.

اسپرینگ یک فریمورک سبک است که می‌توان آن را فریمورک فریمورک‌ها نامید! به این خاطر که از انواع فریمورک‌ها شامل Struts, Hibernate, Tapestry, EJB, JSF و غیره پشتیبانی می‌کند. در نگاهی کلی تر اسپرینگ را به عنوان ساختاری تعریف می‌کنیم که در آن می‌توان solutionهای مربوط به مسایل تکنیکال مختلف را پیدا کرد.

فریمورک اسپرینگ شامل چندین ماژول است از جمله IOC, AOP, DAO, Context, ORM, WEB MVC و غیره.

## مزایای فریمورک اسپرینگ
اسپرینگ مزایای بسیاری دارد که عبارتند از:
# **قالب‌های از پیش تعریف شده** اسپرینگ قالب‌هایی (templates) برای تکنولوژی‌های JDBC, Hibernate, JPA و .. فراهم می‌کند؛ بنابراین نیازی به نوشتن کدهای زیاد نیست. اسپرینگ گام‌های پایه ای این تکنولوژی‌ها را مخفی می‌کند.
# **اتصال ضعیف** برنامه‌های اسپرینگی بخاطر وجود تزریق وابستگی، loosely coupled هستند.
# **تست آسان** تزریق وابستگی موجب می‌شود تا تست برنامه‌ها راحت‌تر شود. برنامه‌های EJB یا Struts برای اجرا نیاز به سرور دارند اما فریمورک اسپرینگ نیازی به سرور ندارد.
# **سبک‌وزن** اسپرینگ بسیار سبک است، چرا که پیاده‌سازی آن POJO است. اسپرینگ برنامه‌نویس را وادار نمی‌کند که از ارث بری یا پیاده‌سازی واسط (implement interface) استفاده کند. به همین خاطر است که به آن غیرتهاجمی (non-invasive) گفته می‌شود.
# **توسعه سریع** وجود تزریق وابستگی و نیز پشتیبانی از فریمورک‌های متعدد، اسپرینگ را به یک محیط توسعه آسان و سریع برای برنامه‌های JavaEE تبدیل کرده‌است.
# **انتزاع قدرتمند** اسپرینگ انتزاع بسیار قوی از ویژگی‌های JavaEE مانند JMS, JDBC, JPA و JTA فراهم می‌آورد.
# **پشتیبانی اعلانی (Declarative)** اسپرینگ برای ذخیره‌سازی، اعتبارسنجی، تراکنش‌ها و فرمت بندی پشتیبانی اعلانی فراهم می‌کند.

## آسیب‌پذیری Spring4Shell
در فرودین ۱۴۰۰، نمونه اکسپلویتی در گیت‌هاب منتشر شد که در آن نحوه بهره‌جویی از یک آسیب‌پذیری روز-صفر در اسپرینگ فریمورک نمایش داده شده بود. اگر چه اکسپلویت خیلی زود از روی گیت‌هاب حذف شد اما همان مدت کم برای دانلود آن توسط مهاجمان و البته محققان کافی بود. آسیب‌پذیری مذکور که به آن شناسه CVE-2022-22965 تخصیص داده شده و بسیاری منابع با عنوان Spring4Shell یا SpringShell از آن یاد کرده‌اند، ضعفی از نوع Remote Code Execution یا همان RCE است. نسخ 5.3.0 تا 5.3.17 و 5.2.0 تا 5.2.19 و نسخ پایین‌تر Spring Framework در صورت فراهم بودن چندین پیش‌نیاز دیگر از جمله اجرا بر روی نسخه 9 یا نسخ بالاتر JDK نسبت به CVE-2022-22965 آسیب‌پذیر تلقی می‌شوند. ۱۱ فروردین ۱۴۰۰، با عرضه نسخ ۵.۳.۱۸ و ۵.۲.۲۰، آسیب‌پذیری CVE-2022-22965 برطرف شد.

آژانس CISA ایالات متحده، ۱۲ فروردین ۱۴۰۰ با انتشار یک اطلاعیه از تمامی سازمان‌ها و آژانس‌های فدرال این کشور خواست تا نسبت به ارتقای محصولات آسیب‌پذیر به Spring4Shell اقدام کنند. چند روز بعد، CISA ضعف CVE-2022-22965 را به فهرست آسیب‌پذیری‌هایی که سوءاستفاده از آن‌ها توسط هکرها و مهاجمان مسجل شده اضافه کرد.

## منابع

رده:برنامه‌نویسی جنبه‌گرا
رده:بستر جاوای سازمانی
رده:چارچوب‌های نرم‌افزاری تحت وب
رده:کتابخانه‌های جاوا
رده:نرم‌افزارهایی که از پروانه آپاچی استفاده می‌کنند