已經連續兩年都只用 Ubuntu/Firefox 申報稅務,雖然界面醜陋,使用經驗很糟糕。但是財政部算是努力支援不同的作業系統,今年甚至開始支援 Android Tablet 版本的電子申報程式

在 Linux/MacOS 上,你可以用網頁 Java Applet 版本的綜合所得稅電子結算申報繳稅系統網站 進行結算申報,這個系統大部分都是以 Java 完成,跨平台相容性頗佳。但如果你需要使用自然人憑證登入,需要額外安裝中華電信自然人憑證用戶端元件,這個元件使用 Native extension,跟往年一樣,只有支援 x86 版本。

根據 Ubuntu Popularity Contest 統計資料,amd64 (64 bit) 的使用者已經超越 i386 (32 bit)  使用者了。只支援 x86 ,代表使用者必須重新安裝一個新的作業系統才能正確執行自然人憑證用戶端元件。

去年,為了自然人憑證用戶端元件只支援 amd64 以及版次只支援舊版 Firefox,我發了信聯絡 HiPKI客服中心以及 關貿網路電子申報繳稅客服中心,收到兩封郵件

HiPKI客服中心: 關於綜合所得稅電子結算申報繳稅系統是由財政部委託關貿網路股份有限公司製作,若有使用上之建議請向財政部反應。

關貿網路電子申報繳稅客服中心: 客服中心已記錄您的建議事項,並反應給技術團隊,若造成您的困擾,敬請見諒!

 

沒有解決方案,最後是自己硬升級一包 Firefox extension 解決版次問題。至於 i386 只好建一個新的 Ubuntu 來安裝了。 希望來年可以直接支援 amd64 版本。另外今年的 irc.jar 裡面沒有不小心放進去的 .java.bak 檔案了。 (茶)

sbuild

在 amd64 環境安裝一個新的 i386 Ubuntu 有很多種方法,基本的工具是 debootstrap。 在 Ubuntu/Debian 中有不少工具可以協助你建立環境。我習慣用 sbuild / schroot ,這兩套平常當作編譯環境,但是借來快速建立 chroot 也非常方便。

最快速的方法,是用 mk-sbuild 設定一個新的環境,以下例子為建立一個 i386 的 trusty (14.04 LTS) Ubuntu chroot.

apt-get install schroot sbuild ubuntu-dev-tools pcscd
SCHROOT_PROFILE=default mk-sbuild --arch=i386 --debootstrap-include=firefox,fonts-unfonts-core,fonts-droid,openjdk-7-jre,icedtea-7-plugin --distro ubuntu trusty

完成之後,你可以用 schroot -l 來列出有哪些 chroot

$ schroot -l
chroot:trusty-i386
source:trusty-i386

接下來你需要更改預設的 profile 設定,檔案在 /etc/schroot/default/fstab 。請加入以下兩行,這是讓你在 schroot 中可以存取原系統中的檔案。其中 /var/run/pcscd 是 pcscd 的目錄,是系統用來接取自然人憑證用的。

/home        /home        none    rw,bind        0    0
/var/run/pcscd    /var/run/pcscd    none    rw,bind 0 0

注意 schroot -l 出現兩個名稱。你若使用 chroot:trusty-i386,系統會用 LVM snapshots 或 unions 建立一個暫時的環境,所有的改變都會在登出後遺失。所以你若需要更改 schroot 中安裝的的程式,請使用 source:trusty-i386.

sudo schroot -u root -c source:trusty-i386

若是一般使用者用途,則只需要

schroot -c chroot:trusty-i386

接下來即可執行 Firefox, 由於我們在兩個不同的系統間共用家目錄。我建議另外開一個專門的 Profile ,事後會比較容易清理。

DISPLAY=:0.0 firefox -no-remote -ProfileManager

接下來你就有一個在 i386 中執行的 Firefox 可以使用了。

這篇文章使用的軟體版本為


Ubuntu 14.04
debootstrap    1.0.59ubuntu0.1
firefox    29.0+build1-0ubuntu0.14.04.2
pcscd    1.8.10-1ubuntu1
sbuild    0.64.1-1ubuntu4
schroot    1.6.8-1ubuntu1
ubuntu-dev-tools    0.153

延伸閱讀

Firefox 4.0 出來之後,一直沒有抽時間出來更新 CertAlert,不過最近看到 AT&T 上的 Facebook 流量莫名被轉到中國南韓去,似乎有某種暗黑勢力蠢蠢欲動。

頗擔心 CNNIC 有惡意作為,稍微更新了 CertAlert,讓它支援 Gecko 2.0 XPCOM API,可以裝在 Firefox 4.0 上。新版安裝檔可以於 github 下載。

Mozilla 官方 AMO 因爲疏於更新,暫時被拿下來了,將重新上傳等官方審閱後即可再次下載。

2011-03-29 01:30

官方 AMO 已經重新開放安裝,仍於申請審閱程序中。

Flash 沒你的份!

Source:FoxTrot

用 JavaScript/SVG 作筆順示範

自從 iPad 上市以來,市場似乎不少人對 Apple iPad 上少了 Flash 支援,頗有微詞。姑且不論當下 Flash 在市場上的佔有率與開發工具的普及程度。若我們從另外一個角度來看,從新的 HTML5 規格的推出與新型瀏覽器的 JavaScript 效率戰爭,瀏覽器本身與作業系統的介接程度與效能都有大幅的提昇。

某種程度上,我們隱約可以見到接下來的一兩年,瀏覽器上會出現的應用軟體局面。或許,到時候就已經不需要 Flash 的存在,只靠 JavaScript 與瀏覽器就可以達到現有 Flash 可以完成的效果。

半年前,因緣際會,查找了幾個國內外的筆順示範軟體。筆順這種功能,一般成年人大概用不著,但對於小學生或學習華語的外籍朋友,就很有參考價值。市場上似乎也有不少針對這種需求的筆順軟體

查找了一下免費資源,找到了國語推行委員會常用國字標準字體筆順學習網。這個網站的所有功能都是利用 Flash 開發,為了讓它可以在某些不支援 Flash 的場合使用,我試著查了一下這個網站的技術作法。其實它背後的筆順資料庫只是一組 XML 文件,利用前端的 Flash 逐步的繪出來而已。

於是試驗著用 SVG 重作一組前端,搭配 jQueryjQuery SVG 服用,光用 SVG + Javascript 也做出類似的效果,實際程式碼只約百餘行。

範例與原始碼請見在 Github 上的 Stroke-Order Project. 授權採 GPLv2。

不過除了現在還不支援 SVG 的 Internet Explorer 8 之外,目前這個小程式只有在 Gecko-based Engine (Mozilla Firefox) 上才顯示正常,至於其他的瀏覽器如 Webkit-based 的 Chrome, Safari 在 Windows 上有點異常,繪字遮罩沒有被正確的執行,所以會看到醜陋的畫筆,沒有字型外框。但在 Linux 上用 Chromium 倒是沒有問題,Opera 也頗正常。

短時間內,如果要只用 SVG 作跨瀏覽器的多媒體工具,可能還會看到這種問題,得避開如 SVG1.1 這種大家實做都還不完整的規格,改用 Web Canvas 可能會安全一點。但如果是客製化平台,有自製 Web Runtime,大概就可以避免掉這種討厭的跨瀏覽器相容問題。

日本的 KanjiVG 計畫

另外一個跟筆順有關系的開源專案是 KanjiVG,但 KanjiVG 是針對日文漢字,字體跟筆順可能有所不同,還沒有動畫功能,但有一簡單的筆順檢視工具,論壇也有一些動態檢視工具的討論

基於 KanjiVG 的資料庫,衍生出了如部件組字輸入查詢等應用。KanjiVG 的授權為 Creditive Commons Attribution-Share Alike 3.0,於是你有興趣的話,可以拿這組資料作任何應用。

政府應開放資訊

反觀我所使用的教育部資料,雖然有了開源前端可用,但其實後端筆順資料庫的授權是不開放的。根據國語會的授權條款,只允許大眾使用非商業目的之學術研究、教育推廣用途之「網站連結」,若作其他用途,可能會遭到教育部依法追訴法律責任!不過從筆順學習網上的意見回饋表 (居然是 .doc 格式),看來「數位典藏與學習之學術與社會應用推廣計畫」有意推動將此資源開放使用,但還在詢問使用者意見的程度。

我並不清楚國語會當初建制此資源時,從承作委託者所協議授權為何,但限制此資源成為可自由共享的公共財卻是十分可惜的事情。因為其邊際成本幾乎為零,但民間可做的用途極多,至少可以利用作成英文版 (原筆順學習網為中文版,最需要的外國人士反而難以使用),甚至作到上述 KanjiVG 的其他利用。而筆順資料庫的初期投資不低,若能開放民間利用,對正體中文的推展應該有加成效果。

雖然台灣、美國國情有所差異,但同如同二月所出版的 Open Government 一書提到,許多國家的政府官僚行為其實是大同小異的。像是書中第一章 A Peace Corps for Programmers 中提到,受限層層官僚體制與合約架構,即便是只需五分鐘改變一個國家的名字的事情,也可能得等到幾個月甚至一年後的合約週期到達才能執行。

再加上政府機關總員額管理機制等人力精簡措施,各機關其實已經沒有專職開發人員,幾乎大部分的資訊系統均採外包機制,甚至連 RFP 都由廠商代理,在面對新技術與應用上的反應相對民間遲緩許多。這種體制,甚至連橫向的政府機關想再利用他部門的資訊都難以達成。

基於種種理由,在此響應 ScheeHOpenData 計畫,期待公部門能夠對各項資訊更加開放。

二月初發表了在 Linux 上移除 CNNIC 憑證一文後,受到相當多的文章引用與關注。

原文中,提到移除高風險憑證的作法,但其實我相信很多人弄不懂不同平台的作法,也不清楚所謂 NSS 的機制,沒有清除系統憑證,只是試圖移掉 Firefox 中的驗證。所以很多使用者不知道自己是否真的移除,或是以為移除,重新開啟 Firefox 後,因為 NSS 的設計,憑證又自動建入資料庫中。

依照目前的討論 (#542689, #476766),Mozilla 應該採無罪推論原則。也就是說雖然 CNNIC 的風評不佳,但在它實際作惡前,我們理因相信它無罪。雖然有一些技術上的提議,希望可以降低憑證管理的問題跟風險,但是這些功能恐怕需要點時間才會實踐。

所以,短時間內,使用者還是得自己做一些設定來自保。但是前文步驟又十分繁雜,我們需要給使用者一個比較簡單的操作措施。

在香港朋友 Benlau小兔黑黑倡議與支持下,我們寫了一個小 Firefox 附加元件,稱為 Cert Alert,這個元件的功能是「自動提醒」使用者,網頁中使用了特定 SSL Root CA 的內容。

這個附加元件採 MPL 1.1 授權釋出。你可以於 Firefox 附加元件網站下載安裝。開發者可於 Github 取得完整程式碼或提供建議。

另外一個值得推薦的是 timdream 所開發的 CA Untrustworthy。這個附加元件的功用是每次開啟 Firefox 時,自動移除或關閉高風險憑證。如此,若瀏覽使用高風險憑證網站時,Firefox 就會提醒你這是未受信任網站,你可以依照 Firefox 的憑證驗證機制來允許或關閉網頁。所以你就不用擔心,是否因為沒有完成移除系統憑證而造成安全問題啦。Tim 的 CA Untrustworthy 亦擺於 Github.

銘謝: Littlebtc 提醒 CertAlert 0.0.4 版前之 MITM 問題
備註: 中國朋友亦開發一 NoCNNIC 工具,可移除 Windows 平台的 NSS database 中 CNNIC 憑證。惟只支持 Windows 平台,且必須手動執行才可移除。僅供參考。

2011-03-27 updated

已更新支援 Firefefox 4.0

一月底開始,一些朋友開始討論 Firefox 3.6 中,將置入 CNNIC 的 CA 憑證。這件事情是去年年底,CNNIC 對 Firefox 申報納入 CNNIC 的憑證 (#476766),目前已於 3.6 版中內建 CNNIC 憑證。

目前此事已經在 Mozilla Security Policy mailing list 公開討論,在華人網路社群也引起一陣騷動。像是 AutoProxy 等社群都提出 CNNIC CA:最最最嚴重安全警告!。在原提案 #476766 中亦有人整理了一些客觀事實。

不過根據我主觀的看法,奉勸所有人盡快移除 CNNIC 相關的 CA 憑證!CNNIC 就是中國網際網路絡信息中心,是一個中國的非營利組織,提供中國網際網路的網域名稱、網段管理。

CA 憑證對於瀏覽器使用者而言,可以用來辨識特定網域是否為合法組織,部份瀏覽器功能甚至依據有否憑證,對網頁開啟進階存取權限。前提是 CA 維持善良管理人義務,嚴格管理所核發的憑證、簽章。

CNNIC 過去最大的爭議即是曾經發布過中文上網官方版軟體,名為提供中文網址導引服務,實質則包含流氓軟體的功能,主要功能是一般輔助上網軟體,但核心卻用 rootkit 技術讓你無法刪除,與木馬/病毒程式一般。雖說這只是一項前科,但是中國政府持續拿著民族主義、國家安全為藉口,實施數種網路管制,甚至滲透國外企業、政府網路,根本是合法的網路流氓。而 CNNIC 背後支持的政府組織是中華人民共和國工業和信息化部中國科學院中國科學院計算機網絡信息中心 等中國政府組織。很難說,哪一天 CNNIC 不會被控制作為攻擊工具之一。

除了 CNNIC 自行發布的 CA Cert Root 外,其實 CNNIC 也已經取得 Entrust.net 所發布的次級憑證。建議所有台灣政府單位,一律移除 CNNIC 相關憑證。

若你覺得此事關係重大,可以以投票方式附議 Bug 542689 – Please Remove “CNNIC ROOT” root certificate from NSS,提高該問題的被重視程度。

跳板風險

其實 Mozilla 先前也曾經遭遇過亂搞的安全憑證公司。原則上,任何人要申請特定網域的簽章,必須提供書面資料,證明你是該網域的擁有者。因為 SSL 憑證一個主要功能是防止釣魚網站欺騙一般消費者,若使用假冒的憑證,使用者很容易就發現網址異常。

若安全憑證公司絲毫不做基本的驗證,任何人都可以申請想仿冒的網域,然後以中間人攻擊 (MITM) 詐騙你交出個人資料。想像,你收到一封 PCHOME 的廣告,連到一個假的網站,這個網站提供了完美的 SSL 憑證,瀏覽器沒有提示你任何異常,除非你刻意去點選確認簽章,否則很自然就會上當。

Mozilla 的事件起因,是有人回報一安全憑證公司透過廣告郵件推銷新的服務。但這個憑證公司的服務卻允許你隨意購買任一網址的簽章,於是你可以購買並假冒任何網站。Eddy Nigg 寫了一份詳盡的說明,當時並做了一個驗證概念的 Mozilla.com 憑證。在事情曝光後,Mozilla 已撤除這組組憑證了。

移除 CA 憑證

驗證方法是開啟 CNNIC 的網址衛士 (使用 Entrust.net) 或 CNNIC 的 ENUM 試驗平台 (使用 CNNIC Root Cert)。若你的瀏覽器絲毫不給警告的就讓你存取,你的系統即已安裝 CNNIC 憑證。

2010-02-23 更新請使用  CertAlert 與 CA Untrustworthy 等工具來移除或警示可疑憑證。

在 GNU/Linux Debian, Ubuntu 上,系統保持一份共用的 CA 憑證,許多網頁工具如 Firefox, curl, wget, Chrome 均共用同一組設定。因此最簡便的方法便是關閉系統上有問題的憑證。

作法是以 root 在終端機內重新設定以下指令

# dpkg-reconfigure ca-certificates

找到 mozilla/Entrust.net_Secure_Server_CA.crt 一列,反選取之,選擇確認即可。或者直接編輯 /etc/ca-certificates.conf,一樣找到此行後,於該行開頭加入驚嘆號 (!),然後重新以 root 執行一次 update-ca-certificates.

另外,你也得到瀏覽器手動刪除原已匯入之憑證。注意,若該筆憑證下方有多筆簽章,你必須刪除全部簽章。見圖

按下 Delete, 重新啟動 Firefox,如此即可移除相關的 CA 憑證,其他瀏覽器需比照辦理。你若使用其他作業系統,請參考 Felix Yan 所整理之 從「受信任的根證書」裡趕走CNNIC

以下補充說明 (20100203):

許多網友認為,即使系統有此憑證,也不至於影響系統。

事實是,若有此憑證,你將被剝奪警覺的能力,像是痛得知覺消失一樣。當攻擊事件發生時,唯一可以主動提示你的 SSL 機制也可能失效。在中國網路長城的「內部網路」,網址被攔截、轉換是很平常的事件,即使你在網外,也可能在網站轉址攻擊事件大規模網頁綁架轉址發生時,變成受害者。

除了網址之外,這份憑證也可用於不同的連線服務加密認證。我並不想因為系統上存有一份無須有的 SSL 憑證,造成我日常認為經加密而安全的 SMTP/IMAP/IM 「可能」偷偷地遭到攔截、擷取資料。而我卻一無所知。

更新 (2010-02-23)

請使用  CertAlert 與 CA Untrustworthy 等工具來移除或警示可疑憑證。

若 Firefox 開發延伸套件時,應該會知道 Firefox 對於外掛並沒有安全防護機制的,只要你能裝進系統,大約就可以使用所有的元件或存取系統資源。延伸套件被視為可信賴的軟體,開發者應負起各延伸套件的安全性。

對此,Firefox 在 Java Script 開發環境的安全設計主要分為賦權未賦權的兩種安全模式。賦權的環境中,軟體可以存取所有的 XPCOM,沒有任何限制,於是它可以讀取或修改使用者的歷史紀錄、Cookie 等,甚至存取所有系統檔案。而 non-privileged 則僅提供限制嚴格的 HTML DOM API 權限,Script 的存取也依照其網址網域名稱給予嚴格限制,避免 XSS 或本地檔案讀取等安全問題發生。

無論是外部的網頁,或者是 XUL 軟體,都是使用 XML/HTML/Java Script/CSS 來撰寫,因此概念上都是由 Window 載入 XML 文件,並透過 Java Script 來存取 DOM API。

開發延伸套件時,凡是在 XUL Overlays 或 XPCOM Components 中的程式碼,都是給予完全的存取權限。而從外部網頁載入的內容,應該給於其未賦權的權限。這種安全模式的設計,乃是防止網頁上的程式可以任意存取系統資源,是一道安全保護牆。

由於 Mozilla 社群並未對安全模式定義名詞,這裡暫區分稱呼如下兩種安全模式

  • Web content document (non-privileged)
  • Chrome document (privileged)

各個程式的安全模式可依照該載入網址作區別,例如 chrome:// 有完全權限、http://example.com 則可存取 example.com、file:/// 則可存取本地檔案。

你也可在利用 PrivilegeManager  詢問使用者後存取 XPCOM 或者讓 XMLHttpRequest 跨網域存取。除了預設依照網址判斷外,開發者可以設計不同的內容使用安全模式,開發者可以決定直接載入網路資料後在 Chrome Document 中執行,或者利用 type=”content” 之方式使其載為 web content document.

但是剪下貼上是一個開發者都會犯的錯誤,最常見的錯誤之一就是直接把外面抓回來的資料,用 innerHTML 直接塞進 chrome document 中。有時候資料中會含有一些 java script,雖然 <script /> 中的語法不會被執行,但是 <img onerror=”alert(‘xss’)”> 這種程式碼還是會被觸發,外部資料中夾帶程式碼的狀況還是相當多,因此凡是處理外部連結都要小心。

Security Assessment Roberto Suggi Liverani 與 Nick Freeman 在上個月初於印度舉辦的 SecurityByte & OWASP AppSec Conference 中,與今年年中的 DefCon 17,發表了幾個 Mozilla 上的零時差漏洞。根據他們的文章與簡報,最常見的就是如 RSS Feeds 中的 <description> 的程式碼會被觸發執行、或者像是 FireFTP 1.1.4 以下的版本,會執行伺服器上的歡迎頁面。或者是熱門的 ScribeFire 3.4.3 以下版本,會以 chrome document 執行 <img onLoad=”alert(‘xss’)”>。

避免這些錯誤的方法之一是盡量使用 DOM manipulation methods 來塞入內容。在 Security best practices in extensions 一文中,講解了數個開發安全延伸套件的方法與注意事項,像是無論如何得執行他人的 Script,那就用 evalInSandbox 來執行。

另外你若得在兩種安全模式間互傳資料,正確的作法應該是盡量利用 DOM Event.