web-dev-qa-db-ja.com

「Content-Security-Policy」HTTPヘッダーを挿入するようにTomcat7を構成できますか?

Tomcat 7は、他のセキュリティ関連のヘッダー、たとえばContent-Security-Policy: frame-ancestors 'self'を挿入できるように、すべての応答でX-Frame-Options HTTPヘッダーを挿入するように構成できますか?

9
Peter Klimczak

Tomcat 7.x組み込みフィルター で達成できない場合は、次のいずれかのオプションを試すことができます。

アプリケーションでフィルターを作成する

アプリケーションにフィルターを追加することがオプションである場合は、次のコードを使用して、すべての応答にヘッダーを追加できます。

_@WebFilter("/*")
public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, 
                         FilterChain chain) throws IOException, ServletException {

        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'");

        chain.doFilter(request, response);
    }
}
_

Tomcatでカスタムバルブを作成する

別のオプションはカスタムバルブです。これからのステップを引用する ページ

  1. Maven Javaアプリケーションを作成します。

  2. 次の依存関係を追加します。

_<dependency>
    <groupid>org.Apache.Tomcat</groupId>
    <artifactid>Tomcat-catalina</artifactId>
    <version>7.0.34</version>
    <scope>provided</scope>
 </dependency>
_
  1. Javaクラスを作成し、 ValveBase から拡張します。

  2. invoke(Request, Response) メソッドを実装します。

  3. ライブラリ(_.jar_)ファイルをビルドします

  4. ライブラリを_${Tomcat.home}/lib_ディレクトリにインストールします。

  5. 新しいValveを使用するように_server.xml_を構成します。例えば:

_<Valve className="com.example.MyValve"/>
_
  1. サーバーを起動して、新しいバルブの動作を確認します

バルブの実装は次のようになります。

_public class MyValve extends ValveBase {

    @Override
    public void invoke(Request request, Response response) throws IOException, 
                                                                  ServletException {

        HttpServletResponse httpResponse = response.getResponse();
        httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'");

        getNext().invoke(request, response);
    }
}
_
10
cassiomolin