20 آسیب پذیری برتر OWASP و نحوه رفع آنها اینفوگرافیک


پروژه امنیت برنامه های کاربردی وب باز (OWASP) یک سازمان تثبیت شده است که به بهبود امنیت برنامه های کاربردی وب از طریق ایجاد ابزارها، مستندات و اطلاعات اختصاص دارد - که دومی شامل 10 آسیب پذیری برتر سالانه برنامه های کاربردی وب است. در زیر مجموعه ای از جدیدترین آسیب پذیری های حیاتی که در لیست های آن ظاهر شده اند و همچنین اطلاعاتی در مورد نحوه اصلاح هر یک از آنها آورده شده است.

آسیب پذیری های برتر OWASP

تزریق 1. SQL

توضیحات: آسیب پذیری های تزریق SQL زمانی اتفاق می افتد که داده ها از یک منبع نامعتبر وارد یک برنامه می شوند و برای ساخت پویا یک کوئری SQL استفاده می شوند. SQL Injection ممکن است منجر به از دست دادن یا خراب شدن داده ها، عدم پاسخگویی یا عدم دسترسی شود. تزریق گاهی اوقات می تواند منجر به تصاحب کامل میزبان شود.

رفع/توصیه: برای فیلتر کردن کاراکترهای خطرناک از ورودی کاربر باید از اعتبارسنجی ورودی سمت سرور مناسب استفاده شود. علاوه بر این، استفاده از عبارات آماده شده/رویه های ذخیره شده پارامتری می تواند اطمینان حاصل کند که ورودی به عنوان متن پردازش می شود.

قطعه کد نمونه (اعتبارسنجی ورودی):

ورودی رشته=request.getپارامتر ("SeqNo");
String characterPattern="[0-9a-zA-Z]";
اگر (! input. مطابقت دارد (characterPattern))
{
out.println ("ورودی نامعتبر ");
}

2. اسکریپت نویسی Cross Site (XSS).

توضیحات: در این موارد، داده های نامعتبر کنترل شده توسط کاربر در برنامه پردازش می شوند که منجر به اجرای اسکریپت های مخرب می شود. آسیب پذیری های XSS می تواند به مهاجمان اجازه دهد تا اطلاعات کاربر را ضبط کنند و/یا کد HTML را به برنامه وب آسیب پذیر تزریق کنند.

رفع/توصیه: اعتبارسنجی ورودی سمت سرور مناسب و رمزگذاری خروجی باید هم در سمت کلاینت و هم در سمت سرور به کار گرفته شود تا از اجرای اسکریپت ها جلوگیری شود. کاراکترهای خطرناک باید از ورودی کاربر فیلتر شوند [به عنوان مثال: | ، & ، ؛ ، $، ٪ ، @ ، ' ، " ، \' ، \" ، <> ،() ، + ، CR (بازگشت کالسکه ، ASCII 0x0d) ، LF (تغذیه خط ، ASCII 0x0a) ، (علامت کاما) ،\].

قطعه کد نمونه (تکنیک رمزگذاری):

<نوع ورودی ="متن" maxlength="30" نام ="ecsChangePwdForm" size="40" readonly="true" value='<٪=ESAPI.encoder().encodeForHTML(request.getParameter("userName"))٪>'/>

3. نشت اطلاعات

توضیحات: برنامه وب ممکن است داده های سیستم یا اشکال زدایی اطلاعات را با افزایش استثناها یا ایجاد پیام های خطا نشان دهد. نشت داده های سیستم یا اشکال زدایی اطلاعات از طریق یک جریان خروجی یا عملکرد ورود به سیستم می تواند به مهاجمان اجازه دهد تا در مورد برنامه دانش کسب کنند و حملات تخصصی را به آن انجام دهند.

رفع/توصیه:

  • اطمینان حاصل کنید که کدهای خطا و سایر پیام های قابل مشاهده توسط کاربران نهایی حاوی اطلاعات حساسی نیستند.
  • تمام پیام ها را پاک کنید و هرگونه اطلاعات حساس غیر ضروری را حذف کنید.
  • اطمینان حاصل کنید که اشکال زدایی، پیام های خطا و استثناها قابل مشاهده نیستند.

قطعه کد نمونه:

گرفتن (استثنا e)
{
if(log.isDebugEnabled()) log.debug (زمینه، رویدادها. ADHOC,
"Caught InvalidGSMException Exception -- "
+ e.toString() );
}

4. تزریق قاب

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

رفع/توصیه: از یک لیست سفید از ورودی های قابل قبول استفاده کنید که کاملا با مشخصات ایمن مطابقت دارد

قطعه کد نمونه:

ورودی رشته=request.getپارامتر ("ورودی");
الگوی کاراکتر رشته="[./a-zA-Z0-9?"="&]";
اگر (! input. match (character Pattern))
{
out.println ("Invalid Input ");
}

5. تغییر مسیر URL

توضیحات: در حالی که معمولا برنامه های وب کاربران را به وب سایت ها/صفحات دیگر هدایت می کنند یا فوروارد می کنند، مهاجمان معمولا از برنامه های آسیب پذیر بدون اعتبار سنجی تغییر مسیر مناسب سوء استفاده می کنند. این می تواند منجر به تغییر مسیر مخرب به یک صفحه غیرقابل اعتماد شود.

رفع/توصیه: از یک لیست سفید از ورودی های قابل قبول استفاده کنید که کاملا با مشخصات و URL ها یا دامنه های تایید شده مورد استفاده برای تغییر مسیر مطابقت دارند.

قطعه کد نمونه:

ورودی رشته=request.getپارامتر ("ورودی");
الگوی کاراکتر رشته="[./a-zA-Z0-9?"="&]";
اگر (! input. match (character Pattern))
{
out.println ("Invalid Input ");
}

6. از دست دادن مهلت زمانی جلسه

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

رفع/توصیه: اطمینان حاصل کنید که عملکرد مهلت زمانی به درستی پیکربندی شده و کار می کند.

قطعه کد نمونه:

<webapp>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</webapp>

7. اطلاعات حساس ارسال شده به عنوان متن واضح در URL GET

توضیحات: برنامه های کاربردی وب که از درخواست های GET برای انتقال اطلاعات از طریق رشته پرس و جو استفاده می کنند، این کار را در متن واضح انجام می دهند. این باعث می شود هر گونه اطلاعات حساس ارسال شده با GET در تاریخچه مرورگر و گزارش های سرور قابل مشاهده باشد.

رفع/توصیه: استفاده از POST به جای GET تضمین می کند که اطلاعات محرمانه در پارامترهای رشته پرس و جو قابل مشاهده نیست.

8. کوکی های شناسه جلسه به عنوان ایمن علامت گذاری نشده اند

توضیحات: اگر کوکی های شناسه جلسه برای یک برنامه وب به عنوان امن علامت گذاری شده باشند، مرورگر آنها را از طریق یک درخواست HTTP رمزگذاری نشده ارسال نمی کند. علامت گذاری نکردن آنها به این ترتیب به کوکی ها اجازه می دهد تا توسط مهاجمان در متن واضح قابل دسترسی و مشاهده باشند.

رفع/توصیه: مطمئن شوید که کوکی های حساس با ویژگی "امن" تنظیم شده اند تا مطمئن شوید که همیشه از طریق HTTPS منتقل می شوند.

قطعه کد نمونه:

کوکی کوکی=کوکی جدید("myCookieName");
cookie.secure(true);

9. اسکریپت نویسی کراس فریم (XFS)

توضیحات: اکسپلویت های XFS در ارتباط با XSS برای هدایت مرورگرها به یک صفحه وب که توسط مهاجمان کنترل می شود استفاده می شود. در این موارد، صفحه مخرب یک صفحه شخص ثالث را در یک فریم HTML بارگذاری می کند. سپس اسکریپت های موجود در صفحه مهاجم می توانند داده ها را از صفحه شخص ثالث بدزدند، بدون اینکه کاربر بداند.

>

رفع/توصیه: اعتبارسنجی مناسب باید برای فیلتر کردن هر ورودی مخربی که می تواند به یک قاب تزریق شود و در مرورگر کاربر، در چارچوب قاب صفحه اصلی، اجرا شود، استفاده شود.

قطعه کد نمونه:

اگر (بالا == خود) }
document.documentElement.style.display='block';
}
else {
top.location=self.location;
}

10. اطلاعات حساس به عنوان متن واضح روی صفحه نمایش داده می شود

توضیحات: اطلاعات حساس (مانند گذرواژه ها، اطلاعات کارت اعتباری) نباید به صورت متن واضح روی صفحه نمایش داده شود. علاوه بر حملات گشت و گذار در شانه، داده های حساس ذخیره شده به عنوان متن واضح اغلب در حافظه پنهان سمت کلاینت قرار می گیرند که در صورت کشف به راحتی به سرقت می روند.

رفع/توصیه: اطلاعات حساس باید پوشانده شوند تا برای کاربران قابل مشاهده نباشد

قطعه کد نمونه:

<asp:TextBox ID="txtSSN" TabIndex="6" runat="server" Width="206px" MaxLength="11" TextMode="Password"></asp:TextBox>

11. اطلاعات حساس ذخیره شده

توضیحات: مرورگرها معمولا یک کپی از موارد درخواستی را در حافظه پنهان خود ذخیره می کنند: صفحات وب، تصاویر و موارد دیگر. این یک شکاف امنیتی برای برنامه هایی ایجاد می کند که داده های حساس را ذخیره، پردازش و نمایش می دهند، زیرا مهاجمانی که به حافظه پنهان مرورگر کاربر دسترسی پیدا می کنند، به هر گونه اطلاعات موجود در آن دسترسی دارند.

رفع/توصیه: هدرهای HTTP Cache-Control باید مانند Cache-Control: no-cache، no-store Pragma: no-cache استفاده شود.

قطعه کد نمونه:

<متا http-equiv="حافظه پنهان-کنترل" محتوا="بدون حافظه پنهان, بدون فروشگاه, باید دوباره اعتبارسنجی" />
<متا http-equiv="پراگما" محتوا="بدون حافظه پنهان" />
<متا http-equiv="منقضی می شود" محتوا="0" />

12. قدرت رمزگذاری ناکافی

توضیحات: برنامه هایی که از اندازه کلید کمتر از 1024 بیتی برای رمزگذاری استفاده می کنند می توانند از طریق حملات brute force مورد سوء استفاده قرار گیرند.

رفع/توصیه: از اندازه کلید بیت نسخه بالاتر، 2048 بیت یا بزرگتر استفاده کنید.

13. تزریق CRLF (بازگشت کالسکه و تغذیه خط)

توضیحات: سوء استفاده های CRLF زمانی اتفاق می افتد که محتوای مخرب پس از کلیک کاربر ناآگاه بر روی یک پیوند مخرب در هدرهای پاسخ HTTP مرورگر قرار می گیرد. هکرها معمولا کدهای مخرب را از طریق برنامه وب/سرور به مرورگر کاربر تزریق می کنند و تشخیص گاه به گاه را دشوار می کنند.

رفع/توصیه: URL همه رشته ها را قبل از انتقال رمزگذاری کنید. اطمینان حاصل کنید که متاکاراکترهای پوسته و خاتمه دهنده های فرمان (به عنوان مثال، ; CR یا LF) قبل از انتقال از داده های کاربر فیلتر می شوند.

قطعه کد نمونه:

String author=request.getParameter(AUTHOR_PARAM);
کوکی کوکی=کوکی جدید("نویسنده"، ESAPI.encoder().encodeForURL(نویسنده))؛
cookie.setMaxAge(cookieExpiration);
response.addCookie(کوکی);

14. نقض مرز اعتماد

توضیحات: برنامه های کاربردی وب اغلب به اشتباه داده های قابل اعتماد و غیرقابل اعتماد را در ساختارهای داده یکسان ترکیب می کنند که منجر به حوادثی می شود که در آن داده های معتبر/فیلتر نشده مورد اعتماد/استفاده قرار می گیرند.

رفع/توصیه: اعتبارسنجی ورودی مناسب و رمزگذاری خروجی باید قبل از انتقال داده ها به مرزهای قابل اعتماد استفاده شود.

قطعه کد نمونه:

String sessionPolicyId=request.getParameter("id");
if(sessionPolicyId.matches("[0-9a-zA-Z_]+") {
session.setAttribute("sessionPolicyId",sessionPolicyId);
}

15. پیمایش دایرکتوری

توضیحات: با پذیرش ورودی های کاربر که مسیرها/نام های فایل مورد استفاده در عملیات سیستم فایل را کنترل یا تحت تأثیر قرار می دهند، برنامه های وب آسیب پذیر می توانند مهاجمان را قادر به دسترسی یا تغییر منابع سیستم محافظت شده کنند.

رفع/توصیه: یک لیست سفید از ورودی های داده قابل قبول که کاملا با مشخصات مطابقت دارد می تواند از سوء استفاده های پیمایش دایرکتوری جلوگیری کند.

قطعه کد نمونه:

ورودی رشته=request.getParameter("fileName");
اگر (ESAPI.validator().isValidFileName(زمینه رشته، ورودی رشته، بولین allowNull)){

فایل فایل=فایل جدید(ورودی);
}

16. تثبیت جلسه

توضیحات: در این موارد، برنامه های وب آسیب پذیر کاربران را بدون از بین بردن جلسات موجود مرتبط با کاربران مذکور احراز هویت می کنند. این به مهاجمان اجازه می دهد تا با ربودن جلسات فعال کاربران به حساب های آنها دسترسی داشته باشند.

رفع/توصیه: قبل از مجوز یک جلسه کاربر جدید، شناسه های جلسه موجود را از بین ببرید.

قطعه کد نمونه:

session.invalidate();
session=request.getSession(true);

17. استفاده از الگوریتم رمزنگاری پرخطر

توضیحات: برنامه های کاربردی وب با استفاده از الگوریتم های غیر استاندارد به طور ضعیفی رمزگذاری شده اند و به هکرها اجازه می دهند تا با استفاده از روش های brute force به راحتی به آن دسترسی پیدا کنند.

رفع/توصیه: هنگام ذخیره یا انتقال داده های حساس، از الگوریتم های رمزنگاری قوی و به روز برای رمزگذاری آن داده ها قبل از ارسال/ذخیره استفاده کنید.

قطعه کد نمونه:

MessageDigest md=MessageDigest.getInstance("SHA-256");
FileInputStream fis=جدید FileInputStream("c:\\loging.log");
بایت[] داده بایت=بایت جدید[1024];
int nread=0;
در حالی که ((nread=fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
بایت[] mdbytes=md.digest();

18. مدیریت اعتبارنامه

توضیحات: ذخیره رمزهای عبور در متن ساده به راحتی می تواند منجر به به خطر افتادن سیستم شود - به خصوص اگر فایل های پیکربندی/منبع زیر سوال باشند.

رفع/توصیه: از ذخیره رمزهای عبور در مکان هایی که به راحتی در دسترس هستند خودداری کنید. از هش های رمزنگاری شده به عنوان جایگزینی برای متن ساده استفاده کنید.

19. SQL تزریق Hibernate

توضیحات: Hibernate یک فریمورک ORM محبوب برای جاوا است - به این ترتیب، چندین روش را ارائه می دهد که امکان اجرای پرس و جوهای بومی SQL را فراهم می کند. مهاجمان معمولا از Hibernate برای اجرای دستورات SQL مخرب و ایجاد شده به صورت پویا سوء استفاده می کنند.

رفع/توصیه: اعتبارسنجی ورودی سمت سرور مناسب می تواند به عنوان یک دفاع اساسی برای فیلتر کردن شخصیت های خطرناک عمل کند. از دستورات آماده شده/رویه های ذخیره شده پارامتری می توان برای ارائه داده ها به عنوان متن قبل از پردازش یا ذخیره سازی استفاده کرد.

قطعه کد نمونه:

پرس و جو hqlQuery=session.createQuery("محصول را از سفارشات به عنوان سفارشات انتخاب کنید که در آن orders.id =?");
لیست نتایج=hqlQuery.setString(0, "123-ADB-567-QTWYTFDL").list();

20. خاموش کردن یا انتشار نامناسب منابع

توضیحات: خاموش شدن نامناسب منابع زمانی اتفاق می افتد که یک برنامه وب نتواند یک منبع سیستم را قبل از در دسترس قرار دادن برای استفاده مجدد آزاد کند. سپس می توان با تخلیه استخر منابع سرور، حمله انکار سرویس (Dos) را راه اندازی کرد.

رفع/توصیه: هر منبع ایجاد شده یا تخصیص یافته باید پس از استفاده به درستی منتشر شود.

قطعه کد نمونه:

سعی کنید {
Connection con=DriverManager.getConnection(some_connection_string);
}
گرفتن ( استثنا e ) {
log( e );
}
در نهایت {
if( stmt != null ) stmt.close
();
con.close() }

به طور خلاصه، 20 مورد ذکر شده در بالا رایج ترین آسیب پذیری های برنامه های وب هستند. در حالی که بسیاری از این موارد را می توان از طریق شیوه های کدنویسی ایمن تر اصلاح کرد، برخی ممکن است نیاز به شناسایی وصله های مربوط به فروشنده داشته باشند. این در نهایت بستگی به این دارد که چه فناوری ها، چارچوب ها و بسته های خاصی در برنامه وب شما استفاده می شود.

به راهی آسان تر برای کشف آسیب پذیری ها در وب اپلیکیشن خود نیاز دارید؟ UpGuard با استفاده از تست های مبتنی بر سیاست، می تواند به طور خودکار برنامه وب شما را برای پیکربندی نادرست و شکاف های امنیتی اسکن و نظارت کند.

اینفوگرافیک