جی کوئری 3.5 منتشر شد، آسیب پذیری XSS رفع شد

  • آخرین بروزرسانی در دوشنبه 20 آوریل 2020

تیمی ویلسون اخیرا نسخه جدیدی از جی کوئری را منتشر کرد. جی کوئری 3.5 آسیب پذیری XSS که در پارسر HTML جی کوئری پیدا شد را حل می کند. پلتفرم متن باز Snyk فعال در زمینه امنیت برآورد کرده که 84 درصد از وب سایت ها تحت تاثیر آسیب پذیری XSS جی کوئری قرار گرفته اند. از طرفی قرار است که سلکتور های وابسته به موقعیت در جی کوئری 4 به طور کامل حذف شوند و از همین رو در نسخه 3.5 برای مقدمه چینی، سلکتور های :even و :oddاضافه شده اند.

ماساتو کینوگاوا یک آسیب پذیری XSS در متد htmlPrefilter جی کوئری پیدا کرد؛ او مثالی را منتشر کرد که در آن یک صفحه هشدار در قالب یک چالش به صورت پاپ آپ را نشان می دهد. او توضیح می دهد که تابع html() جی کوئری متد htmlPrefilter() را صدا می زند که از regexp برای جایگزین تگ های از نوع XHTML با تگ هایی که در HTML کار کند، استفاده می کند.

با این کار، یک تگ بسته شده خودش تبدیل به یک تگ باز و بسته شده می شود. مثلا

<blah/>
<!-- converted to -->
<blah></blah>

با چنین اتفاقی کار های زیادی می توان کرد.

کد <style><style/>Elon; را در حالی فرض کنید که از innerHTML برای اضافه کردن آن به DOM استفاده شده است؛ DOM Tree که حاصل می شود به صورت زیر خواهد بود:

<style>
   <style/>Elon
</style>

اما با استفاده از html() جی کوئری، داستان کاملا فرق می کند. زمانی که همین کار را با html() می کنیم، نتیجه به صورت زیر می شود:

<style>
   <style>
</style>
Elon

تگ بسته <style/> با <style></style> جایگزین می شود که باعث می شود تگ <style> دوم به عنوان محتوای تگ <style> اول به حساب بیاید اما اتفاقی که برای عبارت Elon افتاد را ببینید که خارج از تگ <style> است و خارج از محتوای HTML افتاده است؛ در این صورت XSS اتفاق میافتد.

با اقدامی که برای حل این مشکل در جی کوئری 3.5 انجام شده، jQuery.htmlPrefilter حالا تابع شناساگر است و کدی که متکی به رفتار قبلی است حالا کار نمی کند. تیم جی کوئری توصیه می کند برای بازگشتن به رفتار قبلی از افزونه migrate جی کوئری استفاده کنید.

اگر بی چون و چرا نیاز به رفتار قبلی دارید، از آخرین نسخه افزونه Migrate جی کوئری استفاده کنید که در آن تابعی وجود دارد که jQuery.htmlPrefilter قدیمی را ارائه می کند. پس از فراخوانی افزونه می توانید jQuery.UNSAFE_restoreLegacyHtmlPrefilter() را فراخوانی کنید و جی کوئری دوباره مطمئن می شود که تگ های بسته مطابق با XHTML باشد.

جی کوئری یک کتابخانه کامل است و در بسیاری از وب سایت ها مورد استفاده قرار می گیرد. پلتفرم متن باز امنیت Snyk در گزارش وضعیت امنیت فریمورک های جاوا اسکریپت 2019 برآورد کرده که 84 درصد از تمام وب سایت ها ممکن است تحت تاثیر این آسیب پذیری XSS جی کوئری قرار گرفته باشند. جی کوئری در 79 درصد از 5,000 وب سایت برتر از نظر الکسا یافت می شود.

تمام سلکتور های وابسته به موقعیت (مثل :first یا :last ) در جی کوئری 4 به دلیل تعمیرات و بهینه سازی حذف خواهند شد. اکثر سلکتور های وابسته به موقعیت به جز :even و :odd دارای جایگزین بودند. جی کوئری 3.5 متد های جامانده را اضافه می کند. برای مثال به جای $("div:even"); می توان $("div").even(); را نوشت.

در جی کوئری 3.5 با توجه به وجود String.prototype.trim() در جاوا اسکریپت، jQuery.trim منسوخ شده است. در این نسخه همچنین یک سری باگ های دیگر حذف شده یک سری موارد دیگر منسوخ شده اند و تغییرات دیگری هم به وجود آمده که می توانید لیست کامل آن را در یادداشت های انتشار وب سایت جی کوئری ببینید. توسعه دهندگانی که به دنبال ارتقا هستند می باید از راهنمای ارتقا 3.5 کمک بگیرند یا اگر هنوز به جی کوئری 3 ارتقا نداده اند، از راهنمای ارتقا جی 3.0 کمک بگیرند. در هر صورت افزونه Migrate جی کوئری به توسعه دهندگان برای یافتن مشکلاتی که با سازگاری نسخه های مختلف جی کوئری با کد هایشان دارند، کمک خواهد کرد.

جی کوئری 3.5.0 در CDN و از طریق npm (با دستور npm install jquery@3.5.0) در دسترس است.

برای دنبال کردن نوشته های کاپ کد به کانال تلگرامی آن (cupcode_ir@) بپیوندید!

دیدگاه خود را بیان کنید

@