Drupal 7 จำกัดความยาวของชื่อโฮสต์ไว้ที่ 1,000 ไบต์เท่านั้นเพื่อป้องกันการโจมตีแบบ DoS และไม่ยอมรับชื่อโฮสต์ที่มีเครื่องหมายทับ แต่ไม่จำกัดชื่อโฮสต์ที่อนุญาตตามค่าที่ตั้งค่าไว้ใน การตั้งค่า.php ไฟล์เหมือนที่ Drupal 8 และ Drupal 9 ทำ
รหัสการตรวจสอบค่าของ HTTP_HOST ส่วนหัวมีอยู่ใน drupal_valid_http_host()
.
// จำกัดความยาวของชื่อโฮสต์ไว้ที่ 1,000 ไบต์เพื่อป้องกันการโจมตี DoS ด้วย
// ชื่อโฮสต์ยาว
ส่งคืน strlen($host) <= 1,000 && substr_count($host, '.') <= 100 && substr_count($host, ':') <= 100 && preg_match('/^\[?(?:[a -zA-Z0-9-:\]_]+\.?)+$/', $host);
ฟังก์ชันนี้เรียกโดย drupal_environment_initialize()
.
ถ้า (!isset($_SERVER['HTTP_REFERER'])) {
$_SERVER['HTTP_REFERER'] = '';
}
ถ้า (!isset($_SERVER['SERVER_PROTOCOL']) || $_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.0' && $_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.1') {
$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.0';
}
ถ้า (isset($_SERVER['HTTP_HOST'])) {
// เนื่องจาก HTTP_HOST เป็นอินพุตของผู้ใช้ ตรวจสอบให้แน่ใจว่ามีเพียงอักขระที่อนุญาตเท่านั้น
// ในชื่อโฮสต์ ดู RFC 952 (และ RFC 2181)
// $_SERVER['HTTP_HOST'] เป็นตัวพิมพ์เล็กที่นี่ตามข้อกำหนด
$_SERVER['HTTP_HOST'] = strtolower($_SERVER['HTTP_HOST']);
ถ้า (!drupal_valid_http_host($_SERVER['HTTP_HOST'])) {
// HTTP_HOST ไม่ถูกต้อง เช่น หากมีเครื่องหมายทับก็อาจเป็นการโจมตี
header($_SERVER['SERVER_PROTOCOL'] . ' 400 คำขอไม่ถูกต้อง');
ทางออก;
}
}
อื่น {
// ไคลเอนต์ pre-HTTP/1.1 บางตัวจะไม่ส่งส่วนหัวของโฮสต์ ตรวจสอบให้แน่ใจว่ากุญแจอยู่
// กำหนดสำหรับการปฏิบัติตาม E_ALL
$_SERVER['HTTP_HOST'] = '';
}
มีแพตช์ที่ควรเพิ่มใน Drupal 7 ซึ่งเป็นรหัสเดียวกับที่ใช้โดย Drupal 8 ใน ส่วนหัว HTTP_HOST ไม่สามารถเชื่อถือได้. ในขณะนี้ การพัฒนา Drupal 7 ชะลอตัวลง โดยเฉพาะอย่างยิ่งเมื่อ Drupal 8 และ Drupal 9 ได้รับการพัฒนาในเวลาเดียวกัน
เนื่องจากสิ่งนี้ถือเป็นการปรับปรุงความปลอดภัย (ซึ่งเห็นได้ชัดว่ามีโอกาสน้อยที่จะถูกพิจารณาว่าเป็นปัญหาด้านความปลอดภัย หรือปัญหาจะไม่ถูกกล่าวถึงในที่สาธารณะ) คุณจึงสามารถใช้แพตช์ที่มีให้ในปัญหานั้นได้ (อันล่าสุดคือที่ ขณะที่ฉันโพสต์คำตอบนี้ https://www.drupal.org/files/issues/2021-02-04/http_host_header_cannot_bet_trusted-2221699-151.patch) และเริ่มใช้งาน $conf['trusted_host_patterns']
.