我想告诉你一些不要做的事情来改善你的网站。不要在你的网站上添加任何第三方脚本。
这听起来可能很极端,但在某个时候这本来是常识。在当今的现代网络上,这听起来像是来自戴着锡箔帽的阴谋论者的建议。但仅仅因为我偏执并不意味着他们没有企图获取你用户的数据。
我所要求的只是我们将第三方脚本视为第三方 Cookie。它们是一个错误。
浏览器现在开始阻止第三方 Cookie。Chrome 正在拖延,因为制造浏览器的同一公司也经营着广告业务。但即使是他们也无法抵挡潮流。第三方 Cookie 几乎完全用于跟踪。这从来都不是计划。
起初,网络上没有状态。客户端从服务器请求资源。服务器做出响应。然后他们都立即忘记了它。这使得构建购物车或登录变得困难。这就是我们获得 Cookie 的原因。
事后看来,Cookie 应该从一开始就限制为同源策略。这将解决身份验证和商业问题,而不会打开一个巨大的安全漏洞,该漏洞已被利用来跟踪人们从一个网站到另一个网站的移动。网络从没有状态到状态过多。
现在该漏洞终于被关闭了。但仅限于 Cookie。我希望第三方 JavaScript 也能得到同样的待遇。
当您将任何第三方文件添加到您的网站时——图像、样式表、字体——它都是跟踪的潜在媒介。但第三方 JavaScript 文件更进一步。它们可以执行任意代码。
请花一点时间考虑一下这其中的含义:您网站上的任何第三方脚本都允许其他人执行您网页上的代码。这令人震惊地不安全。
情况变得更糟。此受邀入侵者可以执行的一段代码是能够引入其他第三方脚本的能力。
您可能认为添加那个小小的分析脚本没有害处。或者那个小小的Google Tag Manager 代码段。毕竟,它只是一小段代码。但通过这样做,您已将钥匙交给了陌生人。现在他们正在欢迎所有他们可疑的熟人。
请求地图生成器是一个很棒的工具,用于可视化任何网页上加载的资源。尝试粘贴来自新闻媒体或杂志的有趣文章的 URL,这些文章是最近有人发送给您的。然后惊叹于通过原始页面上的一个微小的script
元素偷偷溜进的大量第三方脚本。
因此,我建议人们可以做的一件事来改善他们的网站是不添加第三方脚本。
说起来容易做起来难,对吧?特别是如果您正在处理一个目前依赖第三方跟踪来实现其商业模式的网站。但这种剥削性的商业模式不会改变,除非像我们这样的人愿意参与一场被动抵抗的运动。
我知道,我知道。如果您拒绝添加该第三方脚本,您的老板可能会说:“好吧,我会找别人来做。另外,你被解雇了。”
只有当每个人都同意做正确的事情时,这种策略才会奏效。我们需要互相支持。我们需要互相帮助。人们在工作场所互相支持的方式是通过工会。
所以我想我想要改变我对提出的问题的回答。
人们可以做的一件事来改善他们的网站是组建工会。
我已经相信了这一点,但是我仍然使用这项很棒的服务:https://polyfill.io
正确设置有点复杂,最终它可能会受益于与使用它的其他网站共享。
例如,它提供了我最近制作的这个网站:https://piercan.fr/
只是好奇:如果你不希望人们使用第三方 javascript,那么
能够分析行为以进行改进对于任何团队都至关重要。最好的网络分析供应商使用 Javascript,因此默认情况下,如果您想进行任何类型的分析,则必须加载第三方 Javascript。
所以如果这样的事情实际上是必需的,那么第三方 javascript 就是必需的?如果不是,我很想知道如何在没有此类服务的情况下有效地分析网络数据。
我喜欢这种呼吁,但我错过了细微差别
为什么将其限制为第三方脚本;第三方代码片段、样式表、图像、视频和其他文件类型呢?
为什么将其限制在安全性和性能上;可访问性或技术(验证)和法律合规性(例如,与 GDPR)呢?
第三方解决方案解决了哪些问题?
现实似乎是 a) 网络一直以来都在使用第三方嵌入,以及 b) 第三方嵌入一直以来都存在不足(技术质量、数据使用透明度)。
就我个人而言,我相信一条途径是对嵌入代码提出更多要求——使其易于使用,使其高质量,并确保其在数据处理方面精简且透明。(这是一条途径。)
然而,由于网络一直以来都在使用第三方嵌入,因此解决它们带来的各种问题的解决方案可能需要细微差别。
“这令人震惊地不安全。”
这是真的,前提是您不知道引用的内容是什么。
如果您知道,并且知道它的功能,那就可以了,我们有像 Subresource Integrity (SRI) 这样的工具来确保该代码不会更改。
此外,如果您担心第三方脚本引入另一个第三方脚本,我们有内容安全策略 (CSP) 来将我们将接受加载到我们的页面中的内容列入白名单。
可以使用第三方代码安全地使用。只是很难。
总而言之,我大体上同意你的观点——尽可能避免使用第三方脚本。
由于浏览器出于隐私原因执行“缓存分区”,因此浏览器缓存已被另一个站点填充而导致的性能提升没有机会。
并且联系第三方的域通常涉及 DNS 查找、TLS 握手等——这可能非常慢。预连接资源提示有所帮助,但仅此而已。
就我个人而言,我认为更不安全的是让用户(通常是营销人员)使用 GTM。我不断遇到这样的网站,在页面加载的后期,突然有一堆垃圾被 GTM 引入。
https://andrewwburns.com/2019/06/03/why-i-dont-like-google-tag-manager/
具有子资源完整性的跟踪脚本仍然是跟踪脚本。
令我惊讶的是,这里没有提到 CSP,它是解决此问题的绝佳解决方案。