2012-02-15 47 views
0

我在使用servlet的Java EE Web應用程序中異步加載JavaScript文件。從/ WEB-INF /使用servlet異步加載javascript:普遍擔心

js文件位於/WEB-INF/js/文件夾下。

處理進如下:

的index.jsp

<script src="/servlet/mainLoader.js"> 

的servlet請問neccessary工作從內部/WEB-得到JS文件INF/js/

所以基本上我打電話一個主要的js文件mainLoader.js本身加載JS文件的休息,在我的應用程序。 此架構背後的原因是爲了隱藏js文件中的一些關鍵信息,因此用戶將無法瀏覽文件的路徑並檢查源代碼。

我有兩個問題:
- 這是否被認爲是一種不好的做法?
- 當前我正在開發我的應用程序本地(本地主機),請問這個js加載系統導致問題,當我移動到生產模式?我的意思是遠程用戶能夠在不在本地主機上的情況下卸載js文件?

答:
@BalusC讓我意識到這裏是我的選擇錯了。我沒有意識到這種JS抓取只能用於GET請求。我認爲它可以與POST協同工作,從而禁用servlet上的GET方法(以便不能直接從url欄訪問JS)。

另外,什麼@David說是真實的,但我試圖讓它不是很直接閱讀JS源代碼。

所以我發現@Todd霞飛是絕對正確的,我們的教訓:
「1)通過隱藏的安全性是一個記錄不好的做法。」

+1

這種方法絕對沒有意義。最終用戶只需打開servlet的URL即可獲得JS文件。例如。 http:// localhost:8080/contextname/servlet/mainLoader.js我也不確定「異步」是如何在這種情況下有意義的。它只是下載JS的webbrowser,而不是web服務器。 – BalusC 2012-02-17 00:15:09

+0

@BalusC使用ajax函數(帶有返回類型腳本)的web瀏覽器調用servlet,它自己將來自WEB-INF的js文件作爲java InputStream加載並讀取其字節,刷新,然後將結果返回給函數。當然,網絡服務器正在下載JS,但它正在返回流的servlet。爲什麼它沒有意義?正是爲什麼我想知道它的不好的做法..我基本上試圖做一個非常小的例子,例如如何使用ajax下載其JS的JS。 – shadesco 2012-02-17 05:56:49

+0

不,它不是下載文件的網絡服務器。這是網頁瀏覽器。將JS文件放在'/ WEB-INF'之外並將URL改爲指向它時,它絕對沒有區別。 – BalusC 2012-02-17 10:18:49

回答

1

按照最初的問題:

- 這被認爲是一種不好的做法?

這不一定是壞習慣。這顯然沒有意義。爲什麼要接管serveltcontainer的內置默認servlet的工作?

- 目前我正在開發我的應用程序在本地(本地主機),將這個JS加載系統造成問題,當我移動到生產模式?我的意思是遠程用戶能夠在不在本地主機上的情況下卸載js文件?

這表明您認爲Java代碼在webbrowser(客戶端)中運行。這個假設是錯誤的。 Java代碼在web服務器(服務器端)上運行。只要你不改變相對的URL,它就會工作得很好。


按照評論:

的是我不知道的是,這種JS獲取只能用GET請求工作目前。由於它不適用於POST(我打算這麼做),因此用戶可以通過url欄訪問JS。

對於「中間人」攻擊,POST絕對不比GET更「安全」。 POST僅用於非冪等請求,而GET用於冪等請求。阻止對「中間人」攻擊的HTTP請求的唯一方法是使用HTTPS。

2

回答兩個問題:

1)通過隱藏的安全性是一個記錄不好的做法。

http://en.wikipedia.org/wiki/Security_through_obscurity

2)遠程用戶必須能夠下載任何JS文件瀏覽器使用。所以他們一定可以訪問你的腳本。我沒有看到生活在本地文件系統上的腳本出現問題,並且從本地主機移到生產環境,但爲什麼不直接測試呢?

+0

我正在閱讀你給我的鏈接。關於第2部分),在這樣的體系結構中,你必須指「必須」或「是的,他們將能夠下載」? – shadesco 2012-02-15 20:12:24

+0

如果mainloader.js在瀏覽器中運行,我懷疑是基於您的示例,那麼它需要下載其他腳本。如果您對本地主機進行了硬編碼,那麼我很確定瀏覽器會嘗試從遠程用戶的位置下載其他腳本,除非他們本地存儲了腳本,否則這些腳本無效。 – 2012-02-15 20:19:12

3

您無法隱藏用戶的JavaScript代碼。即使你通過腳本標籤注入額外的代碼,用戶也可以在諸如螢火蟲之類的工具的幫助下獲得代碼。

如果你想保護代碼,你應該看看「minifiers」和「code obfuscation」。不過,這不會保護如密碼的敏感數據等