ฉันใช้งานเว็บไซต์ Drupal 8 และเมื่อฉันเรียกดูหน้าใด ๆ ฉันจะได้รับหน้าขาวธรรมดาพร้อมข้อความแสดงข้อผิดพลาดต่อไปนี้
ชื่อโฮสต์ที่ระบุไม่ถูกต้องสำหรับเซิร์ฟเวอร์นี้
สิ่งนี้หมายความว่า? ฉันจะแก้ไขได้อย่างไร
ฉันใช้งานเว็บไซต์ Drupal 8 และเมื่อฉันเรียกดูหน้าใด ๆ ฉันจะได้รับหน้าขาวธรรมดาพร้อมข้อความแสดงข้อผิดพลาดต่อไปนี้
ชื่อโฮสต์ที่ระบุไม่ถูกต้องสำหรับเซิร์ฟเวอร์นี้
สิ่งนี้หมายความว่า? ฉันจะแก้ไขได้อย่างไร
คำตอบ:
ข้อความผิดพลาดนี้มาจากคุณลักษณะที่ถูกเพิ่มเข้าไปใน Drupal 8 เพื่อป้องกันการโจมตี HTTP โฮสต์ส่วนหัว คุณสมบัตินี้ยังได้อธิบายไว้ในบันทึกการเปลี่ยนแปลงที่สร้างขึ้นสำหรับโปรแกรมแก้ไข
โดยพื้นฐานแล้วมันเป็นไปได้ที่จะปลอมแปลงส่วนหัว HTTP Hostเพื่อวัตถุประสงค์สามานย์และหลอกลวง Drupal ให้ใช้ชื่อโดเมนที่แตกต่างกันในระบบย่อยต่าง ๆ (โดยเฉพาะการสร้างลิงค์) กล่าวอีกนัยหนึ่งส่วนหัวของโฮสต์ HTTP นั้นจำเป็นต้องได้รับการพิจารณาว่าเป็นอินพุตของผู้ใช้และไม่น่าเชื่อถือ
เพื่อต่อสู้กับสิ่งนี้การตั้งค่าใหม่$settings['trusted_host_patterns']
ได้ถูกเพิ่มใน Drupal 8 เพื่อกำหนดค่ารายการชื่อโฮสต์ "ที่เชื่อถือได้" ที่เว็บไซต์สามารถเรียกใช้ได้ การตั้งค่าต้องเป็นอาร์เรย์ของรูปแบบนิพจน์ทั่วไปโดยไม่มีตัวคั่นแสดงชื่อโฮสต์ที่คุณต้องการอนุญาตให้เรียกใช้
ตัวอย่างเช่นหากคุณใช้งานเว็บไซต์ของคุณจากชื่อโฮสต์เดียว "www.example.com" คุณควรเพิ่มสิ่งนี้ในการตั้งค่าของคุณ (โดยปกติจะอยู่ที่./sites/default/settings.php
):
$settings['trusted_host_patterns'] = array(
'^www\.example\.com$',
);
หมายเหตุ^
, และ\.
$
เหล่านี้เป็นPCRE ไวยากรณ์ สิ่งเหล่านี้หมายความว่าคุณต้องการจับคู่ "www.example.com" อย่างแม่นยำโดยไม่มีอะไรพิเศษที่จุดเริ่มต้นและจุดสิ้นสุดและจุดควรถือว่าเป็นจุดไม่ใช่อักขระตัวแทน
หากคุณกำลังเรียกใช้จาก "example.com" ให้ใช้:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
);
หากคุณต้องการเรียกใช้เว็บไซต์ที่มีหลายโดเมนและ / หรือโดเมนย่อยและไม่ได้ทำการเปลี่ยนเส้นทาง URL แบบบัญญัติการตั้งค่าของคุณจะมีลักษณะดังนี้:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
'^.+\.example\.com$',
'^example\.org',
'^.+\.example\.org',
);
สิ่งนี้ทำให้ไซต์สามารถวิ่งออกจากตัวแปรทั้งหมดของ example.com และ example.org โดยมีโดเมนย่อยทั้งหมดรวมอยู่ด้วย
เมื่อคุณปรับ$settings['trusted_host_patterns']
ค่าที่เหมาะสมแล้วคุณควรจะสามารถเรียกดูไซต์ของคุณอีกครั้ง
คุณสามารถตรวจสอบสถานะของการตั้งค่าโฮสต์ที่เชื่อถือได้ของคุณจากหน้ารายงานสถานะซึ่งอยู่ที่ผู้ดูแลระบบ / รายงาน / สถานะ
หากคุณลบการตั้งค่าทั้งหมดกลไกโฮสต์ที่เชื่อถือได้จะไม่ถูกใช้และคุณจะเห็นข้อผิดพลาดในหน้ารายงานสถานะ นอกจากนี้ไซต์ของคุณอาจถูกโจมตีด้วยส่วนหัว HTTP Host ที่มีช่องโหว่
หากคุณมีการตั้งค่านี้และได้รับข้อความนี้นั่นอาจหมายความว่าคุณได้ทำไวยากรณ์นิพจน์ปกติผิดพลาด ในกรณีนี้ใช้ตัวอย่างแรกและคัดลอก / วางลงในการตั้งค่าของคุณแล้วแก้ไขเพื่อให้สะท้อนถึงชื่อโฮสต์ที่เว็บไซต์ของคุณเรียกใช้
สำหรับการติดตั้ง localhost คุณสามารถใช้รหัสต่อไปนี้ในไฟล์ settings.php ของคุณ
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
สิ่งนี้เกิดขึ้นเนื่องจากtrusted_host_patterns
ตัวแปรในไฟล์การตั้งค่าของคุณ หากคุณกำลังทำงานกับสภาพแวดล้อมท้องถิ่นและคุณต้องการแทนที่สิ่งนี้ให้กำหนดหัวข้อต่อไปนี้ในsettings.local.php
ไฟล์ของคุณ:
/*
* Drupal Trusted Host Patterns
*/
$settings['trusted_host_patterns'] = [];
หรือรูปแบบทั่วไปเพิ่มเติม:
$settings['trusted_host_patterns'] = [ '.*' ];
หรือเฉพาะเจาะจงมากขึ้นสำหรับสภาพแวดล้อมท้องถิ่น :
$settings['trusted_host_patterns'] = array(
'^172\.20.\0.\3$',
'^localhost$',
);
เป็นโซลูชันที่ง่ายที่สุด แต่ไม่แนะนำให้ใช้เนื่องจากคุณควรตั้งค่าที่เหมาะสมเพื่อหลีกเลี่ยงการปลอมแปลงส่วนหัว HTTP Host เพื่อวัตถุประสงค์ที่ไม่จำเป็น หากเว็บไซต์ของคุณทำงานเฉพาะในพื้นที่ของคุณคุณควรจะทำเช่นนั้น
ปัญหานี้จะเกิดขึ้นหากคุณมี
<VirtualHost *:443>
เมื่อคุณควรมี
<VirtualHost *:80>
ตั้งค่าในการตั้งค่าที่ไม่ใช่ ssl (เช่นสำหรับสภาพแวดล้อม dev / การทดสอบ) และพยายามเข้าถึงไซต์บนพอร์ต 80
นี่เป็นเพราะการกำหนดค่าโฮสต์ที่เชื่อถือได้ของเซิร์ฟเวอร์ 'trusted_host_patterns'
สามารถผลิตเมื่อคุณเปลี่ยนชื่อโดเมนหรือ เมื่อต้องการแก้ไข probleme เพิ่มโดเมนใหม่ของคุณไปยังDRUPAL_ROOT/sites/SITE_FOLDER/settings.php
(Ex: sites/defaults/settings.php
)
ตัวอย่าง: ชื่อโดเมน = newdomain.com
$settings['trusted_host_patterns'] = array(
'^newdomain.com\.loc$',
'^www\.newdomain.com\.loc$',
);