Include的利弊何在? 你知道Include 可以包含文件自身嗎?是的。你甚至可以包含幾次。唯一的限制是:你不能讓A包含B,而B又包含A。這樣的循環包含是不允許的。
另一個問題是,那些文件可以包含其他文件呢?實際上,通過設置IIS,你可以允許任何文件類型使用SSI。缺省地, .shtm,.shtml,.asp,.stm是可以使用Include的。
我們來看看如何使某種文件類型使用Include。在Internet管理器中,調出站點的屬性對話框,選擇MIME類型下的文件類型按鈕,執行“新建類型”,假設新建類型為:.dark。下面只需要把.dark文件類型和SSInc.dll關聯就可以了。關聯的意義在于:每次客戶訪問.dark文件類型時,先執行服務器端的Include指令。
關聯的方法是:在站點的屬性對話框中,選擇“主目錄”,選擇“應用程序映射”,然后增加一個映射:.dark和SSInc.dll
要注意的是,使用了Include的文件必須允許“執行腳本”或者“執行”權限。而如果你不需要在某種類型的文件里面使用包含,那么,簡單地刪除相應的應用程序映射就可以了。
關于使用Include的好處,我們在“什么是Include”一文里已經講了。如果你贊成下面的觀點,那么,Include的好處是顯而易見的:
第一:代碼量越大,bug越多!大的代碼量意味著開發周期長,意味著投入增加。 第二:某段代碼被重用的次數越多,bug越少!那些你現在還在使用的老的代碼往往是Bug Free的。
使用Include恰恰允許我們寫盡量少的代碼,盡量重用代碼。所以,Include是值得的。
關于Include文件的命名 微軟推薦我們給每一個Include文件帶一個.Inc后綴,以便于區別正常的ASP和HTML文件。但是,很多專家建議不要給Include文件一個.Inc,因為這可能帶來安全性問題。當黑客知道了或者猜測到你的Include文件的名稱,它可以從你的站點Download到你的源程序!有時候,這個問題很嚴重,特別是Include文件里面包含數據庫的用戶名和密碼,或者數據庫的連接字符串時候!
所以,最好你還是給包含文件一個看起來很正常的名稱,比如.ASP。當黑客取這個文件時,就看不到源程序了。如果你確實要區分正常的文件和包含文件,你可以把包含文件放進一個不同的路徑。
Include存在哪些安全性問題? 網上有很多討論Include安全性的文章。本文分析Include為什么會帶來安全性問題,怎樣預防。
你可能類似于下面的代碼存儲在一個叫Db.inc的文件中: <% Dim objConn Set objConn = Server.CreateObject("ADODB.Conection") objConn.ConnectionString = "DRIVER={Microsoft Access (*.mdb)};" & _ "DBQ=" & Server.MapPath("/MyDatabase.mdb") objConn.Open %>
你可以試試從瀏覽器上去拖這個文件:http://localhost/db.inc 你會很驚訝:源程序已經顯示在瀏覽器上。如果顯示不出來,你也可以通過查看瀏覽器的源代碼看到!也許你會說:我這個Include文件名稱很特別,別人是猜測不出來的。呵呵,真的么?如果你的某個頁面有錯誤,比如下面的錯誤信息出現了: Microsoft VBScript runtime error '800a004'
Invalid Class String
/db.inc, line 3
或者這樣的錯誤: Microsoft VBScript runtime error '800a004c' 路徑沒有找到. /db.inc, line 94
你的Include文件名稱就暴露無疑。憧梢栽贗nternet管理器中設置一下,不要把詳細的錯誤信息顯示到瀏覽器上)。
解決辦法: 1、 Include文件的后綴取成:.asp 2、 所有Include文件放進同一個目錄,并禁止這個目錄的“讀“權限。
|