2009年9月7日

噗浪你到底在搞什麼鬼!?

噗浪有隱私嗎?

今天噗浪上的一個話題是正妹牆帶來的隱私權可能被侵犯的問題,讓我來從個人的觀點表達一下想法。

正妹牆


正妹牆是什麼?它是一個網站,幹什麼用的?用說的不如用看的。



這這這... 真是宅男的福音啊!

還可以選任何一個正妹的照片點進去看喔!


進去之後,就是有關這位正妹的資訊啦!最上面是這位正妹最近的噗,再來這塊是她的照片、之前的照片、更舊的照片、等等等。(第一次做馬賽克,技術不佳請見諒。)

往下捲,捲過正妹過去所有的照片之後,出現了她的朋友的牆,有 plurk ID、Karma 和照片。



再往下捲,看到她的粉絲的牆,一樣有 plurk ID、Karma 和照片。



OK,正妹牆就是這樣。

問題 1:過去的照片

正妹牆很厲害,可以把正妹以前的照片找出來顯示,這是怎麼做到的?其實,這些圖檔的網址清一色是

http://avatars.plurk.com/nnnnnn-bigmm.jpg

的形式。換句話說,當正妹因為心情好還是什麼原因換照片的時候,噗浪並不是拿新的圖檔蓋掉舊的,而是產生一個新的圖檔的網址給正妹的首頁用(換個 mm 的數字),舊的仍然留在系統裡,網址不變。

「正妹牆」的作者發現了這個事實,更進一步發現了照片網址的規律,因而找出了正妹過去所用過的所有照片,顯示在有關那位正妹的網頁上。

已經有人抗議:我換掉的照片,你為什麼還顯示出來?!

這裡有個問題:換掉照片之後,舊照片算什麼?

是「舊的作廢」、還是「舊的歸檔」、還是別的?

噗浪的上傳照片頁是這樣寫的(點擊圖片字可以看得比較清楚):



"Upload new picture to replace the current one."


如果你問我,我會說,這裡很清楚地說了,「上傳新的照片取代現在的。」

問題來了!

噗浪在系統中沒有真的用「取代」的動作!而是用「新加照片」+「更新照片網址」的動作,嚴格說來不算取代;但因為噗浪沒有提供連往舊照片的連結,表面上看起來和「取代」有一樣的效果。

可是這有一個漏洞:假設我發現了這位正妹的噗浪首頁,覺得她的照片很棒,在我的部落格裡大大讚揚一番還放個連結,這是完全合情合理合法的行為啊!她有一天換了照片,也不會通知我。但因為噗浪保留了舊網址,所以到我部落格的人都會看到她的舊照片!

從這個角度看,噗浪現在「新加照片」+「更新照片網址」的作法,並沒有達成「取代」的功能,這違反了上傳照片頁的說明文字。

從功能上來說,使用者的認知是「舊照片被新照片換掉了」,可以合理推論「舊照片已不存在於網路上」;就像「我把硬碟裡的檔案砍掉了」可以合理推論「檔案已不存在於硬碟裡」,但是熟悉去年灌 C 事件的人都知道,熟系統的人在一定狀況下是可以把砍掉的檔案撈回來的,但是做得到不代表應該去做。在噗浪上,使用者已經藉由「上傳新照片」表明了「取代舊照片」的意圖,系統應該尊重使用者的意志,用任何技術或方法撈出舊照片都應該視為違反使用者意圖的行為。

在我上面貼的正妹的歴史照片中,可以看到第八張是她和某個男生的合照,其實往下捲有更多和他的各種合照,甚至有些親密動作,她現在拿掉了這些照片換成獨照,你覺得是為什麼?把舊照翻出來顯示,會不會有可能是在傷口上灑鹽?

所以我覺得,雖然噗浪的設計有我講的漏洞,但是正妹牆這樣在事後利用這個漏洞把所有舊照片翻出來顯示的作法,於情於理都是不妥的。

問題 2:顯示朋友和粉絲的資料


在正妹牆的正妹個人頁上,朋友和粉絲的資料都會顯示出來,但是在正妹的噗浪頁上,未必是設定成公開的。這位就是這樣:



看不到朋友的照片,也看不到粉絲的照片,不過有個 Show all fans 的連結耶!點下去,



什麼!粉絲就列出來了!在帳號設定的 "Privacy" 分頁裡設「Allow only my friends to view my plurks.」不准有粉絲的設定是設心酸的嗎?

順便一提,噗浪不提供介面讓正妹隱藏朋友的照片,但是,這是 web!會設 CSS 就能玩很多花樣,只要把 id="dash-friends-pics" 這個 div 捏成一個點、或是丟到外面很遠的地方,就看不到了。

好,回到正題。正妹牆把正妹的朋友和粉絲通通列出來了,有沒有問題?

在技術上,正妹牆作者並沒有黑掉噗浪的系統,只是載入正妹的噗浪頁,頁裡的 Javascript 裡就有
var FRIENDS = {"4059169": {"display_name": "馬賽克", "uid": 4059169, "nick_name": "馬賽克", "has_profile_image": 1, "location": "Tainan, Taiwan", "avatar": "28", "full_name": "馬賽克馬賽克", "gender": 1, "timezone": null, "id": 4059169, "karma": 70.87}, ...};

var FANS = {"4190724": {"display_name": "馬賽賽", "uid": 4190724, "nick_name": "馬賽賽", "has_profile_image": 1, "location": "Taipei, Taiwan", "avatar": "20", "full_name": "馬賽賽", "gender": 1, "timezone": null, "id": 4190724, "karma": 65.83}, ...};

如果你看得懂一點 Javascript,你就知道,

這就是正妹朋友和粉絲的基本資料啊!

正妹牆所做的,就「只是」把這些資料顯示出來。

這個問題有兩個層面。

1. 噗浪為什麼要把這些資料用 Javascript 的形式塞在正妹的頁面裡?


現在噗浪的設計是:一定會顯示朋友、粉絲則依隱私設定決定要不要顯示,所以要把朋友的清單傳給瀏覽器顯示;估且不論這種設計的效率問題(我的頁面的 27920 bytes 中有 6541 bytes 是朋友和粉絲的資料,但只顯示 140 個朋友中的 8 個和 216 個粉絲中的 8 個!),光說這個不用認證就把資料通通送出來的做法,我就無法苟同!

如果是我來設計這個頁面,我會用一個 Ajax 去向伺服器要朋友清單的前 8 筆顯示出來,如果使用者點了 "Show all friends",再用 Ajax 去要更多資料來顯示。

粉絲的顯示可以用一樣的 Ajax,只是換個資料,伺服器端會看正妹要不要公開粉絲,要才給資料出來,不要的話就回一個「恕不提供」。

這樣很難嗎?

順便再講一個問題... 有沒有人和我一樣,覺得要保護的是朋友,不是粉絲?應該要可以設定不顯示朋友才對吧?

2. 正妹牆可以把這些資料顯示出來嗎?


技術上,正妹牆只是把已經存在的資訊,用視覺的方式呈現出來。

對使用者而言,問題是在粉絲的部分沒有尊重使用者個人的隱私設定(雖然噗浪自己也提供了 Show all fans 的連結),使用者心裡自然不是滋味。但噗浪沒提供 API,正妹牆也只能從 fan_holder 這個 div 的內容去猜,有點苦手,但是做得到。

朋友部分,噗浪沒有提供隱藏的介面,所以一般人都是公開的,但也有人用 CSS 把朋友清單藏起來了,用瀏覽器看不到,他花了心血去隱藏朋友清單,顯然真的不想給別人看,但是網頁原始的 HTML 檔裡明明就有!結果就是,人看不到的朋友清單,用程式去看網頁就明明白白。

要用程式判斷使用者有沒有隱藏朋友清單有技術上的難度。最簡單的解決方式,還是請噗浪提供 API,讓外部程式可以依循。在 API 出現之前,恐怕是沒有「顯示願意公開的朋友清單但不顯示不想公開的朋友清單」的好方法。

這個部分,可能要請正妹牆的作者權衡一下,把「資訊存取的便利」和「個人隱私的意願」放在天平的兩端秤一秤,是要放棄便利性(通通不顯示朋友)、還是要顯示朋友但因為無法判斷意願而可能不尊重某些人的意願?


總之...

這些問題,我認為在正妹牆身上的少,在噗浪身上的多;也因為正妹牆,才曝露出來,原來噗浪有這麼多問題:沒有 API、把朋友和粉絲資料放在網頁中、未使用固定網址放照片!

噗浪你到底在搞什麼鬼!?