直播中
在顯示屬性和內(nèi)容時需要用到的兩個主要的類:
System.IO.FileInfo:提供創(chuàng)建、復(fù)制、刪除、移動和打開文件的實例方法,并且?guī)椭鷦?chuàng)建 FileStream 對象。
System.IO.StreamReader:實現(xiàn)一個 TextReader,使其以一種特定的編碼從字節(jié)流中讀取字符。除非另外指定,StreamReader的默認(rèn)編碼為 UTF-8,而不是當(dāng)前系統(tǒng)的 ANSI 代碼頁。UTF-8 可以正確處理 Unicode 字符并在操作系統(tǒng)的本地化版本上提供一致的結(jié)果。
Showfile.aspx頁面主要代碼:
<asp:Label id="FileDetail" runat="server"/>
我們只是將文件的屬性信息和部分內(nèi)容顯示在此Label上。所以沒有其他復(fù)雜的代碼。
獲取文件信息和內(nèi)容的主要代碼都在Page_Load方法中(代碼在showfile.aspx.cs文件中):
//接收傳入的參數(shù),確定需要操作的文件名稱
strFile2Show = Request.QueryString["file"];
//根據(jù)文件名實例化一個FileInfo對象
FileInfo fi = new FileInfo(strFile2Show);
FileDetail.Text = "文件名:";
FileDetail.Text += strFile2Show+"<br>";
FileDetail.Text += "文件大小";
//獲得文件的大小,然后變換單位為KB
FileDetail.Text += (fi.Length/1024).ToString()+"K<br>";
FileDetail.Text += "創(chuàng)建文件時間:";
//獲得文件的創(chuàng)建日期
FileDetail.Text += fi.CreationTime.ToString();
FileDetail.Text += "上次訪問時間:";
//獲得文件的上次訪問日期
FileDetail.Text += fi.LastAccessTime.ToString()+"<br>";
FileDetail.Text += "上次寫入時間:";
//獲得文件的上次寫入日期
FileDetail.Text += fi.LastWriteTime.ToString()+"<br>";
//實例化一個StreamReader對象,用于讀取此FileInfo的內(nèi)容
StreamReader FileReader = fi.OpenText();
//定義一個長度為1000的字符數(shù)組作為緩沖區(qū)
char[] theBuffer = new char[1000];
/*ReadBlock方法:從當(dāng)前流中讀取最大數(shù)量的字符并從索引開始將該數(shù)據(jù)寫入緩沖區(qū)。
參數(shù):
char[] buffer:方法返回時,包含指定的字符數(shù)組
int index:buffer 中開始寫入的位置
int count:最多讀取的字符數(shù)
*/
int nRead = FileReader.ReadBlock(theBuffer,0,1000);
FileDetail.Text += new String(theBuffer,0,nRead);
//關(guān)閉此 StreamReader 并釋放與之關(guān)聯(lián)的所有系統(tǒng)資源
FileReader.Close();
到目前為止,我們實現(xiàn)了一個簡單的web頁面的服務(wù)器磁盤管理應(yīng)用程序,可以查看、刪除目錄和文件。如果需要修改文件、新建文件和文件夾等功能,只需稍作修改,添加上相應(yīng)的代碼就可以。由于我們只是通過這個程序說明服務(wù)器中存在的安全隱患,所以在這里就不再實現(xiàn)這些功能了。
通過這三個簡單的程序,我想大家已經(jīng)能夠清楚的認(rèn)識到這一漏洞的危害性了,如果我們不加防范的話,其他用戶的程序就能被惡意使用此功能的用戶查看、刪除,服務(wù)器的系統(tǒng)日志、系統(tǒng)文件也沒有任何安全可言了。