it-swarm.com.de

Entfernen Sie den X-Generator-Header aus der Antwort

Ich möchte die Offenlegung von CMS-Typ und -Version entfernen, die Drupal im X-Generator: Drupal 8 ( https: //) zurückgibt www.drupal.org) Header.

Ich verwende den folgenden Code, aber er entfernt den X-Generator-Header, aber ich kann immer noch X-Generator sehen: Drupal 8 ( https://www.drupal.org) ) in der Browser-Header-Antwort.

function xxx_page_attachments_alter(&$data, &$context1 = NULL, &$context2 = NULL) {
    foreach ($data['#attached']['html_head'] as $key => $attachment) {
        if ($attachment[1] == 'system_meta_generator') {
          unset($data['#attached']['html_head'][$key]);
        }
    }
}

Wie kann ich meinen Code reparieren?

5
gaurav

Die einfachste Methode besteht darin, den Header in einem benutzerdefinierten EventSubscriber zu entfernen:

$response->headers->remove('X-Generator');

Ein Beispiel finden Sie unter https://drupal.stackexchange.com/a/201297/47547 .

5
4k4

Es ist nicht genau die Frage, die Sie stellen, aber ...

Ich habe eine ausführliche Antwort auf die Idee geschrieben: Wie kann ich verdecken, was ich zum Ausführen meiner Website verwende? Hier als Antwort hinzufügen, falls es für Sie nützlich ist, wenn Sie überlegen, an diesem Problem zu arbeiten.

0
greggles

Bitte überprüfen Sie den folgenden Link: Erstellt ein benutzerdefiniertes Modul, um dies zu tun.

@ https://github.com/vikrantrc/Remove-X-Generator

0
Vikrant Ramteke

@gaurav sollte auch funktionieren. Für mich scheint es zu funktionieren

function THEMENAME_page_attachments_alter(&$data) {
  foreach ($data['#attached']['html_head'] as $key => $attachment) {
    if ($attachment[1] == 'system_meta_generator') {
      unset($data['#attached']['html_head'][$key]);
    }
  }
}
0
GiorgosK

Der einfachste Weg, dies zu tun, besteht darin, den Dienst response_generator_subscriber Zu entfernen, der zunächst für das Hinzufügen von X-Generator Verantwortlich ist. Es ist alles, was es tut, also sollte nichts (außer Core's Tests) davon abhängen.

Fügen Sie einfach eine Drupal\Core\DependencyInjection\ServiceProviderInterface - Implementierung wie folgt in Ihr Modul ein:

my_module/src/MyModuleServiceProvider.php:

<?php

namespace Drupal\ws_main;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceProviderBase;

/**
 * Remove the service adding the X-Generator header.
 */
class MyModuleServiceProvider extends ServiceProviderBase {

  /**
   * {@inheritdoc}
   */
  public function alter(ContainerBuilder $container) {
    $container->removeDefinition('response_generator_subscriber');
  }

}

Es ist wichtig zu beachten, dass die Klasse (und der Dateiname) eine CamelCased-Version des Computernamens Ihres Moduls sein müssen (erstes Zeichen groß geschrieben, Unterstrich entfernen und das nächste Zeichen groß schreiben), wie in Dokumentation zum Ändern von Diensten angegeben . Nach dem Löschen des Caches - Neuerstellen der Dienstregistrierung - sollte diese Methode sogar einen geringfügigen Leistungsgewinn bringen, verglichen mit dem Hinzufügen und Entfernen des Headers bei jeder Antwort.

0
TwoD