2013-03-27 1 views
15

당신이 부두 8의 서버 버전을 숨기는 방법이가있는 HTTP 서버 헤더를 제거? 이제는 이렇게 보일 것입니다.는 부두 9

HttpConfiguration config = new HttpConfiguration(); 
config.setSendServerVersion(false); 
//TODO: Associate config with server??? 
Server server = new Server(port); 
+0

false이 설정을 변경할 수 있습니다하지 이상적이지만, 지금 당장은 피할 수없는 구체적인 시나리오가 있습니다. – Jacob

+1

왜 서버 버전을 보내지 않는 것이 이상하지 않습니까? 어쨌든 클라이언트가 사용해야하는 것은 아니며 보안과 관련이있을 수 있습니다. 제 생각에는 기본적으로 비활성화되어 있어야합니다. 그렇지 않으면 뭔가 빠졌습니까? –

+0

서버 헤더가 명확하게 사용되며 검색 순위에 영향을 줄 수 있으며 특정 유형의 사람들이 기술 결정을 내리기 위해 자주 사용하는 기술/브라우저 인기도 그래프를 작성하는 데 사용됩니다. – Jacob

답변

22

는 경우 작동하는 것 같다 몇 가지 코드를했다. 확실하지 오른쪽,하지만 적어도 그것은 작동하는 경우 (:

HttpConfiguration httpConfig = new HttpConfiguration(); 
httpConfig.setSendServerVersion(false); 
HttpConnectionFactory httpFactory = new HttpConnectionFactory(httpConfig); 
ServerConnector httpConnector = new ServerConnector(server,httpFactory); 
server.setConnectors(new Connector[] { httpConnector }); 
2

이제는 해당 설정이있는 HttpConfiguration 개체가 있습니다.

org.eclipse.jetty.server.HttpConfiguration

어떻게 구성 보여주는 설정하는 방법 객체를 다음 부두-http.xml 파일을 보여주는 HTTP 구성 섹션의 섹션에 대한 jetty.xml의에 봐 사용. 부두 xml 파일은 실제로 자바보다 얇은 스킨이며 기본적으로 동일합니다.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty.xml

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty-http.xml

+2

필자는 이것을 보았지만 문제는 Jetty XML 파일을 사용하고 있지 않다는 것입니다. Im이 Jetty를 임베드했습니다. – Jacob

+0

똑같은, 그냥 관련 Java 호출로 변환 –

+2

javadoc을 리뷰하고 봤는데 ...'HttpConfiguration' 클래스에는 그것을 사용하는 방법에 대한 문서가 없습니다. – Jacob

23

, 당신이 HttpConfiguration에 구성해야 문제로 응답 헤더.

영업 이익은 내장에 대한 솔루션을 찾고있었습니다,하지만 부두 배포가 server.ini 파일을 사용하는 경우, 당신은 단순히 = jetty.send.server.version 거짓 설정할 수 있습니다

+6

마지막 단계 인'server.setConnectors (새로운 Connector [] {httpConnector});'를 추가하십시오. –

+2

새 커넥터에 대한 포트를 설정하는 중요한 비트는 다음과 같습니다 :'httpConnector.setPort (port);'. 기본 커넥터가 대체되기 때문에'Server' 생성자에 전달 된 포트는 사용되지 않습니다. – Ben

1

일부 보안 분석 소프트웨어가 플래그에 서버 버전을 전송합니다

는 부두 9
Server server = new Server(port); 
for(Connector y : server.getConnectors()) { 
    for(ConnectionFactory x : y.getConnectionFactories()) { 
     if(x instanceof HttpConnectionFactory) { 
      ((HttpConnectionFactory)x).getHttpConfiguration().setSendServerVersion(false); 
     } 
    } 
} 
5

jetty9를 독립형 서버로 사용하는 경우 start.ini 파일에 jetty.httpConfig.sendServerVersion=false을 설정하여 서버 서명을 비활성화 할 수 있습니다.

1

(나를 위해 일한) 야곱의 솔루션의 람다 스타일의 변형 : jetty9.2

final Server server = new Server(port); 
Stream.of(server.getConnectors()).flatMap(connector -> connector.getConnectionFactories().stream()) 
      .filter(connFactory -> connFactory instanceof HttpConnectionFactory) 
      .forEach(httpConnFactory -> ((HttpConnectionFactory)httpConnFactory).getHttpConfiguration().setSendServerVersion(false)); 
0

, 내가 서버 버전을 전송하지 않도록 알고 start.ini

# should jetty send the server version header? 
jetty.send.server.version=true