我運行一個顯示用戶生成的 SVG 的網站。它們是不受信任的,因此需要對它們進行沙盒處理。
我目前使用<object>元素嵌入這些 SVG。(與 不同<img>,這允許加載外部字體。與使用 不同<iframe>,將<object>大小調整為 SVG 的內容大小。請參閱此討論。)
但是,我不知道這些 SVG 在使用<object>. <iframe>權限模型相當清晰,例如<iframe sandbox="allow-scripts">禁止運行腳本以外的所有內容。但是<object>元素的沙盒/權限模型是什么?
- 當我使用 嵌入頁面
<object>時,該頁面默認可以做什么?例如,它可以訪問哪些 cookie?和<iframe>沒有sandbox屬性的一樣嗎? - 在同一個域上托管用戶內容 SVG 有什么影響?我應該改為托管它們
foobarusercontent.com嗎? - 標簽是否支持屬性
<object>的等價物?sandbox還有另一種設定權限的方法<object>嗎? - 哪些規范描述了安全模型
<object>?
uj5u.com熱心網友回復:
當我使用 嵌入頁面
<object>時,該頁面默認可以做什么?例如,它可以訪問哪些 cookie?和<iframe>沒有沙箱屬性的一樣嗎?
是的(至少在某些瀏覽器中)。該物件可以訪問與包含它的來源相同的 cookie(但不能訪問包含它的來源)。
您可以使用 svg 檔案對此進行測驗:
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="110">
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
<script>alert(document.cookie)</script>
</svg>
您可以包括:
<script>document.cookie="test=test";</script>
<object data=./x.svg></object>
這將在 Firefox 中起作用(但在 Chrome 中不起作用,這顯然會阻止物件中的 JavaScript;盡管我不確定是否記錄了這種行為,并且出于安全目的我不會依賴它)。
如果該data屬性參考了不同的域,您將無法訪問嵌入頁面的 cookie(通過top或parent; 至少在 firefox 中)。
在同一個域上托管用戶內容 SVG 有什么影響?我應該改為托管它們
foobarusercontent.com嗎?
是的,這會將用戶的操作限制在來源foobarusercontent.com(可能適合也可能不適合您的使用)。
標簽是否
<object>支持沙盒屬性的等效項?還有另一種設定權限的方法<object>嗎?
據我所知(另請參閱mozilla,它沒有列出任何相關標簽)。
哪些規范描述了安全模型
<object>?
我不知道這個標準。因此,在將用戶提供的資料嵌入到object. 在指定域上托管資料是個好主意。決議資料并過濾惡意(與javascript相關的)標簽和屬性也很好(如果可以接受的話)。確保用戶可以在該域上運行 JavaScript 是可接受的(即沒有身份驗證 cookie;我也不允許將 .js 檔案上傳到域,因為它會允許安裝服務作業者,這將允許攻擊者登錄用戶訪問的 URL,因此可能會泄露域上托管的(私人)檔案)。
uj5u.com熱心網友回復:
查看 html 規范,似乎無法設定沙盒屬性。
HTML 規范
下面是一些如何使用物件的示例。
例子
根據 Mozilla 的說法,在 whatwg 的郵件串列中討論了添加沙盒屬性物件。
參考討論提及
據此,iframe 標簽似乎自 2008 年 5 月以來就已存在。從那天起,我一直在查看郵件串列,但我還沒有找到關于物件沙盒的討論。
iframe 添加了討論
這是已歸檔的郵件串列。
whatwg 郵件串列存檔
我認為您應該考慮在此處與 WhatWG 聊天以獲取更多資訊。
WhatWG 聊天
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438299.html
上一篇:為什么Quarkus忽略我的HttpAuthenticationMechanism而不是我的ContainerRequestFilter?
