2010-09-23 53 views
0

我允許用戶在他們的頁面上嵌入視頻,但以防萬一我想過濾輸出。爲了呈現視頻,我從數據庫中檢索嵌入語句,但是當它被過濾時,它以原始代碼呈現。有沒有一種視頻友好的方式來過濾這樣的事情,或者有沒有人有任何建議以不同的方式來做到這一點?提前感謝您的任何建議。是否有可能過濾嵌入htmlspecialchars()的視頻

while ($row = $query->fetch(PDO::FETCH_ASSOC)) { 
$video= htmlspecialchars($row['video'], ENT_NOQUOTES, 'UTF-8'); 
} 

echo "$video"; 

在數據庫中,視頻將看起來像這樣的例子

<object width="464" height="368" id="669545" type="application/x-shockwave-flash" 
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" alt="Aqua Teen Hunger Force - Hand Banana Funny 
Videos"><param name="movie" value="http://embed.break.com/NjY5NTQ1"></param><param 
name="allowScriptAccess" value="always"></param><embed src="http://embed.break.com/NjY5NTQ1" 
type="application/x-shockwave-flash" allowScriptAccess=always width="464" height="368"></embed></ 
object><br><font size=1><a href="http://www.break.com/usercontent/2009/2/Aqua-Teen-Hunger-Force-Hand- 
Banana-669545.html" target="_blank">Aqua Teen Hunger Force - Hand Banana</a> - Watch more <a href="http:// 
www.break.com" target="_blank">Funny Videos</a></font> 

回答

1

一般來說,你應該htmlspecialchars()你將其插入到HTML的地步荷蘭國際集團用戶輸入。但在這種情況下,您已經擁有HTML,所以您無能爲力。

你不能有用地過濾嵌入式插件。如果您允許用戶指定一個任意的Flash文件或其他插件,那麼您已經有效地爲您提供了跨安全上下文的免費跨站點腳本訪問,並且沒有任何字符串限制可以解決這個問題。

如果您確實需要允許用戶提交任意Flash或其他<object>/<embed>代碼,則需要在單獨的安全上下文中託管該不受信任的代碼。通常情況下,您將主站點放在www.example.com上,幷包含至stuff.example.com,它們會掃描不受信任的<object>代碼。然後,當插件代碼試圖做一些敵對的事情時,至少它只會影響stuff.example.com而不會影響www.example.com上的任何真實web應用程序。

或者,您只能允許用戶發佈您信任的提供商的視頻內容,例如。 youtube.com。然後,您只需讓他們提交YouTube視頻ID,並自行構建<object>代碼,以指向該ID的網址。

+0

我喜歡第三種選擇,但如果他們發佈Flash或JavaScript內容到文本區域,無論如何,htmlspecialchars會阻止執行惡意代碼,如果您過濾輸出?是否有任何其他方式來過濾/防止跨站點腳本攻擊? – Scarface 2010-09-23 16:20:51

+1

是的,如果他們在輸入中輸入'

相關問題