|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2005-10-21, 10:35 AM | #1 |
榮譽會員
|
Windows 2003下提高FSO的安全性
ASP提供了強大的文件系統訪問能力,可以對伺服器硬碟上的任何文件進行讀、寫、複製、移除、改名等操作,這給學校網站的安全帶來巨大的威脅。現在很多校園主機都遭受過FSO木馬的侵擾。但是禁用FSO元件後,引起的後果就是所有利用這個元件的ASP程序將無法執行,無法滿足客戶的需求。如何既允許FileSystemObject元件,又不影響伺服器的安全性呢(即:不同虛擬主機用戶之間不能使用該群組件讀寫別人的文件)?以下是筆者多年來摸索出來的經驗:
第一步是有別於Windows 2000設定的關鍵:右擊C碟,點擊「共享與安全」,在出現在對話視窗中選項「安全」選擇項,將Everyone、Users組移除,移除後如果你的網站連ASP程序都不能執行,請增加IIS_WPG組,並重啟電腦。 經過這樣設計後,FSO木馬就已經不能執行了。如果你要進行更安全層次的設定,請分別對各個磁牒分區進行如上設定,並為各個站點設定不同匿名訪問用戶。下面以實例來介紹(假設你的主機上E碟Abc資料夾下設Abc.com站點): 1. 開啟「電腦管理→本機用戶和組→用戶」,新增Abc用戶,並設定密碼,並將「用戶下次登入時須更改密碼」前的對號去掉,選「用戶不能更改密碼」和「密碼永不過期」,並把用戶設定為隸屬於Guests組。 2. 右擊E:Abc,選項「內容→安全」選擇項,此時可以看到該檔案夾的預設值安全性設定是「Everyone」完全控制(視不同情況顯示的內容不完全一樣),移除Everyone的完全控制(如果不能移除,請點擊[進階]按鈕,將「允許父項的繼承權限傳播」前面的對號去掉,並移除所有),增加Administrators及Abc用戶對本網站目錄的所有安全權限。 3. 開啟IIS管理器,右擊Abc.com主機名,在彈出的表單中選項「內容→目錄安全性」選擇項,點擊身份驗證和訪問控制的[編輯],彈出所顯示對話視窗,匿名訪問用戶預設值的就是「IUSR_機器名」,點擊[瀏覽],在「選項用戶」對話視窗中找到前面新增的Abc賬戶,確定後重複輸入密碼。 經過這樣設定,訪問網站的用戶就以Abc賬戶匿名身份訪問E:Abc資料夾的站點,因為Abc賬戶只對此資料夾有安全權限,所以他只能在本資料夾下使用FSO。 一般問題: 如何解除FSO上傳程序小於200k限制? 先在服務裡關閉IIS admin service服務,找到Windows@System32@Inesrv目錄下的Metabase.xml並開啟,找到ASPMaxRequestEntityAllowed,將其修改為需要的值。預設值為204800,即200K,把它修改為51200000(50M),然後重啟IIS admin service服務。 ASP提供了強大的文件系統訪問能力,可以對伺服器硬碟上的任何文件進行讀、寫、複製、移除、改名等操作,這給學校網站的安全帶來巨大的威脅。現在很多校園主機都遭受過FSO木馬的侵擾。但是禁用FSO元件後,引起的後果就是所有利用這個元件的ASP程序將無法執行,無法滿足客戶的需求。如何既允許FileSystemObject元件,又不影響伺服器的安全性呢(即:不同虛擬主機用戶之間不能使用該群組件讀寫別人的文件)?以下是筆者多年來摸索出來的經驗: 第一步是有別於Windows 2000設定的關鍵:右擊C碟,點擊「共享與安全」,在出現在對話視窗中選項「安全」選擇項,將Everyone、Users組移除,移除後如果你的網站連ASP程序都不能執行,請增加IIS_WPG組(圖1),並重啟電腦。 經過這樣設計後,FSO木馬就已經不能執行了。如果你要進行更安全層次的設定,請分別對各個磁牒分區進行如上設定,並為各個站點設定不同匿名訪問用戶。下面以實例來介紹(假設你的主機上E碟Abc資料夾下設Abc.com站點): 1. 開啟「電腦管理→本機用戶和組→用戶」,新增Abc用戶,並設定密碼,並將「用戶下次登入時須更改密碼」前的對號去掉,選「用戶不能更改密碼」和「密碼永不過期」,並把用戶設定為隸屬於Guests組。 2. 右擊E:Abc,選項「內容→安全」選擇項,此時可以看到該檔案夾的預設值安全性設定是「Everyone」完全控制(視不同情況顯示的內容不完全一樣),移除Everyone的完全控制(如果不能移除,請點擊[進階]按鈕,將「允許父項的繼承權限傳播」前面的對號去掉,並移除所有),增加Administrators及Abc用戶對本網站目錄的所有安全權限。 3. 開啟IIS管理器,右擊Abc.com主機名,在彈出的表單中選項「內容→目錄安全性」選擇項,點擊身份驗證和訪問控制的[編輯],彈出圖2所顯示對話視窗,匿名訪問用戶預設值的就是「IUSR_機器名」,點擊[瀏覽],在「選項用戶」對話視窗中找到前面新增的Abc賬戶,確定後重複輸入密碼。 經過這樣設定,訪問網站的用戶就以Abc賬戶匿名身份訪問E:Abc資料夾的站點,因為Abc賬戶只對此資料夾有安全權限,所以他只能在本資料夾下使用FSO。 一般問題: 如何解除FSO上傳程序小於200k限制? 先在服務裡關閉IIS admin service服務,找到Windows@System32@Inesrv目錄下的Metabase.xml並開啟,找到ASPMaxRequestEntityAllowed,將其修改為需要的值。預設值為204800,即200K,把它修改為51200000(50M),然後重啟IIS admin service服務。 windows中開啟和關閉fso文件讀寫權限的方法 Windows中開啟和關閉FSO文件讀寫權限的方法: windows98系統 在DOS指令行狀態輸入以下指令: 關閉指令:RegSvr32 /u C:\WINDOWS\SYSTEM\scrrun.dll 開啟指令:RegSvr32 C:\WINDOWS\SYSTEM\scrrun.dll win2000系統: 在CMD指令行狀態輸入以下指令: 關閉指令:RegSvr32 /u C:\WINNT\SYSTEM32\scrrun.dll 開啟指令:RegSvr32 C:\WINNT\SYSTEM32\scrrun.dll Windows 2003: 在MS-DOS狀態下面按鍵輸入: 關閉指令:Regsvr32 /u c:\windows\system32\scrrun.dll 開啟指令:Regsvr32 c:\windows\system32\scrrun.dll |
__________________ |
|
送花文章: 3,
|
2005-10-21, 10:41 AM | #2 (permalink) |
榮譽會員
|
FSO對像模型在VB中的應用
從 Visual Basic 的第一版至今,VB中有關文件的處理都是通過使用 Open 、Write以及其它一些相關的語句和函數來實現的。隨著軟體技術的不斷發展,加上面向對像編程概念的日臻成熟,這些文件操作語句已經不能適應軟體不斷增加的複雜程度的需要了。因此,從VB6.0開始,微軟提出了一個全新的文件系統對像FSO。 一、簡介 文件系統對像FSO的英文全稱是File System Object ,這種對像模型提出了有別於傳統的文件操作語句處理文件和資料夾的方法。通過採用object.method這種在面向對像編程中廣泛使用的語法,將一系列操作文件和資料夾的動作通過使用對像本身的內容直接實現。 FSO 對像模型不僅可以像使用傳統文件操作語句那樣實現文件的新增、改變、移動和移除,而且可以檢測是否存在指定的資料夾,如果存在,那麼,這個資料夾又位於磁牒上的什麼位置。更令人高興的是FSO 對像模型還可以獲取關於文件和資料夾的訊息,如名稱、新增日期或最近修改日期等以及當前系統中使用的驅動器的訊息,如驅動器的種類是CD-ROM還是可移動磁牒,當前磁牒的剩餘空間還有多少。而以前要獲取這些訊息必須通過使用Windows API函數集中的相應函數才能實現。 FSO對像模型包含在Scripting 檔案類型庫 (Scrrun.Dll)中,它同時包含了Drive、Folder、File、FileSystemObject和TextStream五個對象。其中Drive用來收集驅動器的訊息,如可用磁牒空間或驅動器的檔案類型;Folder用於新增、移除或移動資料夾,同時可以進行向系統查詢資料夾的路徑等操作;File的基本操作和Folder基本相同,所不同的是Files的操作主要是針對磁牒上的文件進行的;FileSystemObject是FSO對像模型中最主要對象,它提供了一套完整的可用於新增、移除文件和資料夾,收集驅動器、資料夾、文件相關資訊的方法。需要注意的是,FSO對像模型提供的方法是冗余的,也就是說在實際使用中,FSO對像模型中包含的不同對象的不同方法進行的卻是同樣的操作,而且FileSystemObject對象的方法直接作用於其餘對象,所以在後面的文章中並沒有單獨提到FileSystemObject對象,千萬不要以為沒有提到就不重要,事實上FileSystemObject對像在整個FSO對像模型中無處不在;最後的TextStream對像則是用來完成對文件的讀寫操作的。 在初步瞭解了FSO對像模型之後,下面我們通過實際的程式碼對不同的對象進行進一步的闡述。 二、FSO對像模型的套用 (一)新增FSO對像模型 由於FSO對像包含在Scripting 檔案類型庫 (Scrrun.Dll)中,所以在使用前首先需要在在工程中引用這個文件,按下「工程」,「引用」,然後在「引用」對話視窗中選「Microsoft Scripting Runtime」前的複選框,然後按下「確定」。 要新增FSO對象可以採用兩種方法,一種是將一個變數宣告為FSO對像檔案類型: Dim fsoTest As New FileSystemObject; 另一種是通過CreateObject方法新增一個FSO 對像: Set fsoTest = CreateObject(「Scripting.FileSystemObject"); 在實際使用中具體採用哪種宣告方法,可根據個人的使用習慣而定。 完成了FSO對像模型的新增之後,就可以利用新增的對象模型的方法訪問下屬各個對象的內容來獲取所需訊息或進行相關操作了,具體的方法在下面結合各個對象分別講述。 (二)Drive對像 上面已經提到Drive對象是用來獲取當前系統中各個驅動器的訊息的。由於Drive對像沒有方法,其套用都是通過內容表現出來的,所以我們必須熟悉Drive對象的內容: 內容 功能 AvailableSpace 返回在指定的驅動器或網路共享上的用戶可用的空間容量。 DriveLetter 返回某個指定本機驅動器或網路驅動器的字母,這個內容是只讀的。 DriveType 返回指定驅動器的磁牒檔案類型。 FileSystem 返回指定驅動器使用的文件系統檔案類型。 FreeSpace 返回指定驅動器上或共享驅動器可用的磁牒空間,這個內容是只讀的。 IsReady 確定指定的驅動器是否準備好。 Path 返回指定文件、資料夾、或驅動器的路徑。 RootFolder 返回一個 Folder 對象,該對像表示一個指定驅動器的根資料夾。只讀內容。 SerialNumber 返回用於唯一標幟磁牒卷冊的十進制序列號。 ShareName 返回指定驅動器的網路共享名 TotalSize 以字元為服務機構,返回驅動器或網路共享的總空間大小。 VolumeName 設定或返回指定驅動器的卷冊名。 從上面的內容可以看到Drive對像基本上包含了日常操作所需的全部的驅動器訊息,因此在使用中是非常方便的。下面通過一個實例講述Drive對象的使用。首先在VB中建立一個工程,然後增加一個指令按鈕,將其Caption設定為「TestDrive」,然後在click事件中加入以下程式碼: Dim fsoTest As New FileSystemObject Dim drv1 As Drive, sReturn As String Set drv1 = fsoTest.GetDrive(「C:\") sReturn = 「Drive " & 「C:\" & vbCrLf sReturn = sReturn & 「VolumeName" & drv1.VolumeName & vbCrLf sReturn = sReturn & 「Total Space: " & FormatNumber(drv1.TotalSize / 1024, 0) sReturn = sReturn & 「Kb" & vbCrLf sReturn = sReturn & 「Free Space: " & FormatNumber(drv1.FreeSpace / 1024, 0) sReturn = sReturn &「Kb" & vbCrLf sReturn = sReturn &「FileSystem:" & drv1.FileSystem & vbCrLf MsgBox sReturn |
送花文章: 3,
|
2005-10-21, 10:46 AM | #3 (permalink) |
榮譽會員
|
其中GetDrive方法返回一個與指定路徑中的驅動器相對應的 Drive 對象。該方法的語法格式為object.GetDrive drivespec,object是一個FSO對象的名稱,drivespec用於指定驅動器的名稱。
按F5執行上述程式碼,按下TestDrive按鈕就會彈出一個訊息框顯示C碟的訊息。 (三)Folder對像 在FSO 對像模型中,提供了豐富的有關資料夾操作的方法,這些方法分別是: FileSystemObject對像 有關資料夾的方法 CreateFolder 新增一個資料夾 DeleteFolder 移除一個資料夾 MoveFolder 移動一個資料夾 CopyFolder 複製一個資料夾 FolderExists 搜尋一個資料夾是否在驅動器上 GetFolder 獲得已有Folder對象的一個實例 GetParentFolderName 找出一個資料夾的父資料夾的名稱 GetSpecialFolder 找出系統檔案夾的路徑 Folder對象的方法 用途 Delete 新增一個資料夾 Move 移動一個資料夾 Copy 複製一個資料夾 Name 檢索資料夾的名稱 在此需要強調一點,前面我們曾經提到過FSO對像模型包含的方法是冗余的,所以Folder對象的Delete、Move、Copy方法和FileSystemObject對象的DeleteFolder、MoveFolder、CopyFolder方法實際上是相同的,因此在實際使用中可以任選其中的一種。 和Drive對像一樣,下面通過實例演示Folder對象的套用。在VB下新增一個工程,然後在上面增加三個指令按鈕,然後在Form1的通用部分加入以下程式碼: Option Explicit Dim fsoTest As New FileSystemObject Dim folder1 As Folder 並且分別在三個指令按鈕的click事件輸入以下程式碼: Private Sub CmdCreate_Click() ' 獲取 Folder 對象。 Set folder1 = fsoTest.GetFolder(「C:") '新增資料夾 fsoTest.CreateFolder (「C:\Test") MsgBox 「folder C:\Test has created" End Sub Private Sub CmdDelete_Click() ' 獲取 Drive 對象。 Set folder1 = fsoTest.GetFolder(「C:") '移除資料夾 fsoTest.DeleteFolder (「C:\Test") MsgBox「folder C:\Test has deleted" End Sub Private Sub CmdGetPro_Click() '獲取資料夾的有關訊息 Dim sReturn As String Set folder1 = fsoTest.GetFolder(「C:\Windows") 'sReturn = 「The folder's Attributes is " & folder1.Attributes & vbCrLf '獲取最近一次訪問的時間 sReturn = sReturn & 「The folder's last access time is " & folder1.DateLastAccessed & vbCrLf '獲取最後一次修改的時間 sReturn = sReturn & 「The folder's last modify time is " & folder1.DateLastModified & vbCrLf '獲取資料夾的大小 sReturn = sReturn & 「The folder's size is " & FormatNumber(folder1.Size / 1024, 0) sReturn = sReturn & 「Kb" & vbCrLf '判斷文件或資料夾檔案類型 sReturn = sReturn & 「The type is " & folder1.Type & vbCrLf MsgBox sReturn End Sub 上述程式碼中提到的CreateFolder方法的語法形式為object.CreateFolder(foldername)。foldername指定了要新增的資料夾的名稱,而DeleteFolder方法的語法形式為object.DeleteFolder folderspec[,force],其中,folderspec用來指定要移除的資料夾的名稱,force是一個可選的布爾型參數,如果希望移除只讀內容的資料夾則將該值設為TRUE,預設值為FALSE。至於程式碼中用到的 Folder 對象的內容限於篇幅,就不詳細介紹了,讀者可參考VB文件中的相關內容。 (四)File對像和TextStream對像 由於有關File對象的複製,移除,移動等操作和Folder對像類似,所以這部分內容就不再重複。這裡主要講述利用File對像和TextStream對像操作文本文件。 通常對文本文件的操作包括在文本文件中新增資料,在文本文件中增加資料,移除文本文件的資料等操作。這些操作都可以通過File對像和FileSystemObject對象的相關方法完成。不過在使用之前,首先要新增一個文本文件,這可以通過三種方法完成。一種方法是使用FileSystemObject對象的 CreateTextFile 方法。要新增一個空文本文件,可以用以下語句: Dim fsoTest As New FileSystemObject, fil1 As File Set fil 1= fsoTest.CreateTextFile(「c:\testfile.txt", True) 第二種方法是使用 FileSystemObject 對像帶 ForWriting 標誌設定的 OpenTextFile 方法。 Dim fsoTest As New FileSystemObject, ts1 As New TextStream Set ts1 = fsoTest.OpenTextFile(「c:\testfile.txt", ForWriting) 第三種方法是使用File對象的帶 ForWriting 標誌設定的 OpenAsTextStream 方法: Dim fsoTest As |
送花文章: 3,
|