编写特定于站点的扩展来替换站点的 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 (用于付款)
脚注
- 作者使用性别中立的第三人称单数代词和所有格形容词“perse”、“per”、“perself”和“pers”。