根據統計,因Web運用所產生的安全威脅有日漸增多的趨勢,而Web的安全威脅與其他威脅最大的不同在於,Web的安全威脅通常在於程式設計師的疏失或經驗不足而造成安全漏洞,這與一般只要系統安裝修正程式(Patch)即可修補不同。
若想解除Web的安全威脅,最根本的解決方式在於重新檢視所有的Web程式,即所謂的Code Review,從中找出不安全的程式碼再加以修改,而且有些程式碼的掃描軟體可幫忙程式設計師找出不安全的程式碼。但是Code Review的工程浩大,很不切實際,因此「網路應用程式防火牆」(Web Application Firewall,WAF)應運而生。
WAF就如同一般防火牆的功能一樣,不過它主要是定位在網站主機的保護上。本文將使用開源碼社群中的最有名的網站伺服器Apache再加上modSecurity模組,來實作一個具有WAF保護的網站伺服器,所需套件如下表所示。
靜態網頁與動態網頁
HTML語言最早是被用來統一描述文件的表示方式,利用<>來描述文字表示方式,如即代表以粗體顯示,其運作方式如下圖所示。
|
▲網頁讀取的執行過程。 |
上圖中的網頁伺服器並非絕對必要,讀者利用瀏覽器即可瀏覽相關HTML檔的內容。此種網頁,稱之為「靜態網頁」,靜態網頁就像公佈欄一樣,僅可張貼訊息而無法與使用者有任何互動。但到了電子商務時代後,此種方式已無法符合所需,於是與資訊庫功能結合的「動態網頁」應運而生。「動態網頁」運作流程如下圖所示。
|
▲「動態網頁」運作流程。 |
使用者利用「參數」(如上圖中的帳號及密碼)與網頁程式互動,再使用網頁程式如PHP、ASP至資料庫捉取相關資訊後,動態組成HTML內容再回傳至使用者的瀏覽器上。而相關的Web安全漏洞,絕大多數都是因為網頁程式寫得不夠嚴謹而造成的。在說明Web安全之前,首先來談談Web及資料庫的基本概念。
Web參數的傳遞
動態網頁須藉由使用者傳遞參數的內容來執行相關的動作,HTTP通訊協定定義了GET和POST兩種的傳遞方式。GET方式是將參數接在URL後,直接傳遞給網頁程式:
而POST的傳遞方式,則是利用HTML中的