在 CSS 样式表中使用协议相关 URL 的安全风险是什么?

信息安全 Web应用程序 脆弱性 网址 css
2021-08-28 20:39:19

我使用SonarQube对我的项目执行静态代码分析,它在我的一个 CSS 文件中检测到一个安全漏洞:

出于安全原因,不应使用与协议相关的 URL。

不合规代码示例

@font-face {
    src: url("//myfont");
}

合规解决方案

@font-face {
   src: url("https://myfont");
}

stylelint 相关规则


这两个链接都与安全性无关,而且我还没有找到滥用协议相关 URL 的漏洞。

此规则于20169 月添加

在 CSS 样式表中使用与协议相关的 URL 是否存在安全风险?

1个回答

您的问题链接到Paul Irish的博客文章,其中提到这现在被认为是一种反模式。(自 2017 年起)

为什么要//使用?

原因是您可以编写//mysite.com/some/resource它,它会解析为http://mysite.com/some/resourcehttps://mysite.com/some/resource,具体取决于该站点是使用 HTTP 还是 HTTPS 调用的。

当您的网站通过 HTTPS 提供服务时加载 HTTP 资源可能会出现问题,因为浏览器通常会抱怨网站加载混合内容。值得注意的是,IE6 会显示一个很大的错误消息,询问您是否真的确定是否要继续。

那么为什么不将所有内容都重定向到 HTTPS 呢?

因为早在 2010 年发表这篇博文时,HTTPS 被认为是昂贵的。不仅因为 Let's Encrypt 当时没有提供免费证书,还因为 HTTP 和 HTTPS 之间曾经存在相当大的性能差异。如今,情况不再如此,HTTPS 导致的开销可以忽略不计

如果我使用会发生什么//危险吗?

不是真的,但也没有理由使用它。今天的建议是在所有东西上使用 HTTPS。真的,除了重定向到 HTTPS 之外,没有任何借口可以提供纯 HTTP。当浏览器最终将 HTTPS 视为默认设置时,HTTP 就没有理由存在了。