2011-06-15 42 views
0

我使用fancybox(lightbox像js彈出庫)來顯示照片,它的標題在彈出。用戶使用提供的標題上傳照片。在html中顯示照片時,我也逃過了照片標題。 HTML標籤是簡單的:js在圖像標題中使用fancybox畫廊

<a href="/files/909221123.large.JPG" title="sample image &lt;script&gt;alert('test')&lt;/script&gt;"><img src="/files/909221123.medium.JPG"></a>

正如你可以看到,在標題中的JS標籤逃脫。然而,當它顯示在fancybox彈出窗口中時,它會無所謂地運行 - 我點擊提示js警報彈出窗口然後用照片彈出fancybox彈出窗口的照片。

這確實是一個XSS問題,但我認爲它是如此明顯,fancybox不應該有第一個這樣的問題。我在這裏做錯了什麼?以及如何解決它?

謝謝。

回答

0

Fancybox的聲音將該字符串視爲HTML而不是文本。

你可以破解插件。存在一個處理標題,例如代碼...

return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>' 

正如你所看到的,在時間title是存在的,它有它的實體解決。

否則,您可以刪除部分字符串,其中看起來像 HTML標記與正則表達式。

+0

寧可不直接破解插件.. 並不確定如果我可以編寫一個100%安全的正則表達式作爲逃脫的html也運行良好。 – perlwle 2011-06-15 05:33:04

+0

和應該逃脫HTML標記呈現在HTML ??? – perlwle 2011-06-15 05:37:47

+0

@perlwle我會進行更新。返回語句'title'中的 – alex 2011-06-15 05:43:39