HTML Purifier – 另類的 PHP input validation

對 web programming 的人來說,XSS 很早以前就不是新聞,而且不管是為了 XSS、SQL injection 或是其他理由,任何 user input 都不應該被信任,在使用以前就應該先被 validate 或是 filter 過。

但是問題來了,一般的 filter 都很好解,有許多現成的工具,甚至大不了就用駝鳥法把 html 的特殊字元 escape 掉。但是對於需要依賴使用者輸入 html 的東西怎麼辦?最明顯的例子就是 blog site。Blog 站台總不能不讓使用者輸入 HTML 吧?甚至插插圖、秀秀跑馬燈、放個 YouTube video 之類的,應該也都是稀鬆平常的事情。但是要達到這種效果,該怎麼做呢?

比較明顯的有幾個解法:

  1. 鴕鳥法,XSS 管他去死。(別懷疑,真的有人這樣子) 網站安全度不重要,先讓使用者爽再說。
  2. 使用不同 domain 來避免 XSS 問題。例如 Blogger 的操作是在 blogger.com,但是 blog 是出現在 blogspot.com。
  3. 使用自己的 html 過濾器,重新濾一次使用者輸入的 html。安全又可以不用換 domain,缺點就是使用者一定會有些想用的 tag 被濾掉而感覺到不便。

對於像是 GYM 規模的公司來說,一定會有自己的 html input filter 工具。可是對於外界的 user 來講就不那麼方便了。現成 open source 領域中,大部分的 filter 大多未經考驗,或是功能太弱。

不過情況似乎有了些改變。現在 Edward Yang 寫了一套 HTML purifier,使用 LGPL license 釋出。看起來彈性空間很大,filter 的效果也很好。有興趣的可以看 HTML purifier 對目前常見的 XSS 過濾效果,或是它的 docs 了解一些 tune 的方式。唯一的缺點是 – 目前只有 PHP 版,而且想當然耳,要 parse 清楚這麼複雜的 HTML 當然程式碼又大又肥 …。不過即使如此,這大概還是 Open Source 界堪用最好的 HTML filter 了吧。

看完 HTML Purifier,我的感想跟 Joseph Halter 一樣….

You save my day by allowing me not to write another damned HTML parser.

兩個 MySQL 的舊「新」聞

連續忙了幾天,今天終於有時間把 RSS Reader 打開稍微看了幾篇東西,倒是有兩個跟 MySQL 有關的新聞:

  1. 根據這邊的消息,MySQL 確實在準備 IPO 了,而且去年賺了 $50 Million。看來我當初在這邊推論的 MySQL 營收實在差距太遠了啊。或許是因為 web 2.0 當紅導致 RDBMS 的需求大增?這又讓我想到以前 vv 的名言:「 Web 2.0 根本就是 Oracle 的陰謀嘛…」
  2. Google 釋出了一些 MySQL 補強的工具,並且用 Apache License 釋出 (Information Week 說的 GPL License 並不正確),放在 Google Codes 上面。重點是一些對於 MySQL 4.0.26 的 enhancement patch,不過不知道會不會被 merge 進下次的 MySQL release。不然每次 MySQL 有新版本就要重新做一次 patch 可是很累的啊… 另外可惜的是,根據這裡,這個 Enhancement patch 在 5.x 上面還不能 fully functional。如果 5.0 也可以用的話,市場接受度一定更高的吧…

如果想知道這個 Enhancement Tool 到底可以在 4.0.26 上面做些什麼,可以參考這裡