允許根據用戶的請求而在服務器上運行程序,本身就是一種安全漏洞,因此只有在必要時,才允許用戶使用這些功能。
對於SSI,安全問題比較簡單,可以將其設置為只分析普通標志,不執行外部程序,這必須在配置文件中使用 Options IncludesNOEXEC選項,而非Options Includes選項。就能滿足對安全性的一般要求。
CGI程序的情況更為復雜。由於CGI可以用兩種方式設置,一種為由ScriptAlias設置CGI程序的路徑,另一種為通過設置CGI的後綴而設置的。通常只有在信任用戶有能力創建沒有(或很少)漏洞的CGI程序時,才使用後綴確認CGI程序。否則將會產生一些很糟糕的CGI程序,使得系統很容易被攻擊。因此將CGI程序限制在一些固定目錄下的做法更為常見,這至少讓一個CGI程序經過服務器管理員的一些檢查,避免明顯的漏洞。
CGI程序的另一個問題是,如果CGI程序要保存浏覽器客戶發布的數據,那麼它就要訪問系統的文件系統。通常 Apache服務器使用User和Group配置服務器運行的用戶和組屬性,Apache服務器啟動的CGI程序缺省也使用這個用戶和組屬性運行,也就擁有了這個用戶和組的權限,可以存取文件系統中的數據,這就對系統安全造成另一個影響。然而又必須讓CGI程序存取數據文件,因此就要適當調整User和Group的設置,使得它能夠存取合適的數據文件。
即使如此,由於所有的CGI程序都以同樣的用戶執行,那麼不同用戶的CGI就能相互操作別的用戶的數據文件,從而造成安全問題。為了使得不同的用戶以不同的用戶身份執行CGI,就需要使用程序的SetUID功能。因為SetUID 會帶來極大的系統漏洞問題。因此如非必要,不要使用SetUID程序,尤其是root身份的SetUID程序。設置用戶身份的問題可以使用Apache的suEXEC能力來幫助完成,它首先將身份改變為合適的用戶,再執行相應的CGI程序。