2010-08-10 34 views
1

好吧我有一個文件夾說... http://oldserver.net/file/index.jar如何保護文件,使其只能被java訪問?

我怎麼能夠保護文件「index.jar」從常規Web瀏覽器下載?

我以前見過這樣做,我只是想保護它免受網絡瀏覽器的訪問,並嚴格遵守java下載權限。

我的意思是由java下載訪問只是,我可以簡單地使用一個Java下載器下載index.jar。但我無法通過網絡瀏覽器下載。

我該如何保護文件「index.jar」?

謝謝:)

+0

什麼樣的Java下載的?運行在哪裏? – 2010-08-10 09:34:43

+0

也許有趣的是,當瀏覽器訪問一個applet時,index.jar被下載並存儲(緩存)到用戶機器本地。該擴展名被刪除,文件被重命名,但基本上該文件可用於本地訪問。例如,在我的Windows機器上,它們被存儲在 $ USER_HOME $ \ Application Data \ Sun \ Java \ Deployment \ cache – 2010-08-11 12:09:33

回答

6

你需要思考這個需求的具體含義 - 從服務器的角度來看,它如何判斷傳入請求是否是「java下載」?

總之,我不認爲有一種方法可以確切地做你想做的事情。保證資源安全的經典方法是要求認證(即,您需要一個有效的用戶名和密碼才能獲得index.jar文件),但聽起來並不像您想要的那樣。

請記住,Java只是簡單地向連接發送HTTP請求(或其他知道如何說話的協議)。 任何其他程序都可以發送相同的請求,所以很難以您指定的方式強制執行此限制。

可能會模擬您所追求的一種方法是不能通過HTTP訪問index.jar,因此瀏覽器默認無法獲取它,然後通過Java中的另一個協議訪問它(例如FTP,SFTP等等)。雖然如上所述,任何可以說這個新協議的工具都可以下載文件。

另一種方法是查找特定於Java的標頭,例如User-Agent字段(假設這是用可識別的東西填充)。但是再次 - 這是不安全的,因爲任何工具都可以通過相同的頭文件發送並模擬java下載。


如果你在你的問題,你只希望您的文件由特定 Java應用程序下載的意思,然後事情變得有點更加可行。您可以分發包含某種身份驗證的應用程序(例如公鑰/私鑰對),並在請求index.jar時讓服務器對此進行挑戰。但即使如此,這仍然是可疑的 - 根據定義,Java應用程序必須包含足夠的信息來進行身份驗證;根據定義你必須公開分發這些信息;因此提取私鑰並將其他應用僞裝爲Java應用並不困難。


基本上,我看不出有什麼辦法解決這個問題,因爲你已經說過這個問題。如果有一個更狹窄的範圍,你會樂意接受,你可能會想出一個可行的折中辦法,但現在答案只是「不」。

1

從技術上講,你不能。無論HTTP Java是什麼請求,都可以創建另一個HTTP客戶端程序。

但是,您可以使它稍微困難一些。您可以將文件放在HTTP摘要式身份驗證的後面,並將密碼包含在Java程序的JAR密碼中,或者可以檢查用戶代理服務器端。

參見例如get_browser()和Apache 2 authorization and authentication

+0

謝謝Artefacto :) – Kyle 2010-08-10 10:03:22

0

您可以創建一個Web應用程序來爲您的文件提供服務。在這裏,您可以檢查請求中的用戶代理字符串,並決定該用戶代理字符串是否提供文件。爲此,您的「java下載器」必須具有可識別的用戶代理字符串,並且您的應用程序必須「知道」它。 當然,任何壞傢伙誰知道這一點,可以使自己的瀏覽器發送給您的同一用戶代理字符串,所以這不是真的安全: -/

0

如果您index.jar是非常重要的,不要使其可用於下載任何提到的方法。只要它可用於下載並最終在客戶端計算機上,在Java內部或不在,它將被黑客入侵。 一些代碼應該只能在服務器上運行。

1

你可以讓你的文件只讀,所以沒有人可以修改實際的文件,但有一個問題,即使Java不能修改文件。

因此,如果您需要修改文件,您需要創建一個具有相同擴展名的新文件,並將整個數據從主文件複製到新文件,並刪除主文件並修改新文件並更改新文件的名稱以舊文件名稱。

有Java中的函數來設置只讀:

File newTempFile=new File("mytext.txt"); 
newTempFile.setReadOnly(); 
相關問題