撰寫特定網站擴充套件以取代網站的 JavaScript 程式碼

許多網站透過將非自由 JavaScript 程式傳送到使用者的瀏覽器,損害使用者的自由。我們邀請志願者開發自由瀏覽器擴充套件,以取代特定網站傳送的 JavaScript(請參閱下方的列表)。

我們針對非自由 JS 程式碼問題的第一個回應是開發 LibreJS,它使基於 Firefox 的瀏覽器能夠偵測並封鎖該程式碼。這保護我們免於執行網站的非自由 JS 程式,但不會使網站實際運作。如同我們在此提出的,為其撰寫擴充套件將能達成此目標。這也能避免直接執行來自他人網站的軟體所固有的風險。

我們也可以透過說服網站管理員修正他們的網站,使其在沒有 JavaScript 程式碼的情況下也能運作來解決問題,但說服他們證明非常困難,因為他們大多不理解這個問題,更不用說關心它了。或許建議在他們的網站上使用這些擴充套件會說服他們注意支援非 JavaScript 的存取。

因此,我們邀請志願者選擇一個網站並撰寫瀏覽器擴充套件,以使該網站能夠運作,假設 LibreJS 封鎖了該網站傳送的非自由 JavaScript。為了瞭解如何做到這一點,您可以查看現有網站擴充套件的範例

首先要做的是簡要查看網站上 JavaScript 檔案的授權條款。其中一些實際上可能是自由軟體。如果網站傳送的某些 JS 程式碼是自由的,您可以將其包含在您的擴充套件中,並根據需要進行更改。

接下來,檢查網站是否發布了 API。如果有的話,如果 API 可以完成工作,最好使用 API 進行通訊。否則,您需要使用瀏覽器偵錯工具來找出 JavaScript 程式碼傳送到伺服器的資料和指令——實際上是其未公開的 API。

避免侵犯網站自身 JavaScript 程式碼著作權的方法是不研究該程式碼。不要研究它的任何部分,即使一次也不要。如果您沒有閱讀該程式碼,那麼您就沒有複製它的任何部分。只查看授權條款。

這些擴充套件應該是誠實的——它們不應該「作弊」。如果網站的 JavaScript 要求使用者提供資訊並傳送它,擴充套件也應該要求使用者提供該資訊並傳送它。如果網站要求使用者 (1) 勾選方框以同意 XYZ,擴充套件也應該要求使用者勾選方框以同意 XYZ。擴充套件應該忠實地傳遞使用者輸入的任何回應。如果網站傳送 cookie,擴充套件應允許根據瀏覽器 cookie 設定來處理它。

透過傳送到使用者的 JS 程式碼來實現真正的安全性是不可能的,但是無論網站做什麼來嘗試實現類似安全性的東西,擴充套件都應該忠實地執行。特別是,如果網站要求使用者回答問題以證明自己不是機器人,擴充套件應該向使用者顯示相同的問題,取得答案,並將它們傳送出去——從而使使用者能夠證明自己是人類。

Jeff Carpenter 的 librecaptcha 如果網站傳送驗證碼,可能會很有用。我們將啟動一個專案將其轉換為 JS,我們將需要志願者來做這件事,所以如果您有興趣提供幫助,請寫信給我。

同時,如果網站的 JS 程式碼偷偷摸摸地收集資訊,阻止這種窺探行為是值得讚賞的。一個想法是詢問使用者要回傳什麼答案——例如,「網站正試圖找出您的位置。您想告訴它什麼?」但最好避免頻繁或重複地詢問使用者。

當您有一個可運作的擴充套件時,請將副本郵寄給 GNU 計劃,電子郵件地址為 <js-extensions@gnu.org>。如果您能忍受執行非自由軟體來做到這一點,您也可以在 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」。