스프링 보안을 사용하여 DNS 리 바인딩 공격으로부터 웹 애플리케이션을 보호 할 수 있습니까? 그리고 동일한 종류의 공격으로부터 서버를 보호하기 위해 Glassfish 4.1을 구성하는 방법은 무엇입니까? Host 헤더가 서버의 DNS 이름과 일치하지 않지만 예제 코드를 찾을 수없는 경우 모든 http 연결을 차단하여이 문제를 해결할 수 있다고 읽었습니다.스프링 보안을 사용하여 Anti DNS Pinning (DNS 리 바인딩) 방어를 구축하는 방법은 무엇입니까?
0
A
답변
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 웹 응용 프로그램에서 필터 등록 :
<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>
을 스프링 기반 응용 프로그램에서이 구성 클래스에서이처럼 등록 할 수 있어야한다 :
@Bean
public FilterRegistrationBean filterRegistrationBean2() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new DNSHostFilter());
registration.addUrlPatterns("/*");
return registration;
}