最近我發現在 IIS 6.0 上安裝 PHP5 有一些安全性的議題與一些安裝技巧,而這些問題都是一般管理人員不容易發現的部分,所以若有人希望 PHP 5 在 IIS 上面執行時,可以參考一下這篇文章。
---
如果你安裝 ISAPI Module for PHP5 ( php5isapi.dll ) 的話,在使用匿名存取的情況下,預設 PHP5 會以 匿名存取身份識別 ( IUSR_MachineName ) 身份執行。
不過如果你安裝 FastCGI Extension for IIS6.0 並搭配 PHP5 執行的話,在使用匿名存取的情況下,卻是以 應用程式集區身份識別 ( NETWORK SERVICE ) 身份執行。
這兩者的差別對於你設定網站目錄的 存取控制清單 (ACL) 非常重要,如果不小心設定錯誤,你的 PHP 程式就可以很輕易的建立目錄、寫入檔案到你的網站上。
例如 PHP 若被發現什麼安全性漏洞,而你又來不及更新 PHP 版本,而網站目錄權限又沒有被正確設定的話,就會輕易的被植入木馬,這是件非常危險的事,不得不謹慎行事。
---
另外,如果一台 IIS 上安裝多個不同的 PHP 網站時,也建議不要使用相同的身份識別進行站台設定,否則大家共用相同的權限,對網站安全性來說也是有風險的。
---
我個人比較推薦使用 FastCGI 執行 PHP,除了比較穩定外,執行速度也會比較快。
---
如果你希望所有 *.htm 的檔案也要執行 PHP 的話,自行定義 應用程式設定 中的應用程式副檔名對應
以 FastCGI 的安裝為例,設定的步驟如下:
- 新增一個 .htm 的對應值,並設定執行檔路徑為 C:\WINDOWS\system32\inetsrv\fcgiext.dll
- 開啟 C:\windows\system32\inetsrv\fcgiext.ini 設定檔
[Types]
php=PHP-All
htm=PHP-All
備註:不需要重新啟動 IIS 就會生效了!
---
如果需要透過 PHP 上傳檔案並使用 move_uploaded_file 函式時,若是 User 上傳「中文檔名」會導致檔案無法儲存的問題,若要解決這個問題必須要改寫程式才行。
原本的程式:
move_uploaded_file($file['tmp_name'],
$dir . mb_basename($file['name']))
修改後的程式:
move_uploaded_file($file['tmp_name'],
$dir . mb_basename(mb_convert_encoding($file['name'], "big5","utf8")))
---
PHP 5 安裝到 Windows 平台後,還會有「時區」的問題,原本在 Linux 平台執行時時區都很正常,也就是標準的台灣時區 GMT +0800,不過當移到 Windows 平台後會全部被重設成 GMT +0000 ( 格林威治標準時區 ),要解決這個問題必須在 WIndows 系統環境變數加入 TZ 變數,並指派變數值為 Asia/Taipei 即可,如下圖示:
設定完成後,記得要執行 iisreset 指令才會生效喔!
如果要查詢其他國家的時區變數值可以參考以下網址:http://www.theprojects.org/dev/zone.txt
相關連結