這年頭一走進電器行,家電都貼上「節能」「環保」「省電」,
一打開電視,選舉都要「拚經濟」「公平正義」。那資訊軟體的口號是什麼呢?
毫無疑問,絕對是「好用」「方便」,
預算比較高的會喊「行動」、「雲端」、「大數據」。

口號的用意是什麼呢? 就是把一大串理念與想做的事濃縮成一句話,
喊口號很輕鬆,但實行起來不簡單。

對於專業人士而言,「好用」「方便」的定義可能有上千種,
從心理學上,從視覺介面設計,從使用者操作流程上各有不同的解讀方式。
但一般人對於「好用、方便」的其中一個定義就是:
「不要填這麼多資料」「越方便註冊越好」「按一個鍵就可以完成某事」。

目標聽起來很好理解,就是表單的格子少一點嘛!
但網站的目的之一就是促進線上的商業行為,
隨著案件進展,與網站上線之後的消費者反應,最後常常離目標越來越遠。
例如會有:
「台灣外島的運費跟本島不一樣,而且要先收到錢才出貨」
「中國大陸客人的運費我要另外再報,不可以讓他直接刷卡付款」
「南部的顧客,請送到台南分店的 email,不能讓其他分店的看到。」
「某個東西的利潤很低,不可以讓外島客人再套用其他優惠活動」
「這個東西的材積很大,運費很貴,不可以讓某些客人再套用其他優惠活動」
「有很多客人反應不小心按到就送出了,這邊可以再加一個步驟嗎?」

許多看似冗餘的網站表單欄位,就是在種種的需求中產生的,
基本上就是
「依法律規定」
「不想虧本賣」
「大家都這麼做」
「加一個格子,比加自動判斷機制便宜」。
「避免有人搞破壞,把表單做得難用一點,比做自動防護機制便宜。」

好,讓我們接下來分析一下,網站註冊或購物時填寫的格子,
背後可能會牽涉那些已知的功能,甚至你不知道的用途?

1.必須填寫真實姓名:
– 方便客服聯絡時稱呼用。
– 方便系統建檔客戶資料,不然很多人的姓名會是 卐乂Oo 煞气a屁雞oO乂卍 、「因為愛」、”Lydia Chang”之類的。
– 作為購物時的收件人姓名。
如「超商純取貨」這種先付款再拿貨的交易流程,包裹上的收件人與領取人證件姓名不符,通常會很麻煩。

2.複雜的密碼格式限制
如下面這個影片,常常有人吐槽網站的密碼規定太囉嗦,那為什麼要有這麼多規定呢?

此影片的中文翻譯可以看 好色龍的網路生活觀察日誌: [翻譯] 密碼規定爛透了

現代網站的密碼資料,通常會經過加密後儲存在資料庫中,例如你的密碼是 12345,但是在資料表的欄位內紀錄的不會是12345,會經過加密後再存進資料庫,例如 12345 經過加密會變成 827ccb0eea8a706c4c34a16891f84e7b。那網站登入程式如何知道你打的密碼是否正確? 最基本的方式,就是將登入時輸入的密碼加密,再與資料庫紀錄的密碼字串比對,如果兩者相等,表示密碼正確。

資料加密的用意,通常是避免內部人員監守自盜,把資料表撈出來,讓資料通通被看光光。也避免資料庫被外部入侵時,看到的資料至少是加密過的,要經過一番解密才能變成一般人看得懂的文字,而不會直接被看光光。但其實還有些網站程式還是紀錄未加密的密碼,可見 我的密碼沒加密

其他各種複雜的密碼格式要求,通常都是為了避免密碼太快被解出來,例如:
– 限制必須要8個字以上,並包含英文或數字:
密碼長度越長,通常解密的時間就越久。如果網站出事,至少還可以先拖一陣子,趕快通知會員改密碼。

  • 密碼強度規則,有時候很長的密碼強度不一定比較高?
    密碼強度判定有很多機制,其中一個機制是「人類常用的單字」,有些暴力破解的字典檔會優先嘗試一些「人類常用的密碼組合(如12345,或是鍵盤上相連的鍵)」,或簡單的單字,如果密碼都使用字典檔裡的詞彙,機器會太快把密碼算出來。通常密碼的字數越多,有意義的單字越少,密碼強度就可以判定為強。
  • 使用奇怪的規則:
    避免密碼太好破解,或是不要讓使用者在所有網站都使用同一組密碼。避免造成一個網站的帳密外流,連累到其他使用相同帳號密碼的網站。

3.密碼提示問題
為什麼要有密碼提示問題? 主要是為了多一層保護。
第一種情況,忘記密碼的時候,有些系統會直接把新密碼寄到信箱。但避免閒雜人等知道別人的 E-mail 或會員帳號,整天隨便幫別人重設密碼。所以要先回答出正確答案,才能重設密碼。
第二種情況,忘記密碼的時候,有些系統會直接把以前用的密碼寄到信箱去,如果信箱被盜,有心人士就可以看到你的密碼,或是幫你收信,使用重新設定密碼的連結幫你換密碼,然後幫你登入、亂下單。

但資安問題有時候不在系統,而在使用者身上。就怕有人的答案太好猜,或是公眾人物,大家都知道答案,或是像電影「出神入化」中,有一個假借讀心術失效,巧妙引誘出富翁說出密碼提示問題的答案的橋段。

至於為什麼密碼提示問題都是一些古怪的問題,如媽媽娘家的姓氏、寵物的名字、第一份職業、最喜歡的老師、出生時住的第一條街、讀哪一間小學? 因為密碼提示問題的設計有一些準則:
– 不能問有標準答案的東西,如「誰提出牛頓第一定律?」
– 要各國的使用者都有的經驗,所以不能問「第一次買槍是在哪一間店?」
– 問題要有答案,答案自己知道,不能是「學說話時,講出來的第一個單字是?」
– 要問每個人都可能有不同答案的生活經驗,不能問「幾歲上小學一年級」
– 問題的答案不能太簡單,不能問「如暑假作業寫了沒?」
– 答案必須要能持久不改變,所以不能問「上次考試考幾分?」
– 做系統的人懶得想問題,直接參考別人的。

還有系統連密碼提示問題也可以自己輸入,這下可好了,連密碼提示問題的「答案」都會忘記了,現在會被忘記的東西又多了一個! 不知道是在整客戶還是在整客服。

4.人機驗證碼
上述第二點,複雜的密碼規則是想辦法增加 827ccb0eea8a706c4c34a16891f84e7b 的原文被解出來的情況。還有另一種情況是已經知道某組帳號確實存在,要避免有人用機器去嘗試登入的情況,那就需要驗證碼了!

Riyu理由 廣告驗證碼範例
Riyu理由 廣告驗證碼範例
– 聯絡表單的人機驗證碼,通常是避免有機器自動持續發送內容,讓客服的信箱被灌爆,或是避免 SMTP 超出寄信量上限。
– 註冊或申請表單的人機驗證碼,則是避免有人大量註冊或大量申請,做為不法用途,甚至有些網站有簡訊發送功能,還可以惡意把簡訊發送點數用完呢。
– 登入區的的驗證碼,用意是測試你是不是一個只會在表單欄位填入資料的機器人。

至於那種「某帳號+某IP,X分鐘內登入錯誤三次就鎖定」的機制,常常只能鎖到忘記密碼的使用者而已,系統還必須比對與記錄這個 IP 來源或使用者帳號已經錯幾次了,還要定期去清掉錯誤紀錄。總之還是人機驗證碼的效果快,工法少。

有人會說,工程師應該要把他的工作做好,不要讓我的使用者資料被偷走呀? 或是使用一個不會被破解的方式來加密? 怎麼可以因為這些理由,造成我輸入密碼的麻煩呢?

其實這真是個好問題,那不禁要問一下,馬路沒有平,常常鋪好之後沒幾天又來挖,
該怪瀝青跟石頭撒在地上後不會自己變平坦(科技的限制)?
還是鋪路的外籍勞工該負責任(執行人員的問題)?
還是行政區域首長的責任(主管的問題)?
還是採購制度的問題(制度問題)?
還是都市計畫的管線配置沒規劃好(流程問題)?

5.必須填寫暱稱:
– 用來顯示一些「某某某您好」之類的歡迎訊息。
– 在網頁的公開區塊顯示,如商品問與答、商品評價、留言板、討論區。

6.必須填寫地址:
– 購物收件地址。
– 發票地址。
– 商品退貨取件地址。
– 商品換貨取件地址。
– 活動獎品寄送地址。
– 戶籍地址,常見於一些政府機關或學校的申請表單,因為目前沒有 API 可以讓使用者輸入身分證字號就代入所有戶籍資料,所以必須讓使用者自己輸入。
– 到府服務地址,常見於家電產品的線上註冊表單。
– 廣告 DM 的寄送地址。
– 統計會員所在區域,用於決定廣告投放的地區…等用途。

7.必須選擇國家、地區、縣市
– 購物車依照所選擇的國家來直接計算國家運費。
– 依照所選擇的區域計算區域運費(如美國各州,或中國大陸各省、自治區、直轄市、台灣本島外島)。
– 用來設定網站所顯示的語言。
– 網站有針對特定地理區域顯示的內容。

通常是使用下拉選單讓使用者選擇,程式再依照下拉選單選擇的值作為程式執行的依據。如果改用讓使用者自行輸入,程式直接判斷使用者輸入的資訊,就有可能在使用者輸入「台中市甘肅路」「帝寶A棟」「XX園區」「台 灣大 道」之類的造成判斷錯誤。

有人可能又想到啦,現在 GPS、打卡、導航什麼的這麼方便,為什麼網頁不能有個按鈕,按了直接顯示我現在的地址? 非得要人每次打一堆地址,在一長串國家、地區表單中選地區?

以技術來說,一般所謂的地點偵測有三種,基本上都是先取得經緯度,再把經緯度轉換成地址:
第一種是用目前裝置上網的 IP 網段資料,或基地台位置資料,得出經緯度,再對照這經緯度是哪個地區,或是某經緯度範圍屬於哪個縣市,因為地區的劃分通常是不規則的形狀,不是圓形或正方形這麼簡單。所以這個對照的機制很重要,有些是獨家秘方,例如用 Google 搜尋,或是用 Facebook 的時候,偶爾最下面或旁邊會問「您的位置是 XXX 縣 XXX 市嗎?」這種通常就是經由使用者的回報,來修正系統的地理區域對照機制。

第二種是沒有網路的情況下,使用裝置的 GPS 定位,取得經緯度,再用經緯度對照地區,但使用 GPS 的前提是要看得到天空,而且大樓不要太多的地方。不過裝置有各種限制,像桌電沒有 GPS,低階的行動裝置會定位很久,偷料的便宜大陸平板甚至沒有 gps,網路關掉就無法定位。

FB 打卡是根據當下的經緯度,列出附近的地標,或是附近前人打卡過的地點,看似好像什麼都定位得到,但如果到附近完全沒地標的地區,並且把手機 GPS、WiFi 關掉,這時候定位出來的通常是基地台座標,別說正確的地址,還可能與人類實際的位置與偏差許多。

HTML5 Geolocation API 確認允許畫面
HTML5 Geolocation API 確認允許畫面
HTML5 有一個 Geolocation API 功能,一些比較新穎的線上服務,或是持續有在更新的 JS 地址套件都開始使用,此 API 可以讓瀏覽器經由上述的方法一取得經緯度,但是若遇到使用者按「不同意」,或是隱私安全程度設定太高,甚至遇到根本不支援 HTML5 功能的瀏覽器,是完全不能用的。[Chrome 50 之後,只有 https:// 的網頁可以使用 Geolocation API]

Geo API 取得的資料值是經度與緯度值,如 21.941592°,111.22256010000001°,要再想辦法將經緯度轉為一般人認知的「地址」(通常使用Google Map API),基本上可以得到「台灣 XX 縣 YY 區 ZZ 路」就算不錯了,幾巷幾號幾樓幾室基本上是不太可能。另外還有許多地方是 Google 地圖無法正確列出的呢!

所以呢? 講這麼多,還是乖乖的自己輸入地址吧!

8.必須填寫生日:
– 做為生日優惠活動使用,而且為了怕有人每個月去改生日,讓自己每個月參加壽星活動,通常會員資料的生日設定之後,就不能更改。
– 網站提供的服務必須有年齡限制,例如候選人的小額捐款網站有未滿20歲不能捐款給候選人的規定,不然在選後容易被對手找碴。
– 網站提供的商品在法律上有年齡限制,如酒精類、成人用品、暴力遊戲或電影…等,所以必須限制或提醒瀏覽者。但是血腥的社會新聞都沒有設限,很有趣。
– 有些網站限定使用 Facebook 帳號註冊會員或投票,但 Facebook 跟 Google 都有未滿 13 歲禁止註冊帳號的限制,算是變相的限制使用者年齡。(謊報生日不在討論範圍內。)
Google 帳戶的申請年齡限制 – Google 帳戶說明
– 用於統計使用者年齡。
– 資料驗證用,如有人填寫星座為處女座,但是生日寫 1 月份,可能判定此為無效會員。
– 人力銀行或求職類服務。
– 訂票、訂房類服務。
– 保險、理財類服務。
– 命理占卜類網站,必須填寫生辰八字,西曆生日或國曆生日,甚至還要填出生時間。

9.必須填寫身分證字號:
通常用於「一個人只能註冊一個帳號」的線上服務。
– 通常用於網站會辦活動,或是新會員註冊有優惠…等原因,避免會員重複註冊,會以身分證字號做判斷。但有可能會遇到消費者的身分證字號已被「身份證字號產生器」的使用者註冊過的情況,必須還有確認個人身分的相關流程。
– 人力銀行或求職類服務。
– 捐款,或特殊組織型會員。
– 訂票、訂房類服務。
– 保險、理財類服務。
– 政府機關或學校相關申請表單。

10.必須填寫性別
– 程式依此選項來決定顯示「XXX先生」或「XXX小姐」,有些跨國的服務還會有「拒絕透露性別」「其他」的選項。如看到購物通知信會顯示「 XXX (先生/小姐)您好的」,通常就是網站沒有/沒做性別選項的判斷程式。
– 依會員性別推薦不同的商品類別。

11.必須填寫手機、電話
– 方便聯絡,或是快速對話溝通。畢竟 email 是不夠即時,而且很不穩定的通訊方式,可能因為 email 填錯、軟體擋信、伺服器擋信、公司防火牆擋信、信箱滿了、沒在收信、寄到垃圾郵件匣、使用者的信件過濾機制設定有誤……等原因收不到信。
– 用來寄送廣告簡訊。
– 用來寄送購物進度通知簡訊。
– 簡訊/語音認證用,用來確認此號碼有效。
– 二階段驗證之類的功能用途,除了帳號密碼,再多加一道登入防護。通常需搭配簡訊驗證。
– 供貨運宅配聯絡用。

12.必須填寫家庭狀況或家人資料
– 通常親子或家庭相關的網站需要填寫,程式可根據此欄位顯示相關的內容。
– 作為統計會員資料的依據
– 保險理財金融相關
– 台灣的求職網站

13.必須填寫職業
– 徵婚或交友相關的網站需要填寫,程式可根據此欄位顯示相關的內容。
– 人力銀行或求職類服務。
– 作為統計會員資料的依據。

14.必須填寫信用卡資料
– 一些必須刷卡付費的服務,如 Uber。
– 留存使用者資訊,方便付款時直接代入使用。
– 詐騙網站,編出各種理由讓你留下卡號,竊取資料。

15.不能直接用 email 或手機當帳號,要另外取一個東西當帳號
對登入系統來說,帳號需要是一個獨一無二的東西,不能跟別人重複。所有的會員資料都依存在「帳號」的短短幾個字母裡面。
– 使用者的 email 被盜帳號等原因,導致 email 無法使用,或是不想用的時候,還可以透過變更 email,繼續使用該帳號,不需要重瓣,也不需要找客服改 email。
– 避免使用者更換手機號碼後,帳號無法使用。甚至該門號又被別人申請走,那個「別人」到網站註冊時,會顯示號碼已重複。

– 會員卡制度,帳號是會員卡編號,而不是手機號碼/email。

結論:
使用者永遠都想要方便,但最方便的大概就是用手機掃一下指紋,但不見得每個人的手機都能掃指紋,最普遍、最通用的情況就是輸入身分證字號,祖宗八代生辰八字就通通列出來,半個資料都不用填,但是,沒有一個「公開的」資訊系統有這麼方便的權限,如果真的有,大概就跟電影的奧創、終極警探4、關鍵報告、鷹眼一樣危險。

最接近此理想的大概是 OAuth 開放授權機制,如 Facebook OAuth, Google+ OAuth,OpenID,只要先在 FB、Google+ 註冊好帳號,在有支援 OAuth 登入的網站直接按一下,就可使用帳號裡的資料直接註冊或登入,自動填寫大半的資料,省去不少時間。

但是這個的壞處呢,就是 API 改版,或是政策更新,或是使用者將資料設為「只限本人」,或是 Facebook 維修,將導致無法正常登入網站或正確帶入資料。

iCloud 鑰匙圈
iCloud 鑰匙圈
另外有些軟體或設備則是朝「自動填入」與「自動記憶」發展,如 iCloud 鑰匙圈,或是 Chrome 的同步處理,把表單資訊存在雲端,在下次填寫其他表單時可以直接帶入使用,減少輸入時間。

另外「一鍵完成購物並付款」也真的有人做出來,並做實際的商業應用了,但這可不是人人都能辦到的,唯有 Amazon Dash button!

雖然資訊系統的終極目標是指紋掃一下、條碼掃一下,甚至語音輸入,就完成所有步驟。但是在那一天到來之前,還有很大一段路要走。在現階段,只能想辦法盡量減少痛苦的輸入流程。

大家應該都聽過「朝三暮四」的成語故事,其實人類也跟猴子差不多,一個步驟要填完 8 個格子,跟拆成三個步驟,分別填 2 個格子、3 個格子、3 個格子,就可能造成完全不同的表單填寫達成率,這是很神奇的一件事。