jQuery.append()、jQuery.html()存在的XSS漏洞


使用jQuery.append()、jQuery.html()方法時,如果其中內容包含<script>腳本而沒有經過任何處理的話,會執行它。

簡單的示例代碼如下:

 

1 var xssStr = '<script>console.log(1)</script>';
2 $('#test').html(xssStr);

 

控制台會打印出“1”。

同樣的情況也存在於jQuery.append(),因為jQuery.html()內部也是調用jQuery.append()。

既然會存在執行<script>腳本的情況,那么就會有xss風險。

解決辦法也很簡單,將需要作為參數的字符串進行轉義:

 

var xssEscapeStr = xssStr.replace(/</g, '&lt;').replace(/>/g, '&gt;');

 

這樣輸出在頁面上的只是單純的一段<script>字符串,並未執行。

 

但這並不是jQuery的一個bug,查看jQuery源碼,jQuery.append()對於<script>的處理似乎是有意為之。

jQuery.append()等方法在設計的初衷就考慮到了允許執行其中的腳本,所以,jQuery不建議使用如URL、cookie、input輸入等內容作為append()的參數。

如果實在有需求,那就轉義吧。


免責聲明!

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



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