2013-03-27 11 views
15

Dies ist, wie Sie die Server-Version in Jetty verstecken 8:Entfernen Sie den HTTP-Server-Header in Jetty 9

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

Wie tun Sie es in Jetty 9? Also sollte es jetzt ungefähr so ​​aussehen?

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

Ich weiß das Deaktivieren der Server-Version Versenden nicht ist Ideal, aber ich habe ein spezifisches Szenario, in dem ich es für jetzt nicht vermeiden kann. – Jacob

+1

Warum ist das Senden der Serverversion nicht ideal? Ich meine, kein Kunde sollte es trotzdem benutzen und es könnte Auswirkungen auf die Sicherheit haben. Meiner Meinung nach sollte es standardmäßig deaktiviert sein oder fehlt mir etwas? –

+0

Der Server-Header wird definitiv verwendet, er kann sich auf Ihr Suchranking auswirken und wird auch verwendet, um Technologie-/Browser-Popularitätsdiagramme zu erstellen, die häufig von bestimmten Arten von Leuten verwendet werden, um Technologieentscheidungen zu treffen. – Jacob

Antwort

22

Wenn einige Code, der zu funktionieren scheint erarbeitet. Nicht sicher, ob sein Recht, aber zumindest funktioniert es (:

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

Es gibt jetzt ein HttpConfiguration-Objekt mit dieser Einstellung.

org.eclipse.jetty.server.HttpConfiguration

Blick auf die jetty.xml für den Konfigurationsabschnitt Abschnitt auf http zeigt, wie das Objekt zu installieren und dann die Anlegesteg-http.xml Datei, die zeigt, wie die Konfiguration wird eingesetzt. Denken Sie daran, dass die Jetty-XML-Dateien wirklich nur eine dünne Haut über Java sind und grundsätzlich gleich funktionieren.

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

Ich habe das gesehen, aber das Problem ist, ich benutze keine Jetty XML-Datei, ich starte Jetty eingebettet. – Jacob

+0

gleiche Sache, nur übersetzen sie in die relevanten Java-Aufrufe –

+2

Ich habe die Javadoc überprüft und googelte es ...Die Klasse "HttpConfiguration" enthält keine Dokumentation zur Verwendung. – Jacob

23

In Jetty 9, können Sie es auf HttpConfiguration konfigurieren müssen:

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

Sie sollten Fügen Sie den letzten Schritt hinzu: 'server.setConnectors (new Connector [] {httpConnector});'. –

+2

Das wichtige Bit, um den Port für den neuen Connector zu setzen, ist dies: 'httpConnector.setPort (port);'. Da der Standardkonnektor ersetzt wird, wird der an den 'Server'-Konstruktor übergebene Port nicht verwendet. – Ben

1

Einige Sicherheitsanalyse-Software-Flag sendet die Server-Version in der Antwort-Header als ein Problem.

OP suchte Lösung für eingebettete, aber wenn Ihre Jetty Bereitstellung der server.ini Datei verwendet, können Sie einfach eingestellt jetty.send.server.version = false

5

Wenn Sie Jetty9 als eigenständigen Server verwenden, können Sie die Serversignatur deaktivieren, indem Sie jetty.httpConfig.sendServerVersion=false in der Datei start.ini festlegen.

1

Lambda-Stil Variante Jakobs Lösung (die für mich gearbeitet):

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

in jetty9.2, ändern Sie diese config false in start.ini

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