三種禁用FSO的方法

衆所周知,FileSystemObject組件的強大功能及破壞性是它屢屢被免費主頁
提供商(那些支持ASP)的禁用的原因,我整理了一下,本來只找到兩種方法,後來 被某人一刺激,硬是想到第三種不爲人所知的方法,呵呵,也不知道是不是這樣的。 

第一種:用RegSrv32 /u C:/WINDOWS/SYSTEM/scrrun.dll(win98路徑)來註銷該組件。此方法過於狠毒,屬於同歸於盡的方法,大家都沒得用,是下招 

第二種:修改Progid的值,在ASP裏調用組件的方式通常是 Set 對象名=Server.CreateObject("Progid"),這時候我們就可以通過修改註冊表中的Progid值從達到禁用該組件的方法。在 開始-運行中敲入regedit,然後找到HKEY_CLASSES_ROOT/Scripting.FileSystemObject,這時候我們就可以更改該Progid的值了,如改成Scripting.FileSystemObject8。這樣在ASP頁裏就這樣調用了: 
<%@ Language=Vbscript%> 
<% 
Set Fs=Server.CreateObject("Scripting.FileSystemObject8") 
%> 
(如果你前面沒有調用過該組件的話,則無須重啓,就可以看到效果了,否則請重
啓後看效果。) 
這時候我們看看還是用原來的調用方法的結果: 
<%@ Language=Vbscript%> 
<% 
Set Fs=Server.CreateObject("Scripting.FileSystemObject") 
%> 
這時候的運行結果爲: 
服務器對象 錯誤 'ASP 0177 : 800401f3' 

Server.CreateObject 失敗 

/aspimage/testfile2.asp, 行3 

800401f3 
(OK,達到我們的要求) 
該方法由於本人遲了兩步,結果就讓別人搶着回答了,這樣極大的刺激了我,結 
果就產生了第三種方法。 

第三種:細心的高手們會想,既然能通過修改Progid值來禁用該組件,那Clsid是否也可以來修改呢?(OK,你想得和我一樣)我們知道,除了CreateObject方法以外,也可以使用一般的<object>標註建立一個組件,我們可以在ASP裏面使用HTML的<object>標註,以便在網頁中加入一個組件。方法是: 
<object runat=server id=fs1 scope=page progid="Scripting.FileSystemObject"></object> 
Runat表示是在服務端執行,Scope表示組件的生命週期,可以選用Session,Application或page(表示當前頁面,也可缺省) 
這種寫法對我們沒用,還有一種寫法是: 
<object runat=server id=fs1 scope=page classid="clsid:clsid的值"></object> 
我們也可以通過修改該Clsid的值而禁用該組件,如將註冊表中HKEY_CLASSES_ROOT/Scripting.FileSystemObject/CLSID的值0D43FE01-F093-11CF-8940-00A0C9054228改成0D43FE01-F093-11CF-8940-00A0C9054229(改了最後面一位),這時候的寫法爲: 
<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054229"></object> 
看運行結果,沒問題,OK。這時候我們再用<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object> 
這時候就出錯了。 

新建一用戶:iusr_domain
IIS裏設置對應站點的匿名用戶IUSR_DOMAIN
CACLS: 設置目錄權限

這樣FSO可用,但不會影響別人
部分網友談到FSO的安全問題,特發一篇相關資料供大家參考,謝謝

現在絕大多數的虛擬主機都禁用了 ASP 的標準組件:FileSystemObject,因爲這個組件爲 ASP 提供了強大的文件系統訪問能力,可以對服務器硬盤上的任何文件進行讀、寫、複製、刪除、改名等操作(當然,這是指在使用默認設置的 Windows NT / 2000 下才能做到)。但是禁止此組件後,引起的後果就是所有利用這個組件的 ASP 將無法運行,無法滿足客戶的需求。
  如何既允許 FileSystemObject 組件,又不影響服務器的安全性(即:不同虛擬主機用戶之間不能使用該組件讀寫別人的文件)呢?這裏介紹本人在實驗中獲得的一種方法,下文以 Windows 2000 Server 爲例來說明。
  在服務器上打開資源管理器,用鼠標右鍵點擊各個硬盤分區或卷的盤符,在彈出菜單中選擇“屬性”,選擇“安全”選項卡,此時就可以看到有哪些帳號可以訪問這個分區(卷)及訪問權限。默認安裝後,出現的是“Everyone”具有完全控制的權限。點“添加”,將“Administrators”、“Backup Operators”、“Power Users”、“Users”等幾個組添加進去,並給予“完全控制”或相應的權限,注意,不要給“Guests”組、“IUSR_機器名”這幾個帳號任何權限。然後將“Everyone”組從列表中刪除,這樣,就只有授權的組和用戶才能訪問此硬盤分區了,而 ASP 執行時,是以“IUSR_機器名”的身份訪問硬盤的,這裏沒給該用戶帳號權限,ASP 也就不能讀寫硬盤上的文件了。
  下面要做的就是給每個虛擬主機用戶設置一個單獨的用戶帳號,然後再給每個帳號分配一個允許其完全控制的目錄。
  如下圖所示,打開“計算機管理”→“本地用戶和組”→“用戶”,在右欄中點擊鼠標右鍵,在彈出
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/001.gif[/img:67911d44a6]
在彈出的“新用戶”對話框中根據實際需要輸入“用戶名”、“全名”、“描述”、“密碼”、“確認密碼”,並將“用戶下次登錄時須更改密碼”前的對號去掉,選中“用戶不能更改密碼”和“密碼永不過期”。本例是給第一虛擬主機的用戶建立一個匿名訪問 Internet 信息服務的內置帳號“IUSR_VHOST1”,即:所有客戶端使用 http://xxx.xxx.xxxx/ 訪問此虛擬主機時,都是以這個身份來訪問的。輸入完成後點“創建”即可。可以根據實際需要,創建多個用戶,創建完畢後點“關閉”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/002.gif[/img:67911d44a6]
現在新建立的用戶已經出現在帳號列表中了,在列表中雙擊該帳號,以便進一步進行設置:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/003.gif[/img:67911d44a6]
在彈出的“IUSR_VHOST1”(即剛纔創建的新帳號)屬性對話框中點“隸屬於”選項卡:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/004.gif[/img:67911d44a6]
剛建立的帳號默認是屬於“Users”組,選中該組,點“刪除”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/005.gif[/img:67911d44a6]
現在出現的是如下圖所示,此時再點“添加”:

[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/006.gif[/img:67911d44a6]

在彈出的“選擇 組”對話框中找到“Guests”,點“添加”,此組就會出現在下方的文本框中,然後點“確定”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/007.gif[/img:67911d44a6]
出現的就是如下圖所示的內容,點“確定”關閉此對話框:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/008.gif[/img:67911d44a6]
打開“Internet 信息服務”,開始對虛擬主機進行設置,本例中的以對“第一虛擬主機”設置爲例進行說明,右擊該主機名,在彈出的菜單中選擇“屬性”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/009.gif[/img:67911d44a6]
彈出一個“第一虛擬主機 屬性”的對話框,從對話框中可以看到該虛擬主機用戶的使用的是“F:/VHOST1”這個文件夾:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/010.gif[/img:67911d44a6]
暫時先不管剛纔的“第一虛擬主機 屬性”對話框,切換到“資源管理器”,找到“F:/VHOST1”這個文件夾,右擊,選“屬性”→“安全”選項卡,此時可以看到該文件夾的默認安全設置是“Everyone”完全控制(視不同情況顯示的內容不完全一樣),首先將最將下的“允許將來自父系的可繼承權限傳播給該對象”前面的對號去掉:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/011.gif[/img:67911d44a6]
此時會彈出如下圖所示的“安全”警告,點“刪除”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/012.gif[/img:67911d44a6]
此時安全選項卡中的所有組和用戶都將被清空(如果沒有清空,請使用“刪除”將其清空),然後點“添加”按鈕。

[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/013.gif[/img:67911d44a6]
將如圖中所示的“Administrator”及在前面所創建的新帳號“IUSR_VHOST1”添加進來,將給予完全控制的權限,還可以根據實際需要添加其他組或用戶,但一定不要將“Guests”組、“IUSR_機器名”這些匿名訪問的帳號添加上去!

[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/014.gif[/img:67911d44a6]
再切換到前面打開的“第一虛擬主機 屬性”的對話框,打開“目錄安全性”選項卡,點匿名訪問和驗證控制的“編輯”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/015.gif[/img:67911d44a6]
在彈出的“驗證方法”對方框(如下圖所示),點“編輯”:

[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/016.gif[/img:67911d44a6]
彈出了“匿名用戶帳號”,默認的就是“IUSR_機器名”,點“瀏覽”:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/017.gif[/img:67911d44a6]
在“選擇 用戶”對話框中找到前面創建的新帳號“IUSR_VHOST1”,雙擊:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/018.gif[/img:67911d44a6]
此時匿名用戶名就改過來了,在密碼框中輸入前面創建時,爲該帳號設置的密碼:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/019.gif[/img:67911d44a6]
再確定一遍密碼:
[img:67911d44a6]http://202.100.116.12/paddy/bbsimages/fsosafe/020.gif[/img:67911d44a6]
OK,完成了,點確定關閉這些對話框。
  經此設置後,“第一虛擬主機”的用戶,使用 ASP 的 FileSystemObject 組件也只能訪問自己的目錄:F:/VHOST1 下的內容,當試圖訪問其他內容時,會出現諸如“沒有權限”、“硬盤未準備好”、“500 服務器內部錯誤”等出錯提示了。
  另:如果該用戶需要讀取硬盤的分區容量及硬盤的序列號,那這樣的設置將使其無法讀取。如果要允許其讀取這些和整個分區有關的內容,請右鍵點擊該硬盤的分區(卷),選擇“屬性”→“安全”,將這個用戶的帳號添加到列表中,並至少給予“讀取”權限。由於該卷下的子目錄都已經設置爲“禁止將來自父系的可繼承權限傳播給該對象”,所以不會影響下面的子目錄的權限設置。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章