jQuery是一款廣泛應用于前端開發的JavaScript庫,但是在其中的某個版本中曾發現漏洞,這個版本就是jQuery 2.0.3。
<script src="jquery-2.0.3.js"></script>
這個漏洞被稱作Sizzle Selector Injection漏洞,它的原因是jQuery版本2.0.3及之前的版本中Sizzle這個CSS選擇器引擎存在問題。攻擊者可以利用這個漏洞插入惡意的CSS選擇器來讓jQuery執行不該執行的代碼。這種攻擊方式稱為CSS選擇器欺騙攻擊。
下面是一個利用這個漏洞的示例代碼:
<script> $(document).ready(function() { $( ".demo" ).click(function() { $( "#result" ).html( "Hello World!" ); }); $( ".demo")["constructor"]["prototype"]["init"] = function(e,c,r){ var f = e.split(",")[0]; return $(f,c,r); }; }); </script> <div class="demo">Click me</div> <div id="result"></div>
這段代碼會在點擊“.demo”元素時彈出“Hello World!”文字。但是,攻擊者在頁面中注入了惡意選擇器的代碼,使得當用戶點擊“.demo”元素時并不是執行上述代碼,而是執行惡意代碼,例如使窗口彈出廣告或者任意其他操作。
為了避免這種漏洞,開發者可以將jQuery升級到版本2.1及以上。如果不得不使用jQuery 2.0.3及之前的版本,可以使用安全的選擇器來減輕這種漏洞的風險,例如避免使用“,”分隔符。