我已經閱讀了有關的相關問題div contenteditable, XSS,但其答案並沒有強調關於XSS的contenteditable安全問題。特別是關於意外(與內部跨站腳本相比)。當然,我知道我應該清理用戶輸入服務器端。HTML5的contenteditable屬性應該是XSS安全嗎?
TL.DR.:我可以肯定的是,用戶並不突出風險引入一些外部腳本(即通過從剪貼板粘貼的數據。)通過頁面元素被設置contenteditable
?規範是否確保粘貼到contenteditable的任何標記在插入到DOM之前都已經過消毒處理?
我注意到,在我試驗了兩種主要的瀏覽器,鉻/ Chrome和Firefox,這似乎是不可能的意外插入活性元素到contenteditable
標籤。
- 用戶複製DOM元素從一個網頁上的選擇和它們插入
contenteditable
元素在其他網站上:對於這樣的斯瓦特插入我會想到是例如一個例子。 - 用戶在(在Linux命令行上)
echo "<b onclick='alert("XSS");'>click me</b>" | xclip -t text/html -selection "clipboard"
並將其粘貼到contenteditable
中。
一種有源元件將是類似的東西:
- 包含含有與內聯處理程序如
onclick="alert(\"XSS\");"
- 包含JavaScript的HREF諸如HTML的標記元素一個
<script>
- HTML標記的HTML標記
<a href="javascript:alert(\"XSS\")"> click me </a>
現在我的問題是,看到contenteditable似乎有點安全,沒有任何正常的XSS矢量被粘貼到,如果這是由設計?
我看過一些specs/refs/whatever在那裏既沒有明確提到contenteditable
應防止任何有源元件被插入到頁面的DOM,無論它會被允許。這讓我懷疑是否應該使用contenteditable功能,因爲我不想冒一些外部JavaScript被插入contenteditable
的風險。回答這個問題的核心是contenteditable
這個XSS安全。
更新 與此相反的contenteditable
屬性相似特徵文件designMode
,似乎是特異性的(見https://www.w3.org/TR/2008/WD-html5-20080610/web-browsers.html#designModeScriptBlocked)有關的javascript被停用(因此防止XSS)。
UPDATE 2 最近的參考/規格上MDN引用是https://html.spec.whatwg.org/multipage/interaction.html#contenteditable 是奇怪淡漠任何保證contenteditable
提供到不經由漿料引入的惡意的JavaScript。
只要你在服務器端清理輸入,我不明白爲什麼有人在'contenteditable'中粘貼JavaScript就是一個問題。任何人都可以打開開發工具並在頁面上執行任何可能足以應對XSS攻擊的JavaScript(如果服務器端未設置爲防止此類攻擊)。 –
@DeepakKamat我想(假設用戶已經登錄並且有一定的權限來刪除內容),如果粘貼一個惡意腳本會繼承這個特權,我會認爲這是有問題的。你打算說什麼?此外,我假設XSS安全還會覆蓋用戶數據(如他的輸入數據)的安全性,如果可能,通過'contenteditable'可能會將惡意腳本發送給惡意第三方。當然,它的服務器是不妥協的,但在我的理解中,攻擊用戶帳戶/數據的XSS不好,因此我擔心 – humanityANDpeace
爲什麼從9年半前閱讀規格而不是當前規格? – BoltClock