เห็นได้ชัดว่า PHP+MySQL+Apache เป็นเทคโนโลยีเว็บยอดนิยม ชุดค่าผสมนี้มีประสิทธิภาพปรับขนาดได้และยังคงฟรี อย่างไรก็ตามการตั้งค่าเริ่มต้นของ PHP นั้นไม่เหมาะสำหรับเว็บไซต์ที่ออนไลน์อยู่แล้ว ด้านล่างเราสามารถปรับปรุงนโยบายความปลอดภัยของ PHP โดยการแก้ไขไฟล์การกำหนดค่าเริ่มต้น!
0x01: ปิดใช้งานฟังก์ชันการประมวลผลไฟล์ URL ระยะไกล
เช่นเดียวกับฟังก์ชั่นการประมวลผลไฟล์ของ Fopen ซึ่งยอมรับพารามิเตอร์ RUL ของไฟล์ (ตัวอย่างเช่น: fopen ('http: //www.yoursite.com','r')) ฟังก์ชั่นนี้สามารถเข้าถึงทรัพยากรระยะไกลได้อย่างง่ายดาย อย่างไรก็ตามนี่เป็นภัยคุกคามความปลอดภัยที่สำคัญมาก การปิดใช้งานฟังก์ชั่นนี้เพื่อ จำกัด ฟังก์ชั่นไฟล์เป็นตัวเลือกที่ดี ทำการแก้ไขต่อไปนี้ในไฟล์ php.ini:
การคัดลอกรหัสมีดังนี้:
allow_url_fopen = ปิด
0x02: ปิดการลงทะเบียนตัวแปรทั่วโลก
ในเวอร์ชันก่อน 4.2.0, PHP ใช้ตัวแปรส่วนกลางเป็นอินพุต ฟังก์ชั่นนี้เรียกว่า register_globals ในเว็บแอปพลิเคชันมันทำให้เกิดปัญหาด้านความปลอดภัยมากมายเนื่องจากช่วยให้ผู้โจมตีสามารถใช้งานตัวแปรทั่วโลกได้อย่างง่ายดายในบางกรณี โชคดีที่ฟังก์ชั่นใน 4.2.0 ถูกปิดใช้งานโดยค่าเริ่มต้น มันอันตรายมาก ฟังก์ชั่นนี้จะต้องถูกปิดใช้งานไม่ว่าในกรณีใด ๆ หากสคริปต์บางอย่างต้องการคุณสมบัตินี้แสดงว่ามีภัยคุกคามความปลอดภัยที่อาจเกิดขึ้นกับสคริปต์นี้ แก้ไข pnp.ini เพื่อปิดการใช้งานฟังก์ชั่นนี้:
การคัดลอกรหัสมีดังนี้:
register_globals = ปิด
0x03: การดำเนินการอ่านและเขียนของ PHP ที่ จำกัด
ในกระบวนการพัฒนาเว็บจำนวนมากสคริปต์ PHP จำเป็นต้องอ่านและเขียนการดำเนินการไปยังระบบไฟล์ท้องถิ่นเช่น/var/www/htdocs/ไฟล์ เพื่อปรับปรุงความปลอดภัยคุณสามารถแก้ไขการอ่านและเขียนสิทธิ์ของไฟล์ท้องถิ่น:
การคัดลอกรหัสมีดังนี้:
open_basedir =/var/www/htdocs/ไฟล์
0x04: ขีด จำกัด การโพสท่า
การ จำกัด เวลาดำเนินการ PHP การใช้หน่วยความจำโพสต์และข้อมูลการอัปโหลดเป็นกลยุทธ์ที่ดีที่สุดและสามารถกำหนดค่าต่อไปนี้ได้:
การคัดลอกรหัสมีดังนี้:
max_execution_time = 30; เวลาดำเนินการสคริปต์สูงสุด
max_input_time = 60; เวลาสูงสุดที่ใช้ในการแยกวิเคราะห์อินพุต
memory_limit = 16m; หน่วยความจำสูงสุดที่ใช้โดยสคริปต์เดียว
upload_max_filesize = 2m; ขนาดไฟล์อัปโหลดสูงสุด
post_max_size = 8m; ขนาดโพสต์สูงสุด
0x05: ปิดใช้งานข้อความแสดงข้อผิดพลาดและเปิดใช้งานการบันทึก
ในการตั้งค่าเริ่มต้น PHP จะส่งข้อความแสดงข้อผิดพลาดไปยังเบราว์เซอร์ การตั้งค่าเริ่มต้นนี้เป็นการกำหนดค่าที่สมเหตุสมผลที่สุดในระหว่างกระบวนการพัฒนาแอปพลิเคชัน อย่างไรก็ตามยังสามารถรั่วไหลข้อมูลความปลอดภัยบางอย่างไปยังผู้ใช้เช่นเส้นทางการติดตั้งและชื่อผู้ใช้ ในเว็บไซต์ที่ได้รับการพัฒนาจะเป็นการดีที่สุดที่จะปิดใช้งานข้อความแสดงข้อผิดพลาดและส่งข้อความแสดงข้อผิดพลาดไปยังไฟล์บันทึก
การคัดลอกรหัสมีดังนี้:
display_errors = ปิด
log_errors = on
0x06: ซ่อนไฟล์ php
หากไฟล์ PHP ไม่ได้ซ่อนอยู่เราสามารถรับเวอร์ชันของเซิร์ฟเวอร์ PHP ผ่านวิธีการต่าง ๆ เช่น: http://www.example.com/script.php?=PHPB8B5F2A0-3C92-11D3-A3A9-4C7B08C100
เห็นได้ชัดว่าเราไม่ต้องการให้ผู้ใช้รับเวอร์ชัน PHP ของเซิร์ฟเวอร์เว็บไซต์ของคุณโดยตรง โชคดีที่มีสวิตช์ใน php.ini ที่สามารถปิดการใช้งานฟังก์ชั่นนี้:
การคัดลอกรหัสมีดังนี้:
expose_php = ปิด
0x07: การกำหนดค่าโหมดปลอดภัย
โดยค่าเริ่มต้น PHP สามารถกำหนดค่าในเซฟโหมด ในโหมดนี้ Apache ห้ามการเข้าถึงไฟล์ตัวแปรสภาพแวดล้อมและโปรแกรมไบนารี ในเซฟโหมดปัญหาที่ใหญ่ที่สุดคือเฉพาะเจ้าของไฟล์เท่านั้นที่สามารถเข้าถึงไฟล์ PHP นี้ได้ หากนักพัฒนาหลายคนร่วมกันพัฒนาโปรแกรมนี้การตั้งค่าดังกล่าวไม่สมจริง เมื่อคุณต้องการเข้าถึงไฟล์ PHP คุณต้องแก้ไขเจ้าของไฟล์ ปัญหาอีกประการหนึ่งคือโปรแกรมอื่นไม่สามารถเข้าถึงไฟล์ PHP เหล่านี้ได้ การกำหนดค่าต่อไปนี้สามารถแก้ไขการอนุญาตของไฟล์ไปยังกลุ่มผู้ใช้มากกว่าผู้ใช้รายเดียว
การคัดลอกรหัสมีดังนี้:
safe_mode = ปิด
safe_mode_gid = on
โดยการเปิดใช้งาน SAFE_MODE_GID คุณสามารถเข้าถึงไฟล์ PHP โดยใช้ Apache กลุ่มนี้ เซฟโหมดยังมีประสิทธิภาพมากในการป้องกันการดำเนินการไบนารีอย่างไรก็ตามนักพัฒนาต้องการที่จะสามารถเรียกใช้ไฟล์ไบนารีบางอย่างในสถานการณ์เฉพาะบางอย่าง ในกรณีพิเศษเหล่านี้คุณสามารถใส่ไฟล์ไบนารีลงในไดเรกทอรีได้เช่น (/var/www/binaries) และคุณสามารถทำการตั้งค่าต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
safe_mode_exec_dir =/var/www/binaries
ในที่สุดผ่านการตั้งค่าต่อไปนี้คุณสามารถเข้าถึงตัวแปรสภาพแวดล้อมของเซิร์ฟเวอร์โดยให้คำนำหน้า "_" ที่สามารถเข้าถึงตัวแปรสภาพแวดล้อมที่มีคำนำหน้า "
การคัดลอกรหัสมีดังนี้:
safe_mode_allowed_env_vars = php_
0x08: จำกัด การเข้าถึงไฟล์สาธารณะที่มีชื่อต่อท้ายที่เฉพาะเจาะจง
เนื่องจากเหตุผลด้านความปลอดภัยไฟล์จำนวนมากที่มีชื่อต่อท้ายที่เฉพาะเจาะจงไม่สามารถเข้าถึงได้โดยผู้ใช้สาธารณะ ตัวอย่างเช่นไฟล์ที่มี. Incm ต่อท้ายมีข้อมูลที่ละเอียดอ่อนเช่นข้อมูลการเชื่อมต่อ MySQL หากไม่มีการกำหนดค่าที่เหมาะสมผู้ใช้ทุกคนสามารถเข้าถึงไฟล์การกำหนดค่านี้ได้ เพื่อปรับปรุงความปลอดภัยของเว็บไซต์คุณต้องกำหนดค่าต่อไปนี้ในไฟล์ ..htaccess:
การคัดลอกรหัสมีดังนี้:
<filesmatch>
คำสั่งอนุญาตให้ปฏิเสธ
ปฏิเสธจากทั้งหมด
</filesmatch>
0x09: สรุป
การกำหนดค่าเริ่มต้นของ PHP สำหรับนักพัฒนา หากเว็บไซต์มีไว้สำหรับผู้ใช้จำนวนมากขอแนะนำให้กำหนดค่า PHP ใหม่