คำตอบสั้น ๆ : ใช่
คำตอบสำหรับคำถามนี้เป็นใช่ชัดเจนและพูดอย่างอื่นคือการขาดความรับผิดชอบอย่างสมบูรณ์
คำตอบยาว: ตัวอย่างจริงของโลก
อนุญาตให้ฉันให้ตัวอย่างจริงจากเซิร์ฟเวอร์จริง ๆ ของฉันซึ่งการย้ายwp-config.phpภายนอกรูทเว็บเป็นการป้องกันไม่ให้เนื้อหาถูกจับโดยเฉพาะ
ข้อผิดพลาด:
ดูคำอธิบายของบั๊กใน Plesk (แก้ไขใน 11.0.9 MU # 27):
Plesk รีเซ็ตการส่งต่อโดเมนย่อยหลังจากซิงค์การสมัครกับแผนโฮสต์ (117199)
ฟังดูไม่เป็นอันตรายใช่มั้ย
นี่คือสิ่งที่ฉันทำเพื่อกระตุ้นจุดบกพร่องนี้:
- ตั้งค่าโดเมนย่อยเพื่อเปลี่ยนเส้นทางไปยัง URL อื่น (เช่น
site.staging.server.comไปที่site-staging.ssl.server.com)
- เปลี่ยนแผนการบริการของการสมัครรับข้อมูล (เช่นการกำหนดค่า PHP)
เมื่อฉันทำสิ่งนี้ Plesk รีเซ็ตโดเมนย่อยเป็นค่าเริ่มต้น: แสดงเนื้อหาของ~/httpdocs/โดยไม่ต้องใช้ล่าม (เช่น PHP)
และฉันไม่ได้สังเกต เป็นเวลาหลายสัปดาห์
ผลลัพธ์:
- ด้วย
wp-config.phpในรากเว็บขอให้/wp-config.phpจะได้ดาวน์โหลดไฟล์การกำหนดค่า WordPress
- เมื่อ
wp-config.phpอยู่นอกเว็บรูทคำขอให้/wp-config.phpดาวน์โหลดไฟล์ที่ไม่เป็นอันตรายโดยสมบูรณ์ wp-config.phpไม่สามารถดาวน์โหลดไฟล์จริง
ดังนั้นจึงเห็นได้ชัดว่าการย้ายwp-config.phpนอกเว็บรากมีประโยชน์การรักษาความปลอดภัยโดยสุจริตในโลกจริง
วิธีการย้ายwp-config.phpไปยังตำแหน่งใด ๆ บนเซิร์ฟเวอร์ของคุณ
WordPress จะค้นหาไดเรกทอรีหนึ่งโดยอัตโนมัติเหนือการติดตั้ง WordPress ของคุณสำหรับwp-config.phpไฟล์ของคุณดังนั้นถ้านั่นคือสิ่งที่คุณได้ย้ายคุณทำเสร็จแล้ว!
แต่ถ้าคุณย้ายมันไปที่อื่นล่ะ ง่าย. สร้างใหม่wp-config.phpในไดเรกทอรี WordPress ด้วยรหัสต่อไปนี้:
<?php
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');
(อย่าลืมเปลี่ยนพา ธ ด้านบนเป็นพา ธ ที่แท้จริงของwp-config.phpไฟล์ที่ย้ายไป)
หากคุณพบปัญหาopen_basedirเพียงเพิ่มเส้นทางใหม่ไปยังopen_basedirคำสั่งในการกำหนดค่า PHP ของคุณ:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
แค่นั้นแหละ!
การแยกข้อโต้แย้งออกจากกัน
ทุกข้อโต้แย้งต่อการเคลื่อนย้ายwp-config.phpนอกรูทเว็บจะขึ้นอยู่กับสมมติฐานที่ผิดพลาด
อาร์กิวเมนต์ที่ 1: ถ้า PHP ถูกปิดการใช้งานพวกเขาอยู่แล้ว
วิธีเดียวที่ใครบางคนจะเห็นเนื้อหาของ [ wp-config.php] คือถ้าพวกเขาหลีกเลี่ยงเซิร์ฟเวอร์ล่าม PHP ของคุณ ... ถ้าเกิดขึ้นคุณมีปัญหาอยู่แล้ว: พวกเขามีการเข้าถึงเซิร์ฟเวอร์ของคุณโดยตรง
เท็จ : สถานการณ์ที่ฉันอธิบายข้างต้นเป็นผลมาจากการกำหนดค่าผิดพลาดไม่ใช่การบุกรุก
อาร์กิวเมนต์ที่ 2: การปิดใช้งาน PHP โดยบังเอิญนั้นหายากและไม่สำคัญเลย
หากผู้โจมตีสามารถเข้าถึงตัวจัดการ PHP ได้อย่างเพียงพอคุณก็กำลังถูกโจมตีอยู่ การเปลี่ยนแปลงโดยบังเอิญนั้นหายากมากในประสบการณ์ของฉันและในกรณีนี้มันง่ายที่จะเปลี่ยนรหัสผ่าน
เท็จ : สถานการณ์ที่ฉันอธิบายไว้ข้างต้นเป็นผลมาจากข้อผิดพลาดในซอฟต์แวร์เซิร์ฟเวอร์ทั่วไปที่มีผลต่อการกำหนดค่าเซิร์ฟเวอร์ทั่วไป นี่คือ "หายาก" แทบจะไม่ (และนอกจากนี้ความปลอดภัยหมายถึงการกังวลเกี่ยวกับสถานการณ์ที่หายาก)
WTF : การเปลี่ยนรหัสผ่านหลังจากการบุกรุกช่วยแทบจะไม่ได้รับข้อมูลที่ละเอียดอ่อนระหว่างการบุกรุก จริง ๆ แล้วเรายังคิดว่า WordPress ใช้สำหรับบล็อกชั่วคราวเท่านั้นและผู้โจมตีนั้นสนใจในการทำให้เป็นรูปเป็นร่างเท่านั้น? มากังวลเกี่ยวกับการปกป้องเซิร์ฟเวอร์ของเราไม่ใช่แค่คืนค่าหลังจากที่ใครบางคนเข้ามา
อาร์กิวเมนต์ 3: การปฏิเสธการเข้าถึงwp-config.phpดีพอ
คุณสามารถ จำกัด การเข้าถึงไฟล์ผ่านการกำหนดค่าโฮสต์เสมือนของคุณหรือ
.htaccess- จำกัด การเข้าถึงไฟล์ภายนอกได้อย่างมีประสิทธิภาพในลักษณะเดียวกับการย้ายนอกรูทเอกสาร
เท็จ : ลองจินตนาการว่าค่าเริ่มต้นของเซิร์ฟเวอร์ของคุณสำหรับโฮสต์เสมือนคือ: ไม่มี PHP, ไม่.htaccess, allow from all(แทบจะผิดปกติในสภาพแวดล้อมการใช้งานจริง) หากการกำหนดค่าของคุณถูกรีเซ็ตในระหว่างการดำเนินการตามปกติเช่นการอัปเดตพาเนลทุกอย่างจะกลับสู่สถานะเริ่มต้นและคุณจะได้รับการเปิดเผย
หากรูปแบบความปลอดภัยของคุณล้มเหลวเมื่อการตั้งค่าถูกรีเซ็ตเป็นค่าเริ่มต้นโดยไม่ตั้งใจคุณต้องมีความปลอดภัยมากขึ้น
WTF : ทำไมทุกคนจะแนะนำการรักษาความปลอดภัยเลเยอร์น้อยลงโดยเฉพาะ? รถยนต์ราคาแพงไม่เพียง แต่มีกุญแจเท่านั้น พวกเขายังมีการเตือนภัย immobilizers และตัวติดตาม GPS หากสิ่งที่ควรค่าแก่การปกป้องทำถูกต้อง
อาร์กิวเมนต์ที่ 4: การเข้าถึงโดยไม่ได้รับอนุญาตwp-config.phpไม่ใช่เรื่องใหญ่
ข้อมูลฐานข้อมูลเป็นสิ่งที่ละเอียดอ่อนเพียงอย่างเดียวใน [ wp-config.php]
FALSE : คีย์การรับรองความถูกต้องและเกลือสามารถใช้ในการโจมตีที่อาจเกิดการแย่งชิงจำนวนเท่าใดก็ได้
WTF : แม้ว่าข้อมูลรับรองฐานข้อมูลจะเป็นเพียงสิ่งเดียวในwp-config.phpนั้นคุณควรกลัวผู้โจมตีที่จะได้รับข้อมูล
อาร์กิวเมนต์ 5: การย้ายwp-config.phpภายนอกเว็บรูททำให้เซิร์ฟเวอร์มีความปลอดภัยน้อยลง
คุณยังต้องให้การเข้าถึง WordPress [ wp-config.php] ดังนั้นคุณต้องขยายopen_basedirเพื่อรวมไดเรกทอรีด้านบนรูทเอกสาร
FALSE : สมมติว่าwp-config.phpอยู่ในhttpdocs/เพียงแค่ย้ายไป../phpdocs/และกำหนดopen_basedirให้มีเฉพาะและhttpdocs/ phpdocs/ตัวอย่างเช่น
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
(อย่าลืมรวม/tmp/หรือtmp/ไดเรกทอรีผู้ใช้ของคุณเสมอหากคุณมี)
สรุป: แฟ้มการกำหนดค่าควรเสมอเสมอจะอยู่นอกรากเว็บ
ถ้าคุณใส่ใจเรื่องความปลอดภัยคุณจะย้ายwp-config.phpออกไปนอกรูทเว็บของคุณ