1: การตรวจสอบจำนวนไฟล์ที่รวม
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
ลอจิก: PHP ออกถ้าไม่นับรวมขั้นต่ำ โปรดทราบว่าก่อนหน้า PHP5 หน้าฐานจะไม่ถือว่าเป็นการรวม
2: การกำหนดและตรวจสอบค่าคงที่ทั่วโลก
// In the base page (directly accessed):
define('_DEFVAR', 1);
// In the include files (where direct access isn't permitted):
defined('_DEFVAR') or exit('Restricted Access');
ลอจิก:หากไม่ได้กำหนดค่าคงที่การดำเนินการจะไม่เริ่มต้นจากหน้าฐานและ PHP จะหยุดการทำงาน
โปรดทราบว่าเพื่อประโยชน์ในการพกพาในการอัปเกรดและการเปลี่ยนแปลงในอนาคตการทำวิธีการรับรองความถูกต้องแบบแยกส่วนนี้จะช่วยลดค่าใช้จ่ายในการเขียนรหัสลงได้อย่างมาก
// Put the code in a separate file instead, say 'checkdefined.php':
defined('_DEFVAR') or exit('Restricted Access');
// Replace the same code in the include files with:
require_once('checkdefined.php');
วิธีนี้สามารถเพิ่มรหัสเพิ่มเติมได้ checkdefined.php
การเข้าสู่ระบบและการวิเคราะห์เช่นเดียวกับการสร้างการตอบสนองที่เหมาะสม
เครดิตที่เครดิตครบกำหนด:ความคิดที่ยอดเยี่ยมของการพกพามาจากคำตอบนี้
3: การอนุมัติที่อยู่ระยะไกล
// Call the include from the base page(directly accessed):
$includeData = file_get_contents("http://127.0.0.1/component.php?auth=token");
// In the include files (where direct access isn't permitted):
$src = $_SERVER['REMOTE_ADDR']; // Get the source address
$auth = authoriseIP($src); // Authorisation algorithm
if( !$auth ) exit('Restricted Access');
ข้อเสียของวิธีนี้คือการแยกการดำเนินการเว้นแต่เซสชั่นโทเค็นให้มาพร้อมกับการร้องขอภายใน ตรวจสอบผ่านทางลูปแบ็คในกรณีที่มีการกำหนดค่าเซิร์ฟเวอร์เดียวหรือรายการที่อยู่สีขาวสำหรับโครงสร้างพื้นฐานเซิร์ฟเวอร์แบบหลายเซิร์ฟเวอร์หรือโหลดบาลานซ์
4: การให้สิทธิ์โทเค็น
เช่นเดียวกับวิธีการก่อนหน้านี้หนึ่งสามารถใช้ GET หรือ POST เพื่อส่งโทเค็นการอนุญาตไปยังไฟล์ include:
if($key!="serv97602"){header("Location: ".$dart);exit();}
วิธีการที่ยุ่งมาก แต่ก็อาจจะปลอดภัยและหลากหลายที่สุดในเวลาเดียวกันเมื่อใช้อย่างถูกวิธี
5: การกำหนดค่าเฉพาะของเว็บเซิร์ฟเวอร์
เซิร์ฟเวอร์ส่วนใหญ่อนุญาตให้คุณกำหนดสิทธิ์สำหรับแต่ละไฟล์หรือไดเรกทอรี คุณสามารถวางการรวมทั้งหมดของคุณไว้ในไดเรกทอรีที่ถูก จำกัด และมีการกำหนดค่าเซิร์ฟเวอร์ให้ปฏิเสธ
ตัวอย่างเช่นใน APACHE การกำหนดค่าจะถูกเก็บไว้ใน.htaccess
ไฟล์ กวดวิชาที่นี่
โปรดทราบว่าฉันไม่แนะนำให้ใช้การกำหนดค่าเฉพาะสำหรับเซิร์ฟเวอร์เนื่องจากความสามารถในการพกพาข้ามเว็บเซิร์ฟเวอร์ที่แตกต่างกันนั้นไม่ดี ในกรณีเช่นระบบจัดการเนื้อหาที่ deny-algorithm ซับซ้อนหรือรายการไดเร็กตอรี่ที่ถูกปฏิเสธนั้นค่อนข้างใหญ่, มันอาจทำให้เซสชันการกำหนดค่าใหม่ค่อนข้างน่ากลัวเท่านั้น ในที่สุดก็ควรจัดการในรหัส
6: การวางรวมอยู่ในไดเรกทอรีที่ปลอดภัยนอกรูทไซต์
เป็นที่ต้องการอย่างน้อยเนื่องจากข้อ จำกัด การเข้าถึงในสภาพแวดล้อมเซิร์ฟเวอร์ แต่เป็นวิธีที่ค่อนข้างมีประสิทธิภาพหากคุณมีการเข้าถึงระบบไฟล์
//Your secure dir path based on server file-system
$secure_dir=dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR."secure".DIRECTORY_SEPARATOR;
include($secure_dir."securepage.php");
ตรรกะ:
- ผู้ใช้ไม่สามารถร้องขอไฟล์ใด ๆ นอก
htdocs
โฟลเดอร์เนื่องจากลิงก์จะอยู่นอกขอบเขตของระบบที่อยู่ของเว็บไซต์
- เซิร์ฟเวอร์ php เข้าถึงระบบไฟล์อย่างเป็นธรรมชาติและด้วยเหตุนี้จึงสามารถเข้าถึงไฟล์บนคอมพิวเตอร์ได้เช่นเดียวกับที่โปรแกรมปกติที่มีสิทธิ์ที่จำเป็นสามารถทำได้
- ด้วยการวางไฟล์ include ไว้ในไดเรกทอรีนี้คุณสามารถมั่นใจได้ว่าเซิร์ฟเวอร์ php จะเข้าถึงไฟล์เหล่านั้นได้ในขณะที่การเชื่อมโยง hotlink ถูกปฏิเสธไปยังผู้ใช้
- แม้ว่าการกำหนดค่าการเข้าถึงระบบไฟล์ของเว็บเซิร์ฟเวอร์ไม่ได้ทำอย่างถูกต้องวิธีนี้จะป้องกันไม่ให้ไฟล์เหล่านั้นกลายเป็นสาธารณะโดยไม่ตั้งใจ
โปรดแก้ตัวอนุสัญญาการเข้ารหัสนอกรีตของฉัน ข้อเสนอแนะใด ๆ ที่มีความนิยม