サーブレットアプリケーションの内部ビューレイヤーテンプレートページの保護
-
03-07-2019 - |
質問
JavaのMVC Webアプリケーションに関する非常に基本的な質問があります。
生のJSPからSeamのような現在の技術までの昔から、非常に基本的なパターンは常に、クライアントに送信する出力を作成するビューレイヤーへの要求を最初に受け入れたコントローラーからの内部ディスパッチです。
この内部ディスパッチは通常、URLを使用して新しいリソースをサーブレットコンテナに要求することで行われます(ただし、メカニズムは追加の構成層によって隠される場合があります)。これらのURLのマッピングは、「real」も定義する同じweb.xmlによって行われます。外部へのURL。
特別な対策を講じない限り、多くの場合、ビューレイヤーに直接アクセスできます。 Seamの「登録」をご覧ください。デモでは、「register.seam」をバイパスできます。直接" registered.xhtml"に移動します。これは潜在的なセキュリティ問題です。少なくとも、ビューテンプレートのソースコードが漏洩します。
これは基本的なサンプルアプリケーションにすぎないことは承知していますが、これらの内部リソースを外部から見えないように宣言するために追加の措置を講じる必要があることも奇妙です。
URLエントリポイントを制限する最も簡単な方法は何ですか?
「WEB-INF」のようなものがありますか?ディレクトリ、内部リクエストによってのみアクセスできるマジックURLパスコンポーネント?
解決 4
今では、内部JSPを WEB-INF / jsp
に配置するアプリケーションをいくつか見ました。少なくともJSPの場合、およびVelocityの場合は、これでうまくいくようです。 JSFで機能しないようですただし、>。
他のヒント
security-constraint <を使用して、内部リソースへのアクセスを防ぐことができます<
。 web.xml
デプロイメント記述子の/ code>
たとえば、次の構成を使用して、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>
インターネット要求がアプリサーバーに直接アクセスできるようにすることはお勧めしません。前にウェブサーバーを投げて、その中に特定の種類のURLのリクエストを許可します。人々にfoo.com/jspsにアクセスしてほしくありませんか?一度だけ制限してください。
ここでトピックについて少し話をしています: WEB-INFの背後にあるページを非表示にしますか?
これを処理する1つの方法は、すべての要求の要求パスを調べ、それに応じて各要求を処理するサーブレットフィルターを構築することです。開始に役立つリンクを次に示します。 JavaServer Pages(JSP)およびJSTL -JSPによるアクセス制御