如何绕过 Safari 的 XSS 审核器在 POST 上渲染远程 Flash 对象?

发布于 2024-11-07 16:35:26 字数 233 浏览 1 评论 0原文

我有一个表单,允许您嵌入 YouTube 视频,当它发布时,它会呈现 YouTube 视频。问题是 Safari(自 5.0 起)有一个 XSS Auditor,它会抛出以下消息:拒绝加载对象。在请求中找到的 URL:“http://www.youtube.com/v/ZO7EiX5TqLY?version=3”。

对于正常的 GET 后记来说,它工作得很好。有什么办法可以在不重定向的情况下解决这个问题吗?

I have a form that allows you to embed YouTube videos, and when it POSTs it renders the YouTube video. The problem is that Safari (since 5.0) has an XSS Auditor that throws this message: Refused to load an object. URL found within request: "http://www.youtube.com/v/ZO7EiX5TqLY?version=3".

It works fine for normal GETs afterwords. Is there any way to get around this without redirecting?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初心未许 2024-11-14 16:35:26

我在 #webkit 上使用 abarth 解决了这个问题:

Safari 5 正在尝试阻止 反射型 XSS 攻击,不允许嵌入出现在 POSTed 参数中。

我可以做两件事:

  1. 我可以发送 X-XSS-Protection: 0 标头,这表明我知道自己在做什么,并且可以自己防范 XSS。
  2. 我不能在参数中发送嵌入代码,这对我来说实际上是一个可行的选择,因为嵌入代码无论如何都会被后端删除。

I resolved this with abarth on #webkit:

Safari 5 is trying to prevent a reflective XSS attack, by not allowing embeds that appear in the POSTed params.

There are two things I can do:

  1. I can send the X-XSS-Protection: 0 header, which indicates that I know what I'm doing, and can protect against XSS myself.
  2. I can not send the embed code in a param, which is actually a viable option for me, as the embed codes are stripped by the backend anyways.
陈甜 2024-11-14 16:35:26

POST 规范指示重定向:

http://www.w3.org/Protocols /rfc2616/rfc2616-sec9.html

如果资源已创建
源服务器,响应应该是
201(已创建)并包含一个实体
它描述了状态
请求并引用新的
资源和 Location 标头(请参阅
第 14.30 节)。

对此方法的响应不是
可缓存,除非响应
包括适当的缓存控制或
使标头字段过期。然而,
可以使用 303(查看其他)响应
指示用户代理检索
可缓存资源。

既然您说它适用于后续的 GET 请求,这是否意味着您试图直接在 POST 响应中返回嵌入的对象?如果是这样,似乎违反了规范,XSS Auditor 可能就在这里。如果我误解了这个问题,你能澄清一下吗?

The spec for POST indicates a redirect:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

If a resource has been created on the
origin server, the response SHOULD be
201 (Created) and contain an entity
which describes the status of the
request and refers to the new
resource, and a Location header (see
section 14.30).

Responses to this method are not
cacheable, unless the response
includes appropriate Cache-Control or
Expires header fields. However, the
303 (See Other) response can be used
to direct the user agent to retrieve a
cacheable resource.

Since you said it works on subsequent GET requests, does that mean that you're trying to return the embedded object directly in the POST response? If so, seems against the spec, and the XSS Auditor might be in the right here. If I misunderstood the issue, can you clarify?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文