2013-03-27 7 views
15

ten sposób można ukryć wersję serwera w Jetty 8:Usuń nagłówek HTTP Server w Jetty 9

Server server = new Server(port); 
server.setSendServerVersion(false); 

Jak to zrobić w Jetty 9? Czy teraz powinno to wyglądać tak?

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

wiem wyłączenie wysyłania wersję serwera nie jest idealny, ale mam konkretny scenariusz, w którym nie mogę na razie tego uniknąć. – Jacob

+1

Dlaczego funkcja "wysyłanie" wersji serwera nie jest idealna? Chodzi mi o to, że żaden klient nie powinien go używać i może mieć wpływ na bezpieczeństwo. Moim zdaniem powinien on być domyślnie wyłączony, czy też brakuje mi czegoś? –

+0

Nagłówek serwera jest zdecydowanie używany, może wpływać na ranking wyszukiwania, a także służy do tworzenia wykresów popularności technologii/przeglądarki, które są często wykorzystywane przez niektóre typy osób do podejmowania decyzji dotyczących technologii. – Jacob

Odpowiedz

22

Jeśli wypracować jakiś kod, który wydaje się działać. Nie wiem, czy jego prawo, ale przynajmniej działa (:

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

Istnieje teraz obiekt HttpConfiguration z tym ustawieniem na nim.

org.eclipse.jetty.server.HttpConfiguration

patrzeć w jetty.xml dla części dotyczącej sekcji konfiguracji http pokazujący jak skonfigurować obiekt, a następnie plik pomost-http.xml który pokazuje w jaki sposób konfiguracja Jest używane. Pamiętaj, że pliki xml w jetty są po prostu cienką skórą na java i działają w zasadzie tak samo.

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

Widziałem to, ale problem polega na tym, że nie korzystam z pliku xml dla przystani, więc zaczynam od osadzenia Jetty. – Jacob

+0

samo, po prostu przetłumacz to na odpowiednie wywołania java –

+2

Sprawdziłem javadoc i googled to ...Klasa 'HttpConfiguration' nie ma dokumentacji, jak jej używać. – Jacob

23

W Jetty 9, trzeba go skonfigurować na HttpConfiguration:

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

Powinieneś dodaj ostatni krok: 'server.setConnectors (new Connector [] {httpConnector});'. –

+2

Ważnym bitem do ustawienia portu dla nowego złącza jest: 'httpConnector.setPort (port);'. Ponieważ domyślne złącze jest zastępowane, port przekazany do konstruktora 'Server' nie jest używany. – Ben

1

Niektóre oprogramowanie do analizy bezpieczeństwa będzie flaga wysyłającego wersję serwera w nagłówek odpowiedzi jako problem.

OP szukał rozwiązania dla osadzonych, ale jeśli rozmieszczenie Jetty używa pliku server.ini, można po prostu ustawić jetty.send.server.version = false

5

Jeśli korzystasz z usługi jetty9 jako samodzielnego serwera, możesz wyłączyć podpis serwera, ustawiając jetty.httpConfig.sendServerVersion=false w pliku start.ini.

1

wariant Lambda-styl roztworu Jakuba (który pracował dla mnie):

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

w jetty9.2, zmienić config false w start.ini

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