哈Ha! 我向您介绍了Julie Marchant Fix或Kill自动安装的JavaScript吗?
理查德·斯托曼(Richard Stallman)的论文《 JavaScript陷阱》指出,人们运行的专有程序每天都会自动无声地自动安装到浏览器中。 实际上,他对这个问题轻描淡写。 大多数用户不仅每天仅通过浏览网络就运行专有程序,他们每天就运行数十甚至数百个此类程序。 JavaScript陷阱非常真实且多产。 人们认为,如果没有这些非标准的(通常是专有的)HTML扩展名,将侵犯与网站的合作,Web浏览器甚至没有提供明显的机会来禁用JavaScript。 有人认为禁用JavaScript只会导致混乱。
显然,我们需要解决这个问题。 但是,通过关注脚本是“琐碎的”还是免费的,Stallman先生错过了一个重要的观点:软件本身的自动静默安装是主要问题。 大部分软件都是专有的,这只是一个副作用。
为了回应Stallman先生的文章,为Firefox浏览器及其衍生产品LibreJS开发了一个扩展。 此扩展自动分析页面上的所有JavaScript以确定它是简单的还是免费的,并且如果满足以下条件之一,则脚本将被执行,否则将被阻止。 我感谢LibreJS项目及其正在尝试做的事情。 但是我认为LibreJS从根本上来说是解决问题的错误方法。
LibreJS现在失败了,因为它需要一种在任何地方都无法识别的格式,但是理论上可以在将来解决,所以让我们假设一切都井井有条。 假设LibreJS如此成功,以至于它迫使大多数Internet在自由许可证下发布脚本,并以LibreJS可以理解的格式描述许可证。
乍一看似乎很棒,但是由此可以得出结论,该软件仍然每天静静地安装在我们的浏览器中。 唯一的区别是LibreJS认为程序免费。
我不想低估确保所有程序都是免费的重要性。 但是,如果应第三方的要求将任何软件自动安装在我们的计算机上,则无法行使自由。 假定您希望所有这些JavaScript程序在计算机上执行,它们通常每天甚至可以检查它们的源代码,而这些JavaScript程序每天可以轻松创建数百个新脚本。
更糟糕的是,JavaScript无人值守安装系统只能临时安装软件以仅执行一次。 实际上,每当服务器更新发送到Web浏览器的JavaScript时,此更新就会传播给用户。 即使脚本是免费的,它似乎也具有内置的后门。
这与旋转的情况非常相似,从理论上讲,您可以自由控制程序的操作,但实际上会因环境而不能执行该操作。 仅凭理论控制是不够的。 还需要实际控制。 在JavaScript的情况下,这种缺乏控制力不是恶意意图的结果,而是网络浏览器粗心大意地假定用户想要执行网页可以提供的每个脚本的结果。 不一定是这种情况。 就像是每次阅读推荐使用Windows的文章时,还是在计算机上安装了Windows,或者博客中谈到Chrome的功能强大,都会导致Chrome自动安装在我的系统上。
那我们该怎么办? 我知道两种可能的解决方案。
解决方案1:修复JavaScript
第一个可能也是最明显的解决方案是更改Web浏览器有关JavaScript软件请求的行为。 我建议为了使系统可接受,必须满足以下所有条件:
- 浏览器应不断安装JavaScript代码,并且仅在用户以任何方式明确允许它时才安装。
- 浏览器应为用户提供安装任意脚本的机会,而不仅仅是网页请求的脚本。
- 除非用户指示应该更新JavaScript代码,否则浏览器不应自动更新JavaScript代码,并且用户应该能够选择此类更新的来源。
您会注意到,任何这些点都不包括自动许可证发现。 那么,用户如何在不手动检查每个源文件的情况下仅获得免费的JavaScript? 解决方案实际上非常简单:就像其他任何免费软件一样。 我相信Trisquel开发人员只能在存储库中包含没有恶意功能的免费程序。 顺便说一下,Trisquel开发人员可以保护用户免受恶意软件的侵害 ,无论它们是否为专有软件 ; LibreJS-不能。 同样,我们可以创建和维护免费JavaScript代码的存储库。
为此,已安装的JavaScript程序也应在请求它的所有网页上运行,而不仅仅是在一页上。 至于已经安装的JavaScript代码,可以通过获取已安装脚本的缩小版本的哈希值,然后以相同的方式在缩小后接收所请求脚本的哈希值,来确定其使用可能性。 如果哈希值不匹配,则可以检查脚本文件名是否完全匹配或部分匹配,并且可能会询问用户是否应使用这些脚本。 这对于用户浏览器中的某种数据库也很有用,它可以识别可以使用某些脚本的站点。
我相信这种方法将需要大量的精力,这可能就是LibreJS开发人员没有尝试这样做的原因。 可靠性的实现涉及不断变化的页面,这是无济于事的。
解决方案2。杀死JavaScript
当我在bug-gnuzilla邮件列表中建议解决方案1之类的答案时,其中一个答案指出存在一个更简单的解决方案:我们可以完全禁用浏览器中的JavaScript执行,而不是尝试修复JavaScript。杀死JavaScript)。 当然,我的意思是自动安装 JavaScript。 例如,使用JavaScript开发Firefox扩展没有错。 自定义脚本和扩展甚至可以设计为替换重要的专有JavaScript代码。
但是,这种解决方案并非没有问题。 尤其是,这需要进行巨大的社会变革,尽管要比LibreJS尝试做的要少。 取消支持JavaScript的浏览器可以在这方面提供帮助,但是从某种意义上说,没有JavaScript支持的浏览器将被认为是劣等的,尽管许多网站都需要脚本才能工作,这是一个问题。
实现此目标的中间步骤之一可能是支持JavaScript的浏览器,但默认情况下应禁用JS,从而为用户提供了一种在页面上临时启用JavaScript的简便方法。 因此,用户无需使用JavaScript就可以获得经验,但是仍然可以将JavaScript用于需要他的页面,而不会造成浏览器的不便。 用户甚至会有令人愉快的副作用-他们在Internet上的工作将变得更加流畅。 许多网站都有庞大的肿脚本,您只需禁用JavaScript就可以完全避免。
结论
这些方法中的每一个都有优点和缺点。
第一个解决方案可以立即为Diaspora和Reddit之类的网站提供良好的效果,这些网站需要JavaScript代码,但大多数都是免费的。 这可能不会导致Internet发生重大变化,但这对于工作来说不是必需的。 但是,这需要进行一些工作才能正确配置浏览器相对于JavaScript的行为,并且还有很多工作来维护免费JavaScript程序的存储库。
第二种解决方案与LibreJS目前正在尝试的解决方案非常相似,尽管规模更小。 这取决于Internet的变化:说服大多数Web开发人员停止使用JavaScript代码。 如果该解决方案有效,那么效果会令人印象深刻。 另一方面,此解决方案很容易失败,或者仅导致另一种新兴的在用户浏览器中自动安装软件的方法。
我不确定哪个更好,但是LibreJS既不是一个好的解决方案,也不是一个好的解决方法,甚至也不是朝着正确方向迈出的一步。 只要能够正确纠正JavaScript的免费浏览器可用,任何想要自由计算的人都应关闭浏览器中所有常规的JavaScript操作,即使代码是免费的,尊重用户自由的Web开发人员也应消除所有必需的JavaScript在他们的网站上。