Drupal 7 limitează numai lungimea numelui de gazdă la 1000 de octeți pentru a preveni atacurile DoS și nu acceptă nume de gazdă care conțin bare oblice, dar nu limitează numele de gazdă permise pe baza unei valori stabilite în setări.php fișier, așa cum fac Drupal 8 și Drupal 9.
Codul care verifică valoarea lui HTTP_HOST antetul este conținut în drupal_valid_http_host()
.
// Limitați lungimea numelui gazdei la 1000 de octeți pentru a preveni atacurile DoS cu
// nume lungi de gazdă.
return strlen($gazdă) <= 1000 && substr_count($gazdă, '.') <= 100 && substr_count($gazdă, ':') <= 100 && preg_match('/^\[?(?:[a -zA-Z0-9-:\]_]+\.?)+$/', $gazdă);
Funcția este apelată de drupal_environment_initialize()
.
dacă (!isset($_SERVER['HTTP_REFERER'])) {
$_SERVER['HTTP_REFERER'] = '';
}
dacă (!isset($_SERVER['SERVER_PROTOCOL']) || $_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.0' && $_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.1') {
$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.0';
}
dacă (isset($_SERVER['HTTP_HOST'])) {
// Deoarece HTTP_HOST este introdus de utilizator, asigurați-vă că conține numai caractere permise
// în numele de gazdă. Vezi RFC 952 (și RFC 2181).
// $_SERVER['HTTP_HOST'] este aici cu litere mici, conform specificațiilor.
$_SERVER['HTTP_HOST'] = strtolower($_SERVER['HTTP_HOST']);
dacă (!drupal_valid_http_host($_SERVER['HTTP_HOST'])) {
// HTTP_HOST este nevalid, de ex. dacă conține slash-uri poate fi un atac.
antet($_SERVER['SERVER_PROTOCOL'] . ' 400 Solicitare greșită');
Ieșire;
}
}
else {
// Unii clienți pre-HTTP/1.1 nu vor trimite un antet gazdă. Asigurați-vă că cheia este
// definit pentru conformitatea E_ALL.
$_SERVER['HTTP_HOST'] = '';
}
Există un patch care ar trebui să adauge la Drupal 7 același cod folosit de Drupal 8, în Antetul HTTP_HOST nu poate fi de încredere. În acest moment, dezvoltarea Drupal 7 a încetinit, mai ales de când Drupal 8 și Drupal 9 au fost dezvoltate în același timp.
Deoarece aceasta este considerată o îmbunătățire a securității (cu șanse mici, aparent, să fie considerată o problemă de securitate, sau problema nu ar fi discutată public), puteți aplica patch-ul furnizat în problema respectivă (cel mai recent este, la in momentul in care am postat acest raspuns, https://www.drupal.org/files/issues/2021-02-04/http_host_header_cannot_bet_trusted-2221699-151.patch) și începeți să utilizați $conf['trusted_host_patterns']
.