【问题标题】:What can go wrong with scripts that have no protocol in their src URL?src URL 中没有协议的脚本会出现什么问题?
【发布时间】:2013-04-03 01:39:15
【问题描述】:

httphttps 协议提供的脚本的 src URL 中省略协议是否完全安全?

例如,Google CDN 上的 jQuery 代码可以这样访问:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Facebook 和 jQuery 建议开发人员在脚本标签中使用没有协议的源代码。他们的 CDN 服务于 HTTP 和 HTTPS 协议,因此如果其中包含脚本的页面以 HTTP 或 HTTPS 提供,它将获取具有匹配协议的脚本。这是这种做法的好处。

这有什么问题吗?我最关心的是安全性。

【问题讨论】:

    标签: javascript security cross-domain xss


    【解决方案1】:

    从脚本的 src URL 中省略协议是否完全安全? 通过 http 和 https 协议提供服务?

    是的。

    当使用network-path reference 时,当浏览器通过HTTPS 查看页面时,浏览器将自动请求使用https: 协议的文件,否则它将使用http: 请求文件。

    但是,在本地使用network-path reference查看文件时,浏览器会使用file:协议请求文件。

    这里有更多信息:RFC 3986。它没有提到安全性,但行为的性质确保根据需要选择 https/http。

    引用:

    4.2.相对参考

    相对引用利用分层语法
    (第 1.2.3 节)表示相对于名称空间的 URI 引用 另一个分层 URI。

      relative-ref  = relative-part [ "?" query ] [ "#" fragment ]
    
      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty
    

    相对引用所引用的 URI,也称为 目标 URI,通过引用解析获得 第 5 节的算法。

    以两个斜杠字符开头的相对引用是 称为网络路径参考;这种引用很少使用。 以单个斜杠字符开头的相对引用是
    称为绝对路径引用。一个相对参考
    不以斜线字符开头的称为相对路径引用。

    包含冒号字符的路径段(例如,“this:that”) 不能用作相对路径引用的第一段,如
    它会被误认为是方案名称。这样的段必须是
    前面有一个点段(例如,“./this:that”)以构成一个相对-
    路径参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2010-11-02
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多