2017-10-18 17 views
0

Spring Securityを使用したDNS再バインド攻撃からWebアプリケーションを保護することは可能ですか?同じ種類の攻撃からサーバーを保護するためのGlassfish 4.1の設定方法は? HostヘッダーがサーバーのDNS名と一致しないが、サンプルコードを見つけることができなかった場合、すべてのhttp接続をブロックすることでこれが解決できることを読んだことがあります。Spring Securityを使用してAnti DNS Pinning(DNS再バインド)防御を構築する方法は?

答えて

0

はい、それは可能です、あなたはjavax.servlet.Filterを拡張し、そこに手動で「ホスト」ヘッダを確認することができますクラスを使用することができ、ここでの例です:

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class DNSHostFilter implements Filter { 

    @Override 
    public void init(FilterConfig fc) throws ServletException { } 

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

     HttpServletRequest servletRequest = (HttpServletRequest) request; 
     HttpServletResponse servletResponse = (HttpServletResponse) response; 

     String header = servletRequest.getHeader("Host"); 

     if (!header.contains(servletRequest.getLocalAddr())) { 
      servletResponse.sendError(401); 
     } else { 
      fc.doFilter(request, response); 
     } 
    } 

    @Override 
    public void destroy() {} 
} 

重要:あなたがいるかどうかを確認する必要がありますメソッドservletRequest.getLocalAddr()があなたのサーバの正しいIPを返します。そうでなければ、あなたのIPをそこに文字列として挿入することができます(それほど柔軟性はありません)。

"Host"ヘッダーにサーバーIPが含まれていない場合、HTTP 401で応答します。そうでない場合、要求は通常正常に実行されます。

このようweb.xmlを経由して働くだろう通常のJSF Webアプリケーションでのフィルタを登録する:

<filter> 
    <filter-name>DNSHostFilter</filter-name> 
    <filter-class>your.package.DNSHostFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>DNSHostFilter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

をSpringベースのアプリケーションでは、コンフィギュレーションクラスでこのようにそれを登録することが可能でなければなりません:

@Bean 
public FilterRegistrationBean filterRegistrationBean2() { 

    FilterRegistrationBean registration = new FilterRegistrationBean(); 
    registration.setFilter(new DNSHostFilter()); 
    registration.addUrlPatterns("/*"); 

    return registration; 
} 
関連する問題