highlight.js

星期二, 3月 27, 2007

MySQL市佔率大有斬獲?

SD Times上面看到,根據Evans Data Corporation的調查報告指出(新聞稿在此),過去兩年內開發人員使用資料庫的比例從32%提升到40%,其中MySQL所佔的比例增加了25%,值得注意的是調查顯示2006年秋季在北美有65%的開發人員採用開放原始碼的工具,因此在新聞稿中推斷MySQL將會持續攀升。

其實這樣的結果並不令人意外,光是PHP的高市佔率,就可以幫MySQL卡下不小的位子,加上這給年來多種XAMP(我指的是XP/Linux+Apache+MySQL+PHP)的簡易伺服器軟體包風行,許多人不知不覺就用了MySQL,高市佔率是很正常的結果,但我比較思考的問題是,這樣的市佔率似乎沒有在書籍的銷售上反應出來?以中文書來看,脫離PHP而專門講述MySQL的書多半沒有好的銷售成績。

我心目中有個答案是許多不小心使用了MySQL的人,只希望MySQL可以做出正確的結果就好,至於MySQL的進一步探究,也許並不那麼重要?

星期五, 3月 23, 2007

編輯作品:網頁程式駭客攻防實戰--以PHP為例


近一兩年來,網頁開發無疑是技術書籍領域中獨占鰲頭的主題,不過有個有趣的現象,就是大部分的書籍都只是教導如何開發網頁程式,但是卻很少著墨在如何開發高安全性的網頁程式。本書就是針對這一點,以實際的程式碼來展示各種可能的漏洞與防禦對策。

本書一開始概略介紹網頁安全的觀念之後,便本著「不了解駭客就不可能防駭」的精神,以一個尋常的留言版程式,透過實際的攻擊,示範大家隨手都可能寫出來的程式裡,淺藏著多少的漏洞,凸顯網頁程式與一般應用程式在面對安全性時本質上的劇烈差異。

接著,作者彙整了14種駭客的攻擊手法一一詳解,並提出可能的對策。更重要的是,作者還舉出許多活生生的例子,都是在開發人員以為已經徹底封鎖駭客的攻擊之後,仍然存在的許多漏洞,更有許多知名軟體曾經範過的疏忽,再次提醒讀者仔細檢查程式的重要性。

經過上述的震撼教育後,作者再透過telnet直接連上HTTP伺服器直接溝通的方式,赤裸裸展示了前述各式攻擊手法運作的實況,同時也讓讀者瞭解到瀏覽器並不能限制駭客的攻擊方式,只要透過telnet連線,駭客更能夠以各種令人驚嘆的手法進行攻擊,切勿以為瀏覽器的限制可以成為一道值得信賴的防線。

全書到了這裡,算是已經完全體會到了駭客的無孔不入。因此,本書接著提供了多種檢查漏洞的方法,讓讀者可以針對自己所開發的程式,滴水不漏找出所有可能存在的漏洞。除此之外,作者也提供了兩個防駭工具,可以透過程式自動找出漏洞,不但可以提昇效率,也可避免人為的疏忽。

本書雖然是以PHP為主要討論的對象,不過書中所討論的主題,大體上也都適用於ASP、ASP.NET、JSP等這類伺服端的開發技術。對於網頁開發者來說,本書應該是迄今為止對於網頁程式安全性主題探討的最全面的中文書,頗值得一讀。

延伸閱讀:

星期日, 3月 18, 2007

書介:Ajax Patterns and Best Practices

由於AJAX的日漸火紅,越來越多的網頁開發人員都在嘗試套用這項技術的最佳方法。但除非您使用的是以伺服器端為主的應用程式框架(framework),否則就得自行透過JavaScript負責與伺服端暗通資料,並且操控瀏覽器端的資料與外觀。因此,JavaScript漸漸從用戶端的輔助角色,躍升成為整個網頁應用程式的主要核心。

如果發揮到極致時,整個網頁應用程式在用戶端就只剩下一個空的HTML網頁,加上建構網頁內容並擔負程式邏輯的JavaScript,以及伺服器端負責擷取資料與傳送資料的簡單程式。正由於如此,整體程式架構的好壞,就不只是會不會使用XmlHttpRequest物件的問題而已,Ajax Patterns and Best Practices這本書就是希望能夠幫助大家解決這個問題。

本書透過作者所彙整的9種pattern,提出建議的解決方案,所使用的工具在用戶端就是以JavaScript為主軸,而伺服端則以C#所撰寫的ASP.NET 2.0網頁或者是Java Servlet為例,主要的內容如下:
  • 第1章是簡單介紹AJAX的淵源與要素,並且比較相關技術,如果您並不是AJAX新手,大可跳過這一章。
  • 第2章主要是作為後續各章的基石,透過factory pattern建立了一個產生XmlHttpRequest物件的跨平台機制。在後面的章節中,凡是需要與伺服端溝通的部份,都是透過這一章的機制來完成,不需處理XmlHttpRequest物件的細節,而將焦點集中在每一章所要解決的問題上。
  • 第3章處理的是content chunking pattern,簡單的來說,就是將網頁區分為單獨的個別區塊,並透過AJAX技術載入個別區塊需要展示的內容。
  • 第4章提出的是cache controller pattern,主要解決的是如何為AJAX建立快取機制,使得AJAX的運作更有效率。
  • 第5章的permnutations pattern讓您可以建立一個資源封裝的機制,使得網頁應用程式可以依據用戶端的特性,以最適切的資料格式傳回同一份資料,確保用戶端可以為使用者展示正確的結果。舉例來說,如果用戶端使用的是WAP瀏覽器,那麼如果可以傳回特製的格式,就會比傳回一般的HTML格式要好,也能保證用戶端能夠閱讀結果。
  • 第6章可以視為是第3章的變化,談的是如何讓網頁中不同的區塊產生互動的機制,也就是當某個區塊因為使用者的操作或是其他原因造成狀態的變化時,讓相關聯的其他區塊也能夠產生對應的改變,這樣的問題稱為decoupled navigation pattern。
  • 第7章的presentation morphing pattern則是針對同樣的一份資料,讓它能夠在網頁上依據不同的目的或是功用,以不同的面貌同時呈現,並且可以在資料有所變動時,同時更新個別面貌的展現結果。舉例來說,當你透過表單來讓使用者輸入資料時,如果能夠同時以預覽的方式展示目前輸入的資料未來展示的樣子,就能讓使用者更確信輸入資料的正確性與適當性,而不需要等到資料輸入完畢送到伺服端後才發現錯誤而重新修改。
  • 第8章要解決的是與伺服端保持連線傳輸資料的問題,稱為persistent communication pattern,股票行情顯示的網頁就是最典型的範例。
  • 第9章的state navigation pattern則是對於如何為AJAX取得的內容建立瀏覽紀錄提出可能的解法,而不會在使用者按下熟悉的『上一頁』按鈕時,產生出乎意料的結果。
  • 第10章透過infinite data pattern處理伺服端會送來大量資料的狀況,建立分段接收與展示結果的機制,像是搜尋網頁就是大家耳熟能詳的例子。
  • 第11章提出了REST-based Model View Controller pattern,其實就是建立marshup的機制,讓網頁可以彙整外部來源的資料,重組後展示在網頁上,就像這些資料是從單一伺服器傳回的一樣。
整體而言,本書所提出的問題與解法頗具參考價值,不過作者本身的解說能力我個人覺得有頗大的進步空間,同時所下載的原始碼也很散亂,許多與書中的內容不符合。雖然如此,我還是很建議想要將AJAX列為網頁應用程式開發主要工具的程式員都可以讀讀這本書,未必要採用作者提出的程式碼,但參考一下其中的想法,應該也會有很大的幫助。

延伸閱讀: