<object> 元素 运行 在哪个沙盒中?这个沙箱可以配置吗?
What sandbox does an <object> element run in? Can this sandbox be configured?
我 运行 一个显示用户生成的 SVG 的站点。它们不受信任,因此需要对其进行沙盒处理。
我目前使用 <object>
元素嵌入这些 SVG。 (与 <img>
不同,这允许加载外部字体。与使用 <iframe>
不同,<object>
调整大小以适应 SVG 的内容大小。See this discussion.)
但是,我不知道这些 SVG 在使用 <object>
时是否被适当地沙盒化了。 <iframe>
权限模型相当清晰,例如<iframe sandbox="allow-scripts">
禁止除 运行ning 脚本之外的所有内容。但是 <object>
元素的 sandbox/permission 模型是什么?
- 当我使用
<object>
嵌入页面时,默认情况下该页面可以做什么?例如。它可以访问哪些cookie?它与没有 sandbox
属性的 <iframe>
相同吗?
- 在同一域中托管用户内容 SVG 有什么影响?我应该改为将它们托管在
foobarusercontent.com
上吗?
<object>
标签是否支持 sandbox
属性的等效项?是否有另一种方法来设置 <object>
的权限?
- 哪些规范描述了
<object>
的安全模型?
查看 html 规范,似乎无法设置沙盒属性。
下面是一些如何使用 object 的例子。
根据 Mozilla 的说法,whatwg 的邮件列表上曾讨论过添加沙箱属性对象。
Reference to discussion mention
据此看来,iframe 标记自 2008 年 5 月以来就已存在。从那天起我一直在浏览邮件列表,但我还没有找到关于对象沙盒的讨论。
这是已存档的邮件列表。
我认为您应该考虑在此处与 WhatWG 聊天以获取更多信息。
When I embed a page using <object>
, what can that page do by default? E.g. what cookies can it access? Is it the same as an <iframe>
without the sandbox attribute?
是的(至少在某些浏览器中是这样)。该对象可以访问与包含它的来源相同的 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 中是这样).
What are the implications of hosting the user content SVGs on the same domain? Should I instead host them on foobarusercontent.com
?
是的,这会将用户的操作限制在原点 foobarusercontent.com
(可能适合也可能不适合您的使用)。
Does the <object>
tag support an equivalent of the sandbox attribute? Is there another way to set permissions for an <object>
?
据我所知(另见 mozilla,其中未列出任何相关标签)。
What specifications describe the security model for <object>
?
我不知道这方面的标准。因此,将 user-supplied 数据嵌入 object
时我会非常小心。将数据托管在指定域上是一个好主意。解析数据并过滤恶意 (javascript-related) 标签和属性也很好(如果可以接受的话)。请确保用户可以在该域上 运行 JavaScript 是可以接受的(即没有身份验证 cookie;我也不允许将 .js 文件上传到该域,因为它会允许安装 serviceworkers ,这将允许攻击者记录用户访问的 URL,从而可能泄露域上托管的(私人)文件)。
我 运行 一个显示用户生成的 SVG 的站点。它们不受信任,因此需要对其进行沙盒处理。
我目前使用 <object>
元素嵌入这些 SVG。 (与 <img>
不同,这允许加载外部字体。与使用 <iframe>
不同,<object>
调整大小以适应 SVG 的内容大小。See this discussion.)
但是,我不知道这些 SVG 在使用 <object>
时是否被适当地沙盒化了。 <iframe>
权限模型相当清晰,例如<iframe sandbox="allow-scripts">
禁止除 运行ning 脚本之外的所有内容。但是 <object>
元素的 sandbox/permission 模型是什么?
- 当我使用
<object>
嵌入页面时,默认情况下该页面可以做什么?例如。它可以访问哪些cookie?它与没有sandbox
属性的<iframe>
相同吗? - 在同一域中托管用户内容 SVG 有什么影响?我应该改为将它们托管在
foobarusercontent.com
上吗? <object>
标签是否支持sandbox
属性的等效项?是否有另一种方法来设置<object>
的权限?- 哪些规范描述了
<object>
的安全模型?
查看 html 规范,似乎无法设置沙盒属性。
下面是一些如何使用 object 的例子。
根据 Mozilla 的说法,whatwg 的邮件列表上曾讨论过添加沙箱属性对象。
Reference to discussion mention
据此看来,iframe 标记自 2008 年 5 月以来就已存在。从那天起我一直在浏览邮件列表,但我还没有找到关于对象沙盒的讨论。
这是已存档的邮件列表。
我认为您应该考虑在此处与 WhatWG 聊天以获取更多信息。
When I embed a page using
<object>
, what can that page do by default? E.g. what cookies can it access? Is it the same as an<iframe>
without the sandbox attribute?
是的(至少在某些浏览器中是这样)。该对象可以访问与包含它的来源相同的 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 中是这样).
What are the implications of hosting the user content SVGs on the same domain? Should I instead host them on
foobarusercontent.com
?
是的,这会将用户的操作限制在原点 foobarusercontent.com
(可能适合也可能不适合您的使用)。
Does the
<object>
tag support an equivalent of the sandbox attribute? Is there another way to set permissions for an<object>
?
据我所知(另见 mozilla,其中未列出任何相关标签)。
What specifications describe the security model for
<object>
?
我不知道这方面的标准。因此,将 user-supplied 数据嵌入 object
时我会非常小心。将数据托管在指定域上是一个好主意。解析数据并过滤恶意 (javascript-related) 标签和属性也很好(如果可以接受的话)。请确保用户可以在该域上 运行 JavaScript 是可以接受的(即没有身份验证 cookie;我也不允许将 .js 文件上传到该域,因为它会允许安装 serviceworkers ,这将允许攻击者记录用户访问的 URL,从而可能泄露域上托管的(私人)文件)。