คำตอบสั้น ๆ : ใช่
คำตอบสำหรับคำถามนี้เป็นใช่ชัดเจนและพูดอย่างอื่นคือการขาดความรับผิดชอบอย่างสมบูรณ์
คำตอบยาว: ตัวอย่างจริงของโลก
อนุญาตให้ฉันให้ตัวอย่างจริงจากเซิร์ฟเวอร์จริง ๆ ของฉันซึ่งการย้าย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
ออกไปนอกรูทเว็บของคุณ