繞過中國互聯網審查:我如何建立一個審查微博聚合器

已發表: 2022-03-11

眾所周知,中國政府對互聯網實施嚴格的審查。 中國的審查制度,俗稱中國的防火牆,由公安部運營,正式命名為金盾工程。 該系統自 2003 年開始運行。

通常包含政治敏感內容的國際新聞網站(例如紐約時報)或不遵守審查規則的社交媒體網站(例如 Facebook 和 Twitter)通常會被中國用戶屏蔽且無法訪問。 這是使用各種複雜的方法來完成的。

對於中國的新聞和社交媒體網站來說,幾乎一切都在政府的監控之下。 為了被允許運營,中國的 ISP 和互聯網內容提供商通常有自己的內容過濾機制,用於阻止或刪除其用戶發布的內容,如果政府認為這些內容是非法的,甚至直接刪除用戶的帳戶政策。 這些公司在他們的服務器上都有自己的審查軟件,以及專門的團隊或部門來手動處理自動審查軟件無法管理的審查任務。 這些團隊與公安部的地方部門合作,接受新的命令和政策,並且通常相互合作。

對於我們國內的網絡開發者來說,中國互聯網的審查不僅過濾了我們的言論自由,還過濾了來自世界各地的寶貴專業資源。 在我的日常工作中,我必須繞過互聯網審查,通過 VPN 連接才能使用 Gmail、Dropbox 和許多其他重要網站。 我還記得 2010 年的尷尬,當時谷歌拒絕繼續遵守審查規則,谷歌的服務在中國變得不穩定或無法訪問。 這對於其他國家的開發者來說是難以置信的。

新浪微博審查

新浪微博是中國最大的微博社交網站。 由於 Twitter 不符合中國的規定,微博不必與它競爭用戶。 新聞在微博上的傳播速度比中國任何其他媒體都快、直接。 年輕一代的成員,比如我自己,喜歡用它來分享新聞和討論公共事件。 但是當然,在中國的網絡審查制度下,許多熱門或有趣的帖子在發布後立即被刪除。 政治和公共事件帖子最有可能被刪除,而娛樂新聞最不可能被刪除。 計算機科學家 Jed Crandall 和 Dan Wallach 2013 年的一項研究發現,每天約有 12% 的中國微博被刪除。

在 6 月 4 日這樣的政治敏感日,預計會看到更多被審查的微博帖子被刪除。 如今,用戶在嘗試寫微博時,通常甚至無法輸入某些敏感詞。

帖子被審查時會是什麼樣子? 當你在網站上刷新一個新的微博時,你會經常看到這樣的東西:

這是一個經過審查的中文微博,其內容已被政府監管機構或 ISP 刪除。

這相當於轉發,原始消息通常顯示在灰色框中。 盒子現在寫著“對不起。 微博已被刪除。 請看……”原帖是一位母親為她 11 歲的女兒在 2013 年被綁架、強姦和強迫賣淫而請求正義。

2013年是通過微博平台曝光大量政治醜聞的一年。 新浪微博的熱度在此期間飆升。 作為回應,政府感到緊張,並開始加強對社交媒體平台的審查。

在微博出現之前,像我這樣對政治感興趣的年輕人通常不得不使用代理服務器或隧道服務從國際網站上搜索敏感消息。 突然間,我們有了一個相對開放的中文社交網絡平台。 但政府迅速介入,結果只是曇花一現。 這真的激怒了我。 我和朋友交談,我們都對平台上加強審查感到憤怒。 我的朋友會問,“為什麼我們對此無能為力?” 我決定試試。 所以我建立了一個網站,開始繞過互聯網審查,看看新浪微博上到底有哪些內容被屏蔽或刪除。

技術討論

基本上,我需要設置一個服務器,不斷掃描被屏蔽或刪除的中文微博,並將它們顯示在一個新網站上。 本來打算用阿里雲這樣的國內云服務,結果發現平台有很多限制,比如域名重定向,價格也不比其他雲服務便宜。 當然,我另外擔心的是,如果我在國內部署它,服務器本身會受到監視。 所以我最終在 Linode 上購買了一台服務器,並將服務器定位在日本。 我還買了域名freeweibo.me ,開始繞過新浪微博的審查。

下圖顯示了系統的整體架構:MongoDB、Web 服務器和爬蟲。 我選擇 Node.js 作為開發環境,因為它對於網絡應用程序來說更高效和可擴展,而且我個人對它有更多的經驗。 Web 服務器是使用 Express.js 框架開發的,並使用微博 API 來捕獲數據。 最初,爬蟲被設計為一個單獨的進程,但後來我發現將它作為一個模塊捆綁在 web 服務器進程中,對於早期階段來說已經足夠了。

這是繞過中國審查並檢索已刪除微博的系統架構。

微博的內容有兩個主要的興趣部分。 一是文本數據及其相關屬性。 另一個是與帖子相關的圖像。 為了保存帖子,我們還想下載圖像並將它們作為文件保存在磁盤上。 對於被屏蔽或刪除的博客,這些圖片非常重要。 在中國,使用圖片發布文本內容非常普遍和流行,因為在互聯網公司的服務器上通過基於文本的自動過濾和審查很難捕捉到這些內容。

檢測被阻止或刪除的帖子的基本思想是不斷地從已知的用戶列表中掃描新帖子,然後在以後重新檢查帖子的可用性。 一條微博可能會在幾分鐘或幾天內被刪除或屏蔽。 因此,爬蟲由兩個主要任務組成:獲取任務,獲取新發布的內容,以及檢查任務,檢查以前發布的內容是否已被審查。

一開始,我配置爬蟲來爬取微博前100名知名用戶的微博。 但事實證明,每天幾乎沒有檢測到被刪除的博客。 原因是大多數頂級用戶對政治或公共敏感話題不感興趣——他們從不發布或轉發這類微博。 例如,這位博主是一名擁有超過 1000 萬粉絲的女演員,是最受歡迎的用戶之一,但她從不發布敏感博客。

經過一些實驗和思考,我想出了一種技術,可以自適應地找到持續受到審查的用戶。 社交媒體網絡是主題互聯的,用戶傾向於按興趣分組。 如果用戶對公共或政治話題感興趣,那麼他更有可能發布或轉發其他類似用戶的博客。 這些轉發的帖子提供了一種識別要掃描的新用戶的好方法。

例如,假設用戶 A 已經在數據庫中,爬蟲檢測到用戶 A 轉發的一篇博客被刪除。 如果博客的原作者用戶B不在數據庫中,則爬蟲會保存用戶B。下次爬蟲重新掃描新博客時,也會掃描用戶B的新博客。這樣,可掃描用戶將通過利用這種社會興趣聯繫自動增長。

中國的互聯網審查制度可以通過利用微博行為來繞過。

在調整爬蟲算法以利用這種方法之後,我只需要播種幾個對發布敏感博客有濃厚興趣的關鍵用戶,爬蟲就會自動發現新用戶進行掃描。 每日檢測到的審查博客總數逐日穩步上升。 以下是我郵箱中已歸檔已刪除博客的快照。

這是社交網絡上審查中國微博的一個例子。

  • 毛澤東斥責地方官員不拆成都古城牆的歷史性對話。
  • 關於活躍維權律師許志勇的帖子。 他幫助了許多弱勢群體,並在中國發起了新公民運動。 他於 2014 年 1 月被判入獄。
  • 批評政府報紙《人民日報》
  • 評論中國億萬富翁、新公民運動領袖王功權被捕和受審。
  • 指逮捕參與社會運動的活動人士。

結果

經過兩週的編碼和調試我的中文微博繞過系統,我將網站部署到了freeweibo.me 。 但是,運行幾週後,服務器檢測不到更多新博客。 通過一些調查,我發現了兩個問題。 一是微博平台改變了原有的API接口。 另一個是由於數據庫中博客和用戶的增加,爬蟲的API請求超過了速率限制(每分鐘1000個)。 所以我調整了我的代碼以採用新接口並減少每分鐘的 API 請求數。 從那時起,爬蟲就穩定了。

我面臨著是否讓很多人知道該網站的兩難選擇。 我知道,訪問該網站的人越多,它就會越早被政府嗅出並被封鎖。 所以我只和我的一些朋友分享了這個網站。 最初,每天只有大約 10 到 20 次訪問。 但一個月後,有幾天訪問量達到了 80 次或更多,我有數十個電子郵件訂閱者。

然後,正如我所料,第二天早上我發現我的網站在中國被封鎖了。 它持續了大約三個月。 之後為了訪問該站點,用戶必須使用 VPN 隧道服務訪問該站點。 這對大多數中國互聯網用戶來說是不切實際的。

然而,就在同一天,我鬆了一口氣,很高興地發現另一個網站 freeweibo.com 提供的服務完全相同,而且比我建立的更複雜。 freeweibo.com 項目非常有資源。 它在社交媒體上很活躍,並為國內用戶提供不同的訪問方式,如 RSS 訂閱、電子郵件訂閱和鏡像站點。 它甚至有一個移動應用程序! 我不知道是誰建造了這個網站,但我很高興我們擁有相同的願景。

結論

根據當時的情況,我的網站顯然不再有用了,幾個月後我就關閉了它。

儘管有結果,但我不覺得這個項目是徒勞的。 相反,這是一次奇妙的經歷,儘管它只存活了幾個月。 它幫助我深刻體會到我國的現實。

在中國,要經營互聯網業務,你必須對審查非常謹慎,否則你遲早會遇到麻煩。 如果社交媒體網站不遵守嚴格的審查制度並損害用戶隱私,那麼它們幾乎沒有任何成功的途徑。


更新

freeweibo.me源代碼現已在 GitHub 上提供。 如上所述,此源代碼與類似網站freeweibo.com 無關