2011-06-15 61 views
1

我使用fancybox在彈出窗口中顯示用戶生成標題的照片。而試圖獲得在彈出顯示逃脫標題,我注意到以下行爲:轉義標題屬性在jquery中變爲未轉義

console.log($("<a title=\"&lt;script&gt;alert('test')&lt;/script&gt;\">").attr('title')); 

輸出:<script>alert('test')</script>

console.log($("<p>&lt;script&gt;alert('test')&lt;/script&gt;</p>").html()); 

輸出:&lt;script&gt;alert('test')&lt;/script&gt;

console.log($("<p>&lt;script&gt;alert('test')&lt;/script&gt;</p>").text()); 

輸出:<script>alert('test')</script>

我的問題是,山雀le在彈出窗口中是通過調用obj.attr('title'),它返回未轉義的標題而不是轉義的標題。

如何在obj.attr('title')調用中獲得轉義標題?

回答

1

取代的&所有出現,如果你添加一個額外的實體層面到您的標題,這樣它應該工作:

$("<a title=\"&amp;lt;script&amp;gt;alert('test')&amp;lt;/script&amp;gt;\">").attr('title'); 

這取決於您的服務器端環境,您如何做到這一點,一個PHP示例:

$title = str_replace("&","&amp;",$title); 
+0

我的模板系統提供了方法,通過將字符「<", ">」,「&」和「」」爲‘<’,‘>’,‘&’和‘"’來逃脫標籤。在生成html頁面時,通過escape方法過濾title =「」內容,我認爲這樣做足夠安全。現在我需要做&的另一個轉義&我幾乎錯過了這一個,如果我讓它滑倒,這將是一個XSS安全保留。 – perlwle 2011-06-15 13:24:54

1

問題不在於,設置已經錯誤(實體將被瀏覽器取代)。
使用$().attr()設置標題:

$("<a/>").attr('title',"&lt;script&gt;alert('test')&lt;/script&gt;") 

..或用&amp;