我有一个表单,允许您嵌入YouTube视频,当它发布时,它会呈现YouTube视频。问题是 Safari(从 5.0 开始)有一个 XSS 审核器,它会抛出以下消息:Refused to load an object. URL found within request: "http://www.youtube.com/v/ZO7EiX5TqLY?version=3".
它适用于正常的 GAT 后记。有没有办法在不重定向的情况下解决这个问题?
我在 #webkit 上用abarth
解决了这个问题:
Safari 5 试图通过不允许出现在 POST 参数中的嵌入来防止反射 XSS 攻击。
我可以做两件事:
- 我可以发送
X-XSS-Protection: 0
标头,这表明我知道我在做什么,并且可以自己防范XSS。 - 我无法在参数中发送嵌入代码,这对我来说实际上是一个可行的选择,因为无论如何嵌入代码都会被后端剥离。
POST 的规范指示重定向:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
如果已在 源站,响应应该是 201(已创建)并包含实体 它描述了 请求并引用新的 资源和位置标头(请参阅 第 14.30 节)。
对此方法的响应不是 可缓存,除非响应 包括适当的缓存控制或 使标头字段过期。然而, 可以使用 303(请参阅其他)响应 指示用户代理检索 可缓存的资源。
既然你说它适用于后续的GET请求,这是否意味着你正在尝试直接在POST响应中返回嵌入的对象? 如果是这样,似乎违反了规范,XSS 审核员可能在这里。 如果我误解了这个问题,你能澄清一下吗?