2008-10-01 15 views
1

我對Java中的MVC web應用程序有一個非常基本的問題。由於從原始JSP直到當前的技術像Seam,一個非常基本的模式始終是從控制器開始接受請求的內部分派到創建要發送給客戶端的輸出的視圖層。保護servlet應用程序中的內部視圖圖層模板頁面

此內部調度通常進行通過詢問servlet容器用於使用URL的新資源(儘管其機制可能通過配置的額外層被隱藏)。這些URL的映射是由同樣的web.xml完成​​的,該web.xml也定義了外部的「真實」URL。

除非採取特殊措施,否則通常可以直接直接訪問視圖圖層。見證Seam「註冊」演示,您可以繞過「register.seam」並直接轉到「registered.xhtml」。這是一個潛在的安全問題。至少,它泄露了視圖模板源代碼。

我知道,這只是一個基本的示例應用程序,但它也是奇怪的是,任何額外的措施需要採取申報看不見外面這些內部資源。

限制URL入口點的最簡單方法是什麼?

是否有可能像在「WEB-INF」目錄下,只能通過內部請求訪問的URL魔路徑組件?

回答

0

我已經看到了幾個應用程序,把自己的內部JSP到WEB-INF/jsp。這看起來有訣竅,至少對於JSP和Velocity來說。但它does not seem to work for JSF

+0

OP已經提到「類似於WEB-INF」,所以我假設他知道它,但不想因爲某些原因使用它。 「安全約束」是最好的解決方案。 – BalusC 2010-01-12 02:44:15

1

我不會建議允許Internet請求直接訪問您的應用服務器。我會在前面放置一個Web服務器,然後在其中放入某些類型的URL。不希望人們去foo.com/jsps?在那裏一勞永逸地限制它。

有一個在這裏的主題有點對話:處理這將是構造一個檢查每個請求的請求路徑,並相應地處理每個請求的Servlet過濾器hiding pages behind WEB-INF?

+0

代理功能通過Web服務器肯定是性能和安全性,並與其他應用程序集成的好東西,但我不知道,我要緊密結合Web服務器的配置(可能是由網絡管理員維護)用的的內部應用程序URL方案。 – Thilo 2008-10-01 02:46:10

3

你可以通過在你的web.xml部署描述符中使用security-constraint來阻止訪問內部資源。

例如,我用下面的配置,以避免JSP中直接訪問:

<!-- Prevent direct access to JSPs. --> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>JSP templates</web-resource-name> 
     <url-pattern>*.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint/> <!-- i.e. nobody --> 
</security-constraint> 
相關問題