jQuery導致的XSS跨站漏洞


1.1. jQuery 1.6.1

1.6.1版本的jQuery代碼正則為:

quickExpr =/^(?:[^<]*(<[wW]+>)[^>]*$|#([w-]*)$)/,

此處正則表達式存在缺陷,導致產生Dom型XSS 漏洞。

1.2. jQuery 1.7.2

1.7.2版本的jQuery代碼正則為:

quickExpr =/^(?:[^#<]*(<[wW]+>)[^>]*$|#([w-]*)$)/,

1.3. jQuery 1.11.2

jQuery 1.11.3版本的jQuery代碼正則為:

rquickExpr =/^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/,

仍然可以被繞過:

1.4. jQuery 2.x

jQuery 2.x版本的jQuery代碼正則為:

rquickExpr =/^(?:#([w-]+)|(w+)|.([w-]+))$/,

通過調試即可發現 Chrome 未對 location.hash 部分進行 URL 編碼處理進入函數,而 Safari 會經過 URL 編碼進入函數。

rquickExpr =/^(?:#([w-]+)|(w+)|.([w-]+))$/,

依然可以使用html5 的一些特性,引發錯誤並 彈框:

1.5. 結論

目前最新版本的jQuery有2個版本,分別是1.11.3和2.1.4,其中1.11.3支持低版本IE瀏覽器,2.1.4的不支持低版本IE瀏覽器,但這2個版本的jQuery目前的正則表達式都無法完善的過濾危險字符,依然會引起DOM型的XSS跨站漏洞。

1.6. 安全建議

臨時解決方案:

暫時隱藏jQuery版本信息,避免被攻擊者識別出版本號;

為應用系統制定統一的、影響全局的危險字符黑名單,發現輸入中存在危險字符時直接返回固定的錯誤頁面。

正式解決方案:

等待jQuery發布新的修復版本后升級。

漏洞官方修復介紹:https://bugs.jquery.com/ticket/9521


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM