我有一个Rails 3.0.x应用,它显示一个包含Yahoo Web Player的页面。播放器播放由Rails应用程序提供的音频文件,处理文件请求的控制器使用send_data发送mp3文件:
send_data content, :filename=>dsLabel, :type=>mimeType, :disposition => 'attachment'
(*)我也试过内联处理
这适用于Safari,IE和FF。然而,在Opera中你单击播放按钮并且音频从不播放,雅虎的代码被缩小并且有点难以确切地说出错误,但我已经得出结论,据我所知,这不是javascript问题。
关于该网站需要注意的一点是,当我在同一个网络上工作时,我们的DNS服务器会将该网站解析为10.x.x.x LAN IP,否则它会解析为公共IP。
在Opera中,如果我打开“首选项”并在Trusted Websites->Secure Internal Hosts
下添加主机名,则重新加载页面,音频播放正常。如果我将DNS更改为OpenDNS,它也可以正常播放。我似乎遇到了一个我不完全理解的Opera安全策略问题。
在我看来,虽然内部我的主机解析为局域网IP,一旦加载Opera认为它是一个公共站点,所以MP3将无法下载,但它也解析为局域网IP,所以它似乎没有像公共/私人分歧一样。
我希望Stackoverflow社区中的某个人能够更好地理解Opera安全性,这可以解释我在这里强制执行的策略。
答案 0 :(得分:2)
您可能遇到过“网络类型固定”政策。基本上Opera会尝试记住某个站点是否首先解析为公共或私有IP。
此策略旨在防止站点首先向您发送某些代码的攻击,然后重新配置自身以声明其IP地址是内部的。比方说,attack.example.com提供链接到attack.example.com/intranet/menu.js的页面,稍后当您再次访问attack.example.com时假装其IP是10.0.0.1,您的Intranet正在运行,并且您的Intranet也恰好引用了/intranet/menu.js文件。如果menu.js现在从缓存运行,它可以在Intranet站点上执行任何操作。攻击已经完成。
因此,Opera可能不会根据您当前连接的IP来应用安全策略,而是根据它首先看到的主机名解析的IP。很抱歉,这是一个相当模糊的州,但如果你有一些主机名可以解析为私人或公共地址,那么你只占很小的一部分; - )