2009-09-29 37 views
0

今天,一位技術人員問我,如果jQuery(或一般JavaScript)能夠ping通其源並獲得關於文件系統的信息而不使用可執行代碼。我的膝蓋混亂的答案是,如果不使用AJAX,ASP.NET或其他可執行技術,IIS就不會允許這種情況發生。換句話說,從靜態HTML頁面運行的JavaScript可能會將有關其來自的Web服務器的信息撤回。對沒有支持可執行後端的服務器的JavaScript/jQuery回調

再次,這是膝蓋混亂的答案,僅僅是出於安全考慮,這是不可能的......但我並不認爲自己是一個全知的JavaScript/jQuery專家,所以我把它全部用於您。如果您知道這可以完成的方式,或者如果您確定無法完成,無論哪種方式,我都非常感謝您的反饋。

謝謝。

-Jessy埒


隨着解決方案迄今爲止,它們都需要服務器端技術,無論是ASP,ASP.NET,PHP,Web服務等。爲了更好地說明這個問題,我會給你確切的場景。

有一組10個HTML文件,全部靜態,只有HTML/CSS/JavaScript坐在IIS Web服務器的網站上。不允許使用ASP,ASP.NET,PHP和所有其他服務器端技術。這10個HTML文件具有更改的名稱和更改的大小等。需要解決的問題是顯示該時間點(該目錄瀏覽未啓用,我將添加)在該目錄中的文件的信息, 。從IIS

  1. REQUEST fileinfo.html
  2. 瀏覽器包含fileinfo.html
  3. fileinfo.html已使用Javascript/jQuery的調用回給IIS獲取文件和大小的信息
  4. IIS報告回有關文件的JavaScript/jQuery信息

我不認爲沒有使用某種服務器端技術,步驟3是不可能的。但是,我只是想確保我沒有聽說過新的黑客攻擊。

回答

1

不,這是不可能的,除非網絡服務器以某種方式公佈這些信息。正如你所說的,可執行文件需要在某個時候運行(或者發佈靜態信息或者在請求時動態檢查)。 AJAX通過在後端添加URL來工作。如果沒有URL來獲取文件系統信息,那是不可能的。

以上回答概述瞭如何使它成爲可能,所有這些都依賴於在某個時刻運行可執行代碼來將信息發佈到URL。我必須兩次閱讀這個問題,以確保提問者來自的是安全而不是「如何」。

0

所有你需要做的就是找到一種方法來包含web服務器信息並將其粘貼在一個html文件中。

您可以使用cron作業來更新包含統計信息的靜態頁面,或使用<insert language here>來動態生成它。

我能爲IIS專門說話,但Tomcat的自帶狀態XML料將涵蓋一些榜單:http://localhost:8080/manager/status?XML=true

0

唯一的程度,就可以得到「有關的文件系統信息」,而不在服務器上的代碼被設置爲向您提供信息是URL路徑中隱含的「文件系統信息」以及索引(如果可用)。

1

編輯

在你在你問題的第二部分描述的特定情況下,我不得不說沒有。我真的不知道如何才能使用Javascript來確定服務器上的數量或文件,大小和名稱。


以前,我說,你可以,只要你允許自己利用XML HTTP Request對象,它是在大多數瀏覽器的JavaScript實現的,並且你讓一些文件系統信息可以通過識別推斷在服務器上運行的服務器軟件(即,如果它是IIS,它可能是NTFS,如果它是Appache,它可能是ext3 ..等等)..不可否認,這不是一個完美的解決方案,而是一個最好的解決方案。

This page shows how to use the XML HTTP Request object。特別是,查找顯示如何獲取HTTP頭的示例。從那裏開始,所有你需要做的事情就是向託管你的JavaScript文件的服務器發送一個請求,然後檢查標題行,告訴你託管你請求的文件的服務器。

1

我能想到的唯一不用求助於服務器端腳本的方法就是允許目錄瀏覽,並使用隱藏框架在瀏覽器中加載目錄,然後使用JavaScript來解析隱藏框架的HTML和從那裏獲得你需要的信息。

但這是一個破解,而不是一個很好的解決方案。另外它可能會違反你的無目錄瀏覽規定 - 雖然目錄不能被普通用戶直接查看,因爲它是可以索引的,並且因爲你在一個隱藏的框架中顯示它,所以不需要太多的人來弄清楚查看該目錄的內容。

1

如果您事先知道文件名列表,或者可以在Javascript中生成/枚舉可能的文件名,那麼您當然可以通過XMLHttpRequest對象使用HTTP HEAD請求測試它們的存在,修改時間和大小,或者更簡單,jQuery的$.ajax功能:

urls = ["/file1.html", "/file2.html", "..."] 
$.each(urls, function(url) { 
    $.ajax(type: "HEAD", url: url, complete: function(data) { 
    var headers = XMLHttpRequest.getAllResponseHeaders() 
    # ...iterate over headers, using 'Content-Length', 'Content-Type', etc., 
    # to infer needed file information 
    }) 
}) 

如果其文件名不能預先知道,或者由程序生成的,但是,你會除非DAV被打開有問題的目錄是無法一一列舉。但是,任何不願讓您使用PHP或ASP的主機也不太可能提供DAV服務。 (但是,如果您確實有DAV,則可以使用HTTP動詞PROPFIND以XML形式獲取目錄的內容,然後使用Javascript在客戶端上處理該XML。)

相關問題