我為何撤銷了大部分網站的 Facebook 帳戶連結

如果定期更換密碼是傳統上網的密碼安全守則,那麼定期清查並撤回社群網站登入及資料使用權,便是當代上網的安全守則。

身為現役 Web 工程師,資訊安全不只教條,還是必須在生活中實踐的原則。近來 Facebook 的帳號安全事件,給了我動力去清查所有用 Facebook 登入的第三方網站,並且積極把 Facebook 登入方案從其他網站刪除,或加上密碼登入。本文分享我的動機,以及實踐後的結果。本文雖然針對 Facebook,但也適用於 Twitter、Google 等社群網站帳號登入,只是我用 Facebook 登入的網站特別多,所以以此為例。

沒有永遠的 Facebook 帳號

從 2007 年開立帳號以來,見證了 Facebook 從默默無名的美國留學生通訊錄,到取代無名小站,躍身為台灣兩大社群服務(另一個是 LINE),大企業行銷不能忽略他的廣告平台,靠他的快速登入和廣告集客力起家的小新創更不知幾許。商業之外,其快速發酵的效果,與昔日的網路論壇 PTT 互相呼應,也促成台灣在 21 世紀的第一個大型民主運動。可以說,Facebook 已經成為台灣現代流行文化的一部分了。

然而 2018 年初,Facebook 帳號安全問題頻傳。台灣國內有批評中國政府便被刪文甚至封帳號而逃到 Twitter 的臉書難民,在其本營美國則有 Facebook 疏於保護個人資訊任其流竄的醜聞。儘管 Facebook 是來自言論自由的國度、來自世界資訊科技首都矽谷,無論是政策上跟安全技術上都值得信任,但就像矽谷新創九死一生(字面意義),世界上沒有永遠的公司,沒有永遠安全的系統,當然也沒有永遠流行的網路服務。

這裏就有了一個動機:萬一我的 Facebook 帳號被封,或是 Facebook 倒閉,至少希望其他網站不能受到影響。

沒有永遠破不了的網站

大家都愛「Facebook 登入」。使用者喜歡他簡單好用,產品經理喜歡他有效提升轉換率。但如果你不是 Web 工程師,首先要知道的是,在一個網站上按下「Facebook 登入」後會發生什麼事情。

當你從「Facebook 登入」完成註冊之後,技術上可以做到,你不需要輸入個別的帳號密碼就可以登入那個網站。網站會拿到一個 Facebook 帳戶的識別號碼,大部分情況下還會拿到 Email 地址,網站可以透過這兩個東西來驗證你就是你,因為可以透過 Facebook 驗證。

但你有沒有注意到,某些網站會同時要求你提供「好友名單」來幫你配對已經在同一個網站上註冊的好友。既然要配對,就需要取得好友名單,這很合理。但要知道的是,就算你沒有打開該網站,網站還是可以自動去下載好友名單來配對。

此外連生日、學經歷、照片等等,甚至你發表在塗鴉牆跟社團裡面的內容,都可以取得,端看你當時允許了網站使用那些資訊。這有好的用途,也有壞的用途。理論上網站必須要盡量減少取得的資訊,但有些初級程式設計師沒有資訊安全概念,寫出會取得所有資訊的程式,這是問題,然而最大的問題不在於取得多少資訊,而在於「如何安全保存這些資訊」。

要知道,「網站資料外洩」這種事情是很常發生的;通常是網站資料庫遭駭客入侵而整個被下載,所以俗稱「拖庫」。如果連製作網站的工程師都有可能因為疏於管理而發生拖庫等資安事件,作為一般使用者的我們,又怎麼能夠相信網站上的資料不會被駭客拖走呢?即使軟體資訊安全上沒有問題,那麼監守自盜的問題呢?

這裏就有了另一個動機:為了避免網站隨意取得我的私密資料

不再有共用密碼帶來的風險

我以前會積極使用 Facebook 登入的主要原因是,通常不需要設定密碼。我也開發過這種程式,很清楚這是怎麼設計的,而且並不只是不需要,而是「沒必要」設定密碼。不想設定密碼的原因是我無法記住不同網站的密碼。大家都知道,共用密碼是很危險的。一個網站被拖庫,你不知道他的密碼是明文還是單向加密,萬一是明文,那麼你就等著其他網站的帳號都被駭吧。所以,以前凡是遇到小型網站或是新創公司的服務,我都盡量用 Facebook 登入。另一方面也是方便。

不過理論上,只要不跟其他網站共用密碼,這個風險就不存在了。然而在沒有密碼金庫軟體的時代,這幾乎是不可能的事情,畢竟我的記憶力沒有好到可以記住數百個不同的字串。但今天,瀏覽器甚至作業系統已經內建密碼金庫,我也已經用 1Password 好多年了,新註冊的網站幾乎都是直接採用隨機密碼,然後存入金庫。能開通多重認證的就都盡量開通,再有什麼網站被駭,都可以高枕無憂。

既然當初積極使用 Facebook 登入的誘因已經有更好的解決方法,那麼何必再使用 Facebook 登入呢?這是第三個動機。

逐一清查 Facebook 登入帳戶

要知道你授權了那些網站可以取得你的 Facebook 資料很簡單,打開「應用程式設定」就可以了。此前我隱約記得有登入過很多網站,但沒想到竟然超過一百個。下圖是我已經刪了一半時才想起來要截的圖,之後這些應用程式有一半被我刪掉了,可見當初真的太隨便就按登入。

你授權了多少網站可以取得你的 Facebook 個人資料呢?

逐一點開每一個應用程式的圖示,就可以知道該程式可以取得那些資料。大部分都是個人基本資料(姓名、性別、大頭貼、是否成年,無法拒絕)以及 Email、生日。有些會要求現居城市,有些要求了好友名單,求職相關的會要求學經歷等等。但如果仔細看看這些網站的內容,會發現他們不少都會要求過多的資料。例如並非基於地理資訊的服務,也要求提供居住城市;並未基於年齡或生日促銷,卻要求提供生日;並未提供強社交功能,卻要求提供好友名單等等。

要求過多的個人資料一例:蝦皮購物

這裏最麻煩的在於「逐一點開」。Facebook 的這個管理頁面並不提供讓你一眼就看出那些應用程式有什麼權限的功能。如果你像我一樣有一百個,那就得老老實實地按一百次。

然後你就有機會發現有些應用程式幾乎可以看光你的資料呢:

PlayStation Network 要求的資料竟然是全部。我當初怎麼會同意呢。附帶一提 Anobii 也是。

刪除那些不再想透過 Facebook 登入的網站

綜上所述,本次清查 Facebook 登入的目的在於:

在逐一清查的過程中,我發現有太多當初為了省事而直接點 Facebook 登入的網站,而且有太多是我無法相信他們的系統是安全的。所以本次清查,理想的情況下要達到以下目標:

然而事情不是那麼簡單。

想換密碼登入,請找後門

雖然有些網站可以讓你設定密碼,但帳號管理畢竟不是主要的業務功能。至今遇到這幾種情況,根據難易度排序,最簡單的在上:

  1. 在透過社群登入的情況下,可以設定密碼,之後允許刪除社群登入連結
  2. 在透過社群登入的情況下,可以設定密碼,但無法刪除社群登入連結
  3. 在透過社群登入的情況下,也只能更改密碼,但我並沒有「舊」密碼,只能透過「忘記密碼」來設定新密碼
  4. 在透過社群登入的情況下,無法設定密碼,但是可以透過「忘記密碼」來設定密碼
  5. 在透過社群登入的情況下,無法設定密碼,也無法透過「忘記密碼」來設定密碼

看到沒?這真的是很罕見的需求呢,連常見的帳戶管理程式庫都沒有好的支援。其中 1 跟 2 算是最容易處理的,就算無法刪除社群帳號連結,還是可以從 Facebook 應用程式管理頁面直接吊銷,杜絕網站今後取得更多資料。

3 跟 4 是產品經理該負的責任,但畢竟可以繞一圈設定密碼,雖然不直觀。

5 完全是鎖死的的情況,你在這個網站只能用 Facebook 登入。要是你的 Facebook 帳號被刪除,那麼你就跟這個網站無緣了。因為這些網站很不對用戶負責任,我只好列在這裡:

沒有永遠的用戶

有些網站當初註冊是抱著嚐鮮的心態,現在沒在用了,最好能刪就刪。不少日本網站都直接提供「刪除帳號」(退会)的服務,這當然輕鬆許多,至於真的刪除與否,姑且信之。但大部分其實是不提供的,尤其是美國跟台灣的新創網站,只好如前文所述直接吊銷 Facebook 連結。

此外還有些竟然把 Facebook 登入的程式整個移除了,讓我想了一下才知道如何透過「忘記密碼」來登入。

沒有永遠的網站

網站還活著的還能處理,但有些竟然是倒閉了,或是工程師做的玩具網站,沒在維護,上網搜尋也找不到,不知道該從哪裡登入。

仔細想想,這種情況下才更應該用獨立密碼登入,畢竟是玩具網站,安全性跟隱私原則都是不明的,其中一個竟然還是未加密的 HTTP。

其中印象最深刻的是 aNobii,這個曾經的愛書人的集散地,現在還有人在用嗎?這個服務據說數年前被義大利的出版商買下了。現在你再去登入,就會發現網站翻譯做的很糟糕,混合了義大利文(?)跟繁簡中文,連密碼重設信件都是我看不懂的文字,得靠網址才能猜得出來。

最嚴重的問題在於 aNobii 的 Facebook 登入是授權「所有資料」,跟上述的 PlayStation Network 一樣,是非常要不得的。要不是這次做檢查,大概也不知道是這種危險的情況。

結語:不想給人看的東西就別授權給人看

我花了一整天清查一百多個 Facebook 登入的現況,最後還保留的只剩下 27 個。有那些會偷偷在後台下載「最新資料」,又有那些會拿這些資料去做各種所謂的調研,我無從得知。在 Facebook 成為台灣第一大公眾社群網站的現在,我們不知不覺在 Facebook 上寫了許多,你以為沒價值,但對於某些人來說很有價值的資料,也在不知不覺中,透過這種與外部網站的連結,流到第三方的手上。很多時候我看到有人在玩占卜遊戲,都覺得資訊安全真的要從小教育,但應用軟體的世界變化太大,該怎麼讓非專業人士的大眾了解,真的非我能力可及。

最後我竟然開始認同日本人消極使用 Facebook 的心態,感覺那是一種自我保護的行為。