编写特定于站点的扩展来替换站点的 JavaScript 代码

许多网站通过向用户的浏览器发送非自由 JavaScript 程序来损害用户的自由。我们邀请志愿者开发免费的浏览器扩展程序,以替换特定站点发送的 JavaScript(请参见下面的列表)。

我们对非自由 JS 代码问题的第一个反应是开发 LibreJS,它使基于 Firefox 的浏览器能够检测和阻止该代码。这可以保护我们免受运行站点非自由 JS 程序的影响,但不会使站点真正发挥作用。正如我们在此处提出的那样,为其编写扩展程序将实现这一目标。它还将避免直接从其他人的网站运行软件所固有的风险。

我们也可以通过说服网站管理员来纠正他们的站点,使其在没有 JavaScript 代码的情况下也能正常运行来解决问题,但说服他们被证明非常困难,因为他们大多不理解这个问题,更不用说关心它了。也许建议他们的站点使用这些扩展程序会说服他们关注支持非 JavaScript 访问。

因此,我们邀请志愿者选择一个站点并编写一个浏览器扩展程序,以使该站点正常运行,假设 LibreJS 阻止了该站点发送的非自由 JavaScript。要了解如何操作,您可以查看已经存在的站点扩展程序示例

首先要做的是简要查看站点上 JavaScript 文件的许可证。其中一些实际上可能是自由软件。如果该站点发送的某些 JS 代码是自由的,您可以将其包含在您的扩展程序中,并根据需要进行更改。

接下来,检查站点是否发布了 API。如果是这样,最好使用 API 进行通信(如果可以完成这项工作)。否则,您需要使用浏览器调试工具来找出 JavaScript 代码发送到服务器的数据和命令 - 实际上是其未记录的 API。

避免侵犯站点自己的 JavaScript 代码版权的方法是不研究该代码。任何部分都不要,甚至一次也不要。如果您没有阅读代码,那么您就没有复制任何代码。只看许可证。

这些扩展程序应该是诚实的 - 它们不应该“作弊”。如果站点的 JavaScript 要求用户提供信息并发送信息,则扩展程序应要求用户提供该信息并发送信息。如果站点要求 per (1) 选中一个复选框以同意 XYZ,则扩展程序应要求 per 选中一个复选框以同意 XYZ。扩展程序应忠实地传递用户输入的任何响应。如果站点发送一个 cookie,则扩展程序应按照浏览器 cookie 设置处理它。

通过发送给用户的 JS 代码来实现真正的安全是不可能的,但无论该站点为实现类似安全性的功能而采取什么措施,扩展程序都应忠实地执行。特别是,如果站点要求用户回答问题以证明 per 本身不是机器人,则扩展程序应向 per 显示相同的问题,获取答案并发送,从而使 per 能够证明 perse 是人类。

Jeff Carpenter 的 librecaptcha 如果站点发送验证码,则可能会有用。我们将启动一个将其转换为 JS 的项目,并且我们需要志愿者来完成这项工作,因此如果您有兴趣提供帮助,请写信给我。

同时,如果站点的 JS 代码偷偷收集信息,那么阻止这种窥探是值得称赞的。一个想法是询问用户要返回什么答案 - 例如,“该站点正试图查找您的位置。您想告诉它什么?” 但最好避免频繁或重复地询问用户。

当您有一个可用的扩展程序时,请将副本通过邮件发送到 GNU 项目,地址为<[email protected]>。如果您可以忍受运行非自由软件来执行此操作,您也可以将其注册到 Firefox 的扩展程序列表中。

我们已经建立了一个邮件列表,js-extensions-discussion,您可以在其中与其他开发扩展程序的人员进行交流。

一旦一切顺利,我们希望建立一个 savannah.gnu.org 存储库,我们将在其中放置正在工作的扩展程序。为此,我们需要一两个志愿者来管理它。我们预计这项任务不会花费太多时间;有两个人的原因是出于冗余考虑。

我们还可以有一个 Savannah 项目,您可以(如果愿意)使用它来开发扩展程序;这也需要志愿者来负责。

以下是一些关于为之编写扩展程序的站点建议。(有些是商业的,有些不是 - 这种区别对于这个问题并不重要。)但是,如果其他站点对您更感兴趣,那么请随心所欲。

用于访问信息和出版物的站点

最初的目标是处理匿名访问。处理登录和登录访问超出了短期职责范围。

  • accuweather.com (用于查看其天气信息)
  • pubmed.ncbi.nlm.nih.gov (用于下载论文)
  • groups.google.com (用于查找和查看群组中的帖子)
  • tripadvisor.com (至少显示餐厅的完整菜单)
  • blogger.com (用于查看博客)
  • britishmuseum.org/collection (用于查看馆藏)
  • pdr.net (用于查看有关药物的信息)
  • reiseauskunft.bahn.de (至少用于查看火车时刻表)
  • rgs.org/about/our-collections/online-exhibitions (用于查看展览)
  • worldcat.org (用于查找书籍)

    例如,请参见 GNU Emacs 手册的此条目。请注意该页面上“在图书馆中查找副本”的标题。在不运行专有 JavaScript 的情况下,该标题下的唯一内容是一个加载微调器 GIF 和文本“正在查找保存此项目的图书馆…”给定图书的实际图书馆可用性信息缺失。

  • scribd.com (用于阅读文本)
  • soundcloud.com (用于收听音频)
  • documentcloud.org (用于查看文档)
  • bandcamp.com (用于收听或下载音乐)
  • manualslib.com (用于下载手册)
  • npr.com (用于收听 - 尝试使用其 API)
  • nasa.gov (用于查看出版物,包括照片和视频)
  • reddit.com (至少用于阅读)。目前,您可以通过使用 old.reddit.com 来做到这一点。

请愿书签名站点 (允许用户签名)

  • freedomunited.org (似乎“成功”,但没有确认返回)
  • sumofus.org (多年前的旧扩展程序不再起作用)
  • change.org (警告,此站点的 JS 非常复杂)
  • afsc.org
  • act.ran.org
  • coworker.org
  • defenders.org
  • earthjustice.org
  • amazonwatch.org
  • signherenow.org
  • moveon.org
  • publiccitizen.salsalabs.org
  • action.splcenter.org
  • secure.everyaction.com
  • amnesty.org
  • addup.sierraclub.org
  • ucsusa.org
  • engage.drugpolicy.org
  • engage.us.greenpeace.org

其他类型的站点

  • house.gov (用于查看页面和向代表发送邮件)
  • whitehouse.gov (用于与白宫和网站管理员沟通)
  • 在各个网站中找到的 Disqus 评论 (用于发布评论)
  • regulations.gov (用于评论拟议的美国法规)
  • surveymonkey.com (用于回答调查)
  • coworker.org/start-a-petition (用于发起请愿书)
  • wetransfer.com (理想情况下用于上传和下载,但仅下载将是良好的第一步)
  • stripe.com (用于为其他站点输入付款)

人们以这种方式处理过的站点

  • docs.google.com (用于下载文档)
  • pay.gov (用于注册 DMCA 联系人)
  • rsf.org (用于签署请愿书)
  • theonion.com (用于查看图像和音频)
  • goteo.org (用于付款)

脚注

  1. 作者使用性别中立的第三人称单数代词和所有格形容词“perse”、“per”、“perself”和“pers”。