防毒軟體對資安的負面影響

在 2016 年底的時候,Chrome 的資安總監 Justin Schuh 在推特上跟人筆戰。他提到「防毒軟體是阻礙我研發安全的瀏覽器最大的障礙」,然後他隨手列出許多防毒軟體造成的漏洞。這之後在 Hacker News 上引起很大的討論。

在 2017 年初,前 Mozilla 工程師 Robert O'callahan 也跳出來說他也碰過許多防毒軟體的問題,所以他推薦已經升級到 Windows 10 的大家,不要再買防毒軟體了,移除他們,使用 Windows 內建的就好。Robert 其實在 2012 年就曾經在 Mozilla 的公開討論區提到防毒軟體的問題,不過那時 Mozilla 的公關要求他停止了,因為怕這會影響防毒軟體公司跟他們的關係。

節錄兩位工程師提到的問題:

  • 替換掉系統DLL,但是卻換成一個比較不安全的版本,如關閉 ASLR
  • 把不安全的格式處理碼注入系統核心
  • 防毒軟體自己通常要求要在系統最高層級執行,反而成為一個容易攻擊的目標,以取得最高存取權。
  • 防毒軟體公司的員工能力不足,常寫出有漏洞的程式。比如先前趨勢科技的密碼管理工具才被爆出能做出遠端執行程式的漏洞。
  • 常常發生把瀏覽器搞掛的事情。
  • 讓瀏覽器無法更新。
  • 在攔截 https/hsts 封包時反而把其搞掛

有趣的是,兩人都推薦 Windows 內建的防毒軟體,因為依照瀏覽器的紀錄,只有這款沒出現什麼問題。感覺他們是希望有款比較沒有侵略性的防毒軟體。依照 Justin 自己在另一篇文章的說法,防毒軟體已經是資安的最後一道關卡,軟體產業應該注重於更早期避免問題的產生,比如說在產品設計階段就以資安為考量,而不是最後讓消費者感染後才來偵測以及治療。

敗家2012

2012年共敗家約一萬三千多元:

  • 音樂:2300
  • 娛樂書籍:850
  • 動畫:2200
  • 程設:2200
  • 遊戲:1900
  • 漫畫/同人:960

比想像中多,因為今年 Humble Bundle 式的東西變多了,而且也開始買數位音樂。 粗體為我最喜歡的敗家。 遊戲買了很多,卻沒時間玩,實在有些囧。

音樂 58 濱崎步 音樂盒作品集 二手
音樂 20 MISIA Love & Ballads 二手
音樂 90 Humble Music Bundle Humble Bundle 數位商品
音樂 20 KOKIA Coquillage iTunes 數位商品
音樂 20 Classical Music iTunes 數位商品
音樂 100 Random music iTunes 數位商品
音樂 162 Coldplay Mylo Xyloto iTunes 數位商品
音樂 19 絢香 為愛而夢 (1首) KKBox 數位商品
音樂 19 戀愛的抑止力-type EXCITER-/水樹奈奈 (1首) Omusic 數位商品
音樂 57 Coldplay X & Y (3首) Omusic 數位商品
音樂 95 下川みくに] 翼 〜Very Best of Mikuni Shimokawa〜 (5首) Omusic 數位商品
音樂 30 Game Music Bundle 4 Game Music Bundle 數位商品
音樂 30 Game Music Bundle 2 Game Music Bundle 數位商品
音樂 250 梶浦由記 Fiction 普威爾
音樂 805 a light, a life
音樂 225 Ghost in the Shell O.S.T. + 普威爾
音樂 225 Ghost in the Shell O.S.T. 2 普威爾
娛樂書 450 YU-NO 設定集 二手
娛樂書 160 心理學家教你59秒變A咖 二手
娛樂書 69 EVANGELION ORIGINAL Tv版劇本集 東販 二手
娛樂書 111 日本漫畫大師講座 簡體
娛樂書 100 機器人故事集
娛樂書 古書堂事件手帖
動畫 205 機動戰艦 二手
動畫 800 涼宮春日的憂鬱限定版+ 普威爾 二手
動畫 774 聖天空戰記 普威爾
動畫 318 驚爆危機 DVD 1,2 普威爾
動畫 10 宇宙海賊哈洛克 VCD
動畫 50 隨風飄的月影蘭
動畫 10 機動戰艦電影版
程設 884 RubyMine IDE Fastspring Software 數位商品
程設 651 Ruby Design Patterns 數位商品
程設 267 Programming Principles and Practice Using C++ 大陸英文版
程設 177 Clean Code 大陸英文版
程設 100 松本行弘的程式世界
程設 100 程式設計範式與OOP的思考術
遊戲 349 ? Dlsite 數位商品
遊戲 351 ? Dlsite 數位商品
遊戲 189 Humble Bundle V (Limbo) Humble Bundle 數位商品
遊戲 88 Humble Bundle 7 (Indie Game the Movie) Humble Bundle 數位商品
遊戲 146 Fall Bundle (to the Moon) Indie Royale 數位商品
遊戲 30 IOS Dead Space iTunes 數位商品
遊戲 312 Eve Burst Error MangaGamer 數位商品
遊戲 73 Galcon Steam 數位商品
遊戲 109 L.A. Noire Steam 數位商品
遊戲 175 Final Fantasy VII 數位商品
遊戲 73 Indigo Prophecy GOG 數位商品
漫畫 200 大同萌會
漫畫 40 Arcana 二手
同人 70 IRON SIGHTS
同人 100 少女忍者龜
同人 100 童年崩壞
同人 150 KID 2
同人 150 KID 3
同人 150 KID 1
同人 100 3本舊日本清倉同人誌 二手

Kirikiri 吉里吉里全螢幕時維持畫面比例

有些使用 Kirikiri 系統在全螢幕時畫面會被壓扁(因為螢幕本身解析度跟程式本身的解析度比例不同)。這時可以使用最新的 2.32 版,因為新版會自動調整成正確的比率,在寬螢幕上左右兩邊會留黑。

先在吉里吉里 ダウンロードページ下載 kr2_232r2.zip 後,把 krkr.eXe 解壓縮出來放在原來程式的資料夾後執行即可。原來的程式要是有使用其他的 dll(如krmovie.dll)那麼也要用最新版裡面的替換。

修復首頁

因為沒有想到 WordPress 會自行幫我的文章加油添醋,所以原本放在首頁的一些 html 原始碼都在斷行處添加了 <p> 或是 <br> ,導致首頁顯示到一半就出現問題。當初為了告知大家不要用 IE6 就添加了這段程式碼,結果在上次更新 Uniform Renamer 的文章時 WordPress 就自行改壞了首頁,實在是悲劇。看來得想辦法關閉那些 WP 自認為貼心的竄改文章功能,並且把 editor 從 TinyMCE 換到 WYISWYM 編輯器了。

不過過了兩三個月還沒有人說,果然這裡還是很冷……

初級資料庫設計

這裡的內容來自我的老師 David White 的課以及他的書 Data Modelling The Foundation of Information Systems。目前沒有附 ERD 圖,所以可能有些地方不是很容易懂。

命名

當命名物件跟屬性時需符合以下規則:

  • 使用單數詞作名字,不用複數詞。這樣子能更容易自動產生正確的描述句(程式可以自動判斷把單數詞改為複數詞)。
  • 只使用一種命名規則(CamelCase 或者 Underscore_Naming),不要混用。
  • 名字要能描述功能,比如說一個紀錄元件安裝時間的欄位該命名為 WhenComponentInstalled 而不只是 WhenInstalled ,不然在範圍外會跟其他要安裝的欄位造成混淆。試著讓文法正確。
  • 當使用某些通用的詞(如 description),應該在詞前面添加形容詞(如 ProductDescription)

當命名屬性時需符合以下規則:

  • 人名欄位的命名使用 GivenName(名)與 FamilyName(姓),這兩個命名沒有文化隔閡,也沒有宗教或禮俗上的含意。使用一般常見的 FirstName 或 LastName 則會導致不同文化上的理解錯誤。
    (註:也可考慮提供使用者另外一個欄位,專門存放使用者自己想要看到的姓名)
  • 多添加形容詞以避免混淆。但是在那些 Foreign Key 的欄位,還是該前置該 Key 原來的名字,以便識別。
  • 不要使用像是 "Count" 這樣的 SQL 保留字來命名,因為資料庫不能接受這些名字。
  • 非必要不要用 "Date" 來命名。資料庫系統有 date/time 類型的欄位,而原本設計是 Date 的欄位常會後來要改成 date/time 。使用 WhenXxxYyy 來命名 date/time 欄位,比如說 WhenEnrolled、WhenContractStarts、WhenContractEnds。

常見的命名問題

  • 使用複數詞作名字
  • 沒有依照大眾普遍接受的方式縮寫
  • 英文大小寫方式不一致
  • 英文動詞時態不一致,如 WhenXxxBegan 相對於 WhenXxxEnds。
  • 名字不夠清楚,如 WhenInstalled 沒有標示安裝什麼東西。
  • 使用太過廣義的詞,如 Description 。
  • 名字欄位使用 LastName、ChristianName 等有文化差異性的命名法。
  • Foreign Key 的命名沒有前置原表的名字。比如說 Customer 應該改為 AnybodyCustomer ,才能一看就知道這欄位由 Anybody 這個 table 而來。

表格 table 設計

表格應該代表一個物件不會改變的本質,而不是會改變的狀態。舉例來說,一個學校管理資料庫常常會有學生 Student 與職員 Employee 兩個表格,但是這樣子的設計沒有考量到職員也能來修課當學生的狀況,學生與職員都是一種可變動的身份,所以不應該拿來當作表格名稱。在這個情況使用「人 Person」當作表格的設計會更有彈性,因為「人」是本質,不會隨著時間改變。而會改變的狀態,通常使用一個欄位來表示。

繼承與類別

「人」這個概念也有狹義的時候,比如說交易時對象不一定會是人,有時候也是會有公司機關之類的,所以在民法上有「自然人」以及「法人」這兩種概念。在這個時候,使用「Anybody 主體」這個母類別表格,然後下面繼承「Person自然人」「Organization法人」兩種子類別表格,能夠做出更加有彈性的架構。當使用繼承這種機制的時候,要注意幾個事項:

  1. 子類別必須是永久性的,就如自然人永遠不會變成法人。
  2. 子類別必須是母類別之內的,如 Person 跟 Organization 都是 Anybody。
  3. 各個子類別的欄位不能完全相同,不然就失去分開類別的意義了。
  4. 各個子類別必須有本質上的不同,如自然人是活著的,而法人是概念上的,雖然兩者都能成為簽署合約。

相同的繼承概念也能夠使用在「交通工具→汽車、飛機」上。

時間概念

萬事都會隨著時間而改變,而資料庫最好是設計成會紀錄這些改變,以便將來能查訊。通常一個事件有開頭也有結尾,以 WhenBegan 還有 WhenEnded 來命名。WhenEnded不會是主鍵,因為主鍵不能為 null。

對自身的關聯 Recursive Association

一個表格可以對本身作關聯,比如說管理人這種關係。如果每個人只能有一個管理人,那麼可以直接對表格本身的 PK 作關聯,這被稱為樹狀自身關聯(Tree Recursion)。如果一個人能有複數的管理人,那就必須新增一個 Supervision (管理)表格,有兩個 FK :PersonBeingSupervised 以及 PersonSupervisor ,這被稱為網路自身關聯(Network Recursion)。

狀態

如先前所探討的,事物除了能用不變的本質來區分外,也能用他們的行為或是發生在他們的事情等等依著時間發生的「狀態」來區分。就如同犯罪的人可被歸類為罪犯,簽了員工合約的人成為員工,繳了學費的成為學生。這些被視為狀態的改變,而要對這些狀態作區分就必須紀錄狀態改變的事件。

舉學生報名作為例子,也許我們必須紀錄以下的事件:遞交日、審核日、核可日、取消日等等。如果這些都放在 StudentEnroll 的表格上,那麼以後要增加新的狀態就必須更改整個 ERD 。為了改善這種問題,我們可以把事件集中放在另一個表格中,並且新增一個事件類別的表格。這樣子能讓狀態轉移事件有更大的彈性。

Mozilla 徵求嶄新的使用者留言概念

Mozilla Drumbeat | Beyond Comment Threads

Mozilla 基金會最近舉辦網路上公開徵選活動,徵求創新的未來網路新聞概念。這幾個禮拜進入第二個議題:嶄新的使用者留言概念,讓未來的網路新聞的使用者留言能夠更加進化。只要有任何奇特的想法、原型、影片等等都能上傳。而且議題也不限定於科技面,對於社群互動面也是很重要的考慮因素(比如說過濾沒有價值的留言,或者讓少數人的聲音能夠不被多數人掩蓋掉)。甚至只要有新的方法能夠讓使用者與新聞內容互動都可以提出來。

有沒有人有興趣一起想想有什麼好點子,截止日期是5月22日,我可以幫忙翻譯。