视频和字幕·直接媒体下载器
Web 浏览器中同源策略和 CORS 的简短历史
· 背景
科尔斯 网络历史记录 安全
阻止浏览器工具自由读取其他站点文件的规则可以追溯到最早的脚本浏览器。这篇文章追踪了同源策略、XMLHttpRequest 和 CORS 标准,它们最终使受控的跨站点获取成为可能。
为什么浏览器拒绝将其刚刚收到的字节交给您自己的选项卡 - 几十年前规则的日常影响
浏览器可以显示远程文件,但拒绝将该响应正文提供给页面 JavaScript。明显的矛盾是导航和程序化跨域阅读之间的安全分离。
Direct Media Downloader 遇到该规则是因为它必须将块读入 Blob。本机保存链接可以在 Fetch 失败的情况下工作,因为它遵循不同的浏览器路径。拒绝保护浏览器中其他地方的 cookie 和 Intranet 资源,即使这个特定的下载程序故意省略其自己的调用中的凭据。即使此特定请求省略了凭据,边界也会保护同一浏览器中不相关的 cookie 和 Intranet 页面。
Netscape、JavaScript 和第一源规则 — 引发同源策略的安全问题
早期的网络脚本需要阻止一个网站通过访问者的环境访问来读取另一个网站的敏感页面。浏览器围绕起源组织边界。
历史细节因实现而异,因此实际继承最重要:方案、主机和端口为脚本可读资源定义信任区间。将源视为一个单元是一种工程边界,可以跨文档、脚本和网络 API 一致地强制执行。源分组提供了一个可执行的单元,浏览器引擎可以将其应用于文档、脚本、存储和网络响应。该模型并不完美,但为开发人员提供了可预测的默认设置,而不是不受限制的环境权限。
XMLHttpRequest 和隔离的 Web — 脚本化请求如何继承规则以及混搭为何举步维艰
XMLHttpRequest 启用后台 HTTP 工作,但保留来源限制。这使得同站点应用程序变得有用,而跨站点混搭则需要合作或服务器中介。
通用客户端覆盖会破坏保护。拥有目标的服务器需要一种方式来表达哪些外部源可以读取选定的响应。服务器中继成为常见的解决方法,但它们将信任、带宽和请求伪造风险转移到浏览器沙箱之外的基础设施上。中继解决方法将带宽、信任和服务器端请求伪造风险转移到客户端沙箱之外,而不是消除该策略。当有意部署这些中介机构时,它们需要自己的安全、隐私和滥用控制。
CORS 标准 — 访问控制标头如何让服务器在不放松默认设置的情况下选择跨源读取
CORS 通过浏览器解释的 HTTP 响应标头提供这种协作。 `Access-Control-Allow-Origin` 可以授权请求来源,或者在适当的无凭据情况下,授权更广泛的受众。
该机制不会全局禁用同源策略。它向主机选择在协议下公开响应的响应授予范围内的读取访问权限。浏览器可以根据协议规则缓存预检结果,因此审核不应从一条热跟踪中推断出“从未发生过策略检查”。这保留了默认隔离,同时允许资源所有者为选定的调用者和方法发布故意的异常。
预检、简单请求和不透明响应 — 这些词汇解释了大多数下载失败
一些跨源请求非常简单,不需要预检;其他人首先发送 OPTIONS 来询问是否允许方法和标头。预检是协商,而不是实际的媒体传输。
不透明响应源自 no-cors 模式,并隐藏脚本中的状态、标头和正文。 ToolAcre 不选择该模式,因为不可读的正文无法成为预期的可保存 Blob。 CORS 错误可能与成功的服务器端请求共存,这进一步说明了应用程序失败并不意味着源端没有收到任何信息。缓存的预检决策可以改变一个温暖跟踪中出现的内容,因此历史上没有 OPTIONS 并不能证明协商从未存在过。
CORS 对于纯浏览器下载器意味着什么 — 主机决定,工具无法覆盖,诚实地对待这一点才是正确的回应
对于此下载器,主机决定 HEAD 和 GET 响应是否可读。 ToolAcre 无法代表主机附加允许来源响应标头,并且它不会通过其自己的来源中继正文。
该错误结合了 CORS 和网络可能性,因为 Fetch 在某些故障中故意保留细粒度信息。 DevTools 向访问者展示的内容可能比应用程序代码接收到的更多。主机操作员应仅授权预期的来源、方法和标头,然后验证其确切的生产响应,而不是依赖于本地配置意图。阻塞读取可能与接收请求的服务器共存,这就是为什么接口永远不会将应用程序故障与无联系等同起来。
要点:一条即使惹恼你也能保护你的规则——直接媒体下载器如何在其中而不是围绕它工作
该规则即使在阻止合法文件传输时也能保护用户。希望浏览器应用程序读取公共媒体的主机可以配置适当的 CORS 响应;不通过此脚本路径仍然无法访问的一个。
直接媒体下载器在该模型内工作:本地验证、公开请求、解释拒绝并建议在合适的地方进行本机保存。它不会将浏览器安全边界转变为绕过问题。了解这一历史会将任意浏览器敌意造成的错误转变为默认拒绝跨站点读取模型的可见后果。原始所有者应该测试预期方法的确切生产标头,而不是仅仅依赖仪表板配置。