การแข็งตัวของ PHP สำหรับ WordPress
เผยแพร่แล้ว: 2021-06-29WordPress ทำงานบน PHP และเป็นองค์ประกอบหลักที่ต้องให้ความสนใจเมื่อทำให้ไซต์ WordPress ของคุณแข็งแกร่งขึ้น บทความนี้จะครอบคลุมถึงเรื่องทั่วไปและเรื่องย่อบางส่วนที่คุณพูดถึงได้เมื่อพูดถึงความปลอดภัยของ PHP สำหรับ WordPress
โปรด ทราบ – โปรดใช้ ความระมัดระวังเมื่อทำการเปลี่ยนแปลงการตั้งค่า PHP ของคุณ การตั้งค่าและไวยากรณ์ไม่ถูกต้องอาจทำให้เว็บไซต์ของคุณเสียหาย ทดสอบการเปลี่ยนแปลงของคุณในสภาพแวดล้อมการพัฒนาหรือการจัดเตรียมก่อนทำการเปลี่ยนแปลงในการผลิตเสมอ
สารบัญ
- ใช้ PHP เวอร์ชันล่าสุด
- ระงับเวอร์ชัน PHP
- ลบไฟล์ phpinfo() ใด ๆ
- ระงับข้อผิดพลาดและคำเตือนของ PHP
- ข้อจำกัดรวมถึง
- ปิดการใช้งานไฟล์ระยะไกลรวมถึง
- ปิดการใช้งานหรือจำกัดการทำงานที่เป็นอันตราย
- บล็อกการทำงานของ PHP ในไดเร็กทอรีที่ละเอียดอ่อน
- บทสรุป
ใช้ PHP เวอร์ชันล่าสุด
นอกจากเพื่อให้แน่ใจว่าคุณกำลังแพตช์ระบบปฏิบัติการของคุณ เซิร์ฟเวอร์ MySQL เว็บเซิร์ฟเวอร์ (เช่น Nginx, Apache, IIS…) สิ่งสำคัญอย่างยิ่งคือต้องแน่ใจว่าคุณใช้ PHP 1 เวอร์ชันที่รองรับอย่างสมบูรณ์ .
เนื่องจาก PHP ถูกเปิดเผยต่ออินเทอร์เน็ต (เนื่องจาก WordPress ทำงานบนตัวแปล PHP) จึงมีความเสี่ยงที่จะถูกโจมตีมากขึ้นในกรณีที่ค้นพบช่องโหว่สำหรับช่องโหว่ภายใน PHP ในระดับดังกล่าว การรักษา PHP ให้ทันสมัยอยู่เสมอ (และมากกว่านั้น การอยู่ห่างจากเวอร์ชัน 5.x PHP ที่สิ้นสุดอายุการใช้งาน) เป็นสิ่งสำคัญไม่เพียงแต่จะป้องกันการโจมตีเท่านั้น แต่ยังช่วยให้ผู้โจมตีเพิ่มการโจมตีได้หาก พวกเขาจัดการเพื่อตั้งหลักบนเว็บไซต์ WordPress ของคุณ (เช่นโดยใช้ประโยชน์จากช่องโหว่ในปลั๊กอิน WordPress)
ระงับเวอร์ชัน PHP
เช่นเดียวกับซอฟต์แวร์เว็บเซิร์ฟเวอร์ส่วนใหญ่ ตามค่าเริ่มต้น PHP จะเปิดเผยเวอร์ชันที่เรียกใช้ผ่านส่วนหัว X-Powered-By HTTP แม้ว่าสิ่งนี้ในตัวมันเองจะไม่ใช่จุดอ่อนด้านความปลอดภัย เช่นเดียวกับในสถานการณ์อื่นๆ การระบุเวอร์ชันซอฟต์แวร์โดยทั่วไปจะมีประโยชน์สำหรับผู้โจมตีในระหว่างขั้นตอนการลาดตระเวนของการโจมตี ดังนั้น การปิดเวอร์ชัน PHP จะทำให้การโจมตีสำเร็จได้ยากขึ้นเล็กน้อย
โชคดีที่ปิดใช้งานได้ง่ายโดยใช้การตั้งค่า expose_php ในไฟล์กำหนดค่า php.ini ของคุณ เพียงเพิ่มสิ่งต่อไปนี้
expose_php = Off
ลบไฟล์ phpinfo() ใด ๆ
การสร้างไฟล์ PHP โดยใช้ฟังก์ชัน phpinfo() เพื่อใช้ในการดีบั๊กเป็นนิสัยที่ไม่ดีทั่วไปที่ผู้ดูแลระบบ PHP หลายคนมี หากผู้โจมตีพบไฟล์ 'phpinfo' (ปกติจะมีชื่อว่า phpinfo.php) พวกเขาจะได้รับข้อมูลและรายละเอียดมากมาย ไม่เพียงแต่เวอร์ชันของ PHP ที่ทำงานบนเซิร์ฟเวอร์ แต่ยังรวมถึงแง่มุมอื่นๆ ของเว็บไซต์ด้วย เป็นเว็บและเซิร์ฟเวอร์ฐานข้อมูล
หากคุณต้องการเรียกใช้ phpinfo() จริงๆ ขอแนะนำให้ดำเนินการจากบรรทัดคำสั่งดังนี้
หากคุณมีการกำหนดค่า PHP มากกว่าหนึ่งรายการในระบบของคุณ (โดยทั่วไป) คุณสามารถใช้คำสั่งต่อไปนี้เพื่อระบุไฟล์ php.ini ที่จะใช้
php -c /etc/php/apache2/php.ini -i
ระงับข้อผิดพลาดและคำเตือนของ PHP
แม้ว่าข้อผิดพลาด คำเตือน และข้อยกเว้นจะเป็นประโยชน์ในระหว่างการพัฒนา หากแสดงในสภาพแวดล้อมที่เปิดเผยต่อสาธารณะ ผู้โจมตีมักจะใช้ข้อมูลนี้เพื่อให้เข้าใจถึงการกำหนดค่าเซิร์ฟเวอร์ เค้าโครงแอปพลิเคชัน และส่วนประกอบ
ข้อความแสดงข้อผิดพลาดเป็นเส้นทางทั่วไปบางส่วนในการเปิดเผยข้อมูล ซึ่งมักจะทำให้ข้อมูลรั่วไหล เช่น เส้นทางการติดตั้งแอปพลิเคชันและรายละเอียดการเชื่อมต่อฐานข้อมูล แทนที่จะแสดงข้อผิดพลาดและคำเตือน ให้ตรวจสอบให้แน่ใจว่าข้อมูลนี้ถูกบันทึกไว้ ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้สามารถพบได้ในเอกสาร PHP อย่างเป็นทางการ
โชคดีที่ปิดการใช้งานได้ง่ายโดยใช้การตั้งค่า display_errors ในไฟล์กำหนดค่า php.ini ของคุณ เพียงเพิ่มสิ่งต่อไปนี้
display_errors = Off log_errors = On
ข้อจำกัดรวมถึง
ช่องโหว่ในการรวมไฟล์ทำให้ผู้โจมตีสามารถควบคุมคำสั่ง PHP include() ได้ แม้ว่า PHP จะรันโค้ด PHP ใดๆ ภายในไฟล์ที่รวมอยู่ แต่จะพิมพ์อย่างอื่น (สมมติว่าเป็นข้อความธรรมดา) ซึ่งหมายความว่าผู้โจมตีที่เข้าควบคุมช่องโหว่ในการรวมไฟล์อาจทำงานในลักษณะดังต่อไปนี้ ทำให้พวกเขาสามารถเข้าถึงไฟล์ระบบที่มีความละเอียดอ่อนได้ หากต้องการอ่านเพิ่มเติมเกี่ยวกับการรวมไฟล์ ให้ดูที่บทความนี้
include "../../../../etc/passwd"
ด้วยการตั้งค่า open_basedir ใน php.ini คุณสามารถสั่งให้ PHP อนุญาตเฉพาะการรวมภายในไดเร็กทอรีบางตัวและด้านล่างเท่านั้น แม้ว่าจะไม่ได้ขจัดช่องโหว่ในการรวมไฟล์ แต่ก็ทำให้พวกเขามีข้อจำกัดมากขึ้น และยังป้องกันการโจมตีขั้นสูงที่อาจนำไปสู่การใช้โค้ดได้ (เมื่อผู้โจมตีสามารถรันคำสั่งบนเซิร์ฟเวอร์ของคุณได้)
คุณสามารถตั้งค่า open_basedir PHP ได้ดังนี้ในไฟล์ php.ini ของคุณ
open_basedir = /var/www/html/example.com
ปิดการใช้งานไฟล์ระยะไกลรวมถึง
นอกเหนือจากการจำกัดการรวมโลคัลไว้ที่ไดเร็กทอรีเฉพาะโดยใช้ open_basedir ขอแนะนำให้ปิดใช้งานการรวมระยะไกลด้วย การโจมตีการรวมไฟล์ระยะไกล (RFI) ทำงานคล้ายกับการโจมตีการรวมไฟล์ในเครื่อง แต่แทนที่จะเป็นผู้โจมตีที่ถูกผูกไว้กับไฟล์ในระบบ การรวมไฟล์ระยะไกลช่วยให้ผู้โจมตีรวมไฟล์ผ่านเครือข่ายได้ สิ่งนี้เป็นอันตรายอย่างยิ่ง และการโจมตี RFI ส่วนใหญ่จบลงด้วยการที่ผู้โจมตีสามารถรันโค้ดบนเว็บเซิร์ฟเวอร์ของคุณได้ตามอำเภอใจ (เรียกว่าการเรียกใช้โค้ดจากระยะไกลหรือ RCE)
ในการปิดใช้งานการรวมไฟล์ระยะไกล ให้ใช้ตัวเลือก allow_url_fopen และ allow_url_include PHP ในไฟล์ php.ini ของคุณดังนี้
allow_url_fopen = Off allow_url_include = Off
ปิดการใช้งานหรือจำกัดการทำงานที่เป็นอันตราย
ในกรณีที่ผู้โจมตี แม้จะมีมาตรการรักษาความปลอดภัยทั้งหมดของคุณ แต่ก็สามารถค้นหาช่องโหว่ในการรักษาความปลอดภัย PHP ของ WordPress ได้สำเร็จ ซึ่งพวกเขาสามารถใช้ประโยชน์ได้ สิ่งสุดท้ายที่คุณต้องการคือให้พวกเขาสามารถเรียกใช้โค้ดโดยอำเภอใจบนเซิร์ฟเวอร์ของคุณ . หากผู้โจมตีสามารถเรียกใช้โค้ดโดยอำเภอใจบนเซิร์ฟเวอร์ของคุณ พวกเขาอาจติดตั้งเว็บเชลล์หรือสร้างเชลล์แบบย้อนกลับเพื่อควบคุมเซิร์ฟเวอร์ของคุณเพิ่มเติม และใช้เซิร์ฟเวอร์ดังกล่าวเพื่อเสนอราคาที่ไม่เป็นธรรม (เช่น การแพร่กระจายมัลแวร์ การใช้เว็บไซต์ของคุณสำหรับแคมเปญฟิชชิ่ง หรือการปฏิเสธ ของการโจมตีบริการ หรือแม้แต่การขุด cryptocurrency)
ด้วยการปิดการใช้งานฟังก์ชันต่างๆ เช่น shell_exec() และ system() คุณสามารถป้องกันผู้ใช้และผู้โจมตีจากการใช้ประโยชน์จากฟังก์ชันที่เป็นอันตรายเหล่านี้ แม้ว่าอาจมีเหตุผลที่ถูกต้องตามกฎหมายในการใช้ประโยชน์จากฟังก์ชันเหล่านี้ แต่ก็มีน้อยมาก และมักจะมีวิธีที่ปลอดภัยกว่าเพื่อให้ได้ผลลัพธ์แบบเดียวกัน
โปรดทราบ – ทดสอบสิ่งต่อไปนี้อย่างละเอียดในสภาพแวดล้อมการทดสอบหรือการทดสอบก่อนใช้งานจริง เนื่องจากซอฟต์แวร์/ปลั๊กอินบางตัวที่คุณใช้งานอยู่ (หวังว่าจะถูกต้องตามกฎหมาย) ขึ้นอยู่กับฟังก์ชันเหล่านี้
ต่อไปนี้เป็นชุดของฟังก์ชันที่อาจเป็นอันตรายซึ่งคุณอาจต้องการปิดใช้งานใน PHP โดยใช้การตั้งค่า disable_functions ในไฟล์ php.ini ของคุณ
disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>
บล็อกการทำงานของ PHP ในไดเร็กทอรีที่ละเอียดอ่อน
ตามค่าเริ่มต้น ไดเร็กทอรี wp-content/uploads ซึ่งใช้ในการอัปโหลดธีม ปลั๊กอิน รูปภาพ วิดีโอ และไฟล์อื่นๆ ไปยังเว็บไซต์ของคุณจะได้รับอนุญาตให้รันโค้ด PHP นี่เป็นความเสี่ยงพอสมควร หากผู้โจมตีสามารถใช้ประโยชน์จากช่องโหว่ในการอัปโหลดไฟล์ในปลั๊กอินหรือธีมได้ พวกเขาอาจสามารถอัปโหลดเว็บเชลล์หรือแบ็คดอร์ประเภทเดียวกันได้ เนื่องจากอนุญาตให้เรียกใช้ PHP ภายในไดเร็กทอรี wp-content/uploads ผู้โจมตีอาจสามารถรันโค้ด PHP นั้นจริง ๆ เพื่อเสนอราคาที่เป็นอันตรายได้
การป้องกันสิ่งนี้ทำได้ค่อนข้างง่าย – ปิดการทำงานของ PHP ภายใน wp-content/uploads และไดเร็กทอรี วิธีที่ไร้เดียงสาคือเพียงแค่บล็อกการเข้าถึงไฟล์ *.php เช่นนั้นโดยใช้ . htaccess
<Files *.php> deny from all </Files>
อย่างไรก็ตาม การกำหนดค่าข้างต้นนั้นค่อนข้างง่ายที่จะข้าม - ในกรณีส่วนใหญ่ PHP ยินดีที่จะรันไฟล์ .phtml .php3 วิธีป้องกันกระสุนได้มากที่สุดคือการปิดใช้งานเอ็นจิ้น PHP ภายในไดเร็กทอรีอย่างแท้จริง ควรวางการกำหนดค่า . htaccess ต่อไปนี้ไว้ใน wp-content/uploads และไดเรกทอรี wp-includes (ไดเรกทอรีอื่นที่ผู้โจมตีมักกำหนดเป้าหมายโดยทั่วไป)
php_flag engine off
ความปลอดภัยของ PHP สำหรับ WordPress – ความคิดสุดท้าย
แม้ว่า WordPress จะถือว่าเป็นแพลตฟอร์มที่แข็งแกร่งและปลอดภัย แต่สภาพแวดล้อมและโครงสร้างพื้นฐานที่การติดตั้ง WordPress ของคุณทำงานอยู่นั้นช่วยรับประกันความปลอดภัยของเว็บไซต์ของคุณโดยรวม การนำหัวข้อที่กล่าวถึงในคู่มือการเพิ่มความปลอดภัย PHP ไปใช้ จะช่วยให้คุณมีแนวป้องกันที่สอง ทำให้ผู้โจมตีเพิ่มการโจมตีได้ยากขึ้นอย่างมากหลังจากใช้ช่องโหว่ภายในเว็บไซต์ WordPress ของคุณในทางที่ผิด
หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีทำให้ไซต์ WordPress ของคุณแข็งแกร่งขึ้น โปรดอ่านคู่มือฉบับสมบูรณ์เกี่ยวกับการรักษาความปลอดภัยและการแข็งตัวของ WordPress
ข้อมูลอ้างอิงที่ใช้ในบทความนี้
↑ 1 | https://www.php.net/supported-versions.php |
---|