PHP:检查文件是否直接加载而不是包含?

2022-08-30 12:08:20

有没有办法防止用户查看文件,但仍然将其用作PHP中另一个文件中包含的文件?


答案 1

如果您使用

define('APP_RAN'); 

在包含它的文件中,然后放入

if(!defined('APP_RAN')){ die(); }

或者

defined('APP_RAN') or die();

(更易于阅读)

在包含的文件中,如果您直接访问它们,它将死亡。


不过,最好将所有包含的文件放在 DocumentRoot 之上。

例如,如果您的索引页位于

/my/server/domain/public_html

您应该将包含的文件放在

/my/server/domain/

答案 2

我的建议:

<?php
if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
    header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
    exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n</body></html>");
}
else {
   // your code
}
?>

1.)它检查它是否被直接调用,否则它会抛出一个错误

2.)它输出一个404标准apache错误页面(请与您原来的404页面进行比较或简单地包括该页面)以通过模糊性添加安全性

3.) else 部分避免在文件上传到实时环境时部分执行(PHP 不会等待“?>”)。如果包含的文件仅包含一个函数/一个类,则不需要它。


推荐