我想拒绝访问 file_exists/opendir/openfile 等函数的文件 data.xml
我的文件 test.php 包含:
$path="./mydata.html";
if ($handle = opendir($path)) {
}
closedir($handle);
如何在不阻塞功能的情况下使其不可读?可能吗?
- .ht 访问?
- 我应该通过不同用户设置的 chmod 阻止文件而不是执行 php 脚本吗?
- 另一种方式?
谢谢
最简单的方法是编写一个函数来检查文件路径,并sanitize_filepath($path)
在您接受用户数据时或在每个fopen()
//之前调用 (ie opendir()
) file_get_contents()
。在sanitize_filepath()
函数中,$path
展开PATH_SEPARATOR
并使用in_array()
以根据您提供的路径检查您的内部黑名单。
如果您不观看继续,则返回 false 或抛出异常,如果您这样做,则返回文件路径或 true。
阻止通过 .htaccess 访问仅意味着我无法访问http://example.com/your/website/data.xml并查看该文件。如果我请求http://example.com/your/website/script.php?file=data.xml(假设 script.php 是<?= echo file_get_contents($_GET['file']); ?>
. (这显然是一个无用且不安全的脚本,但它是一个示例。)
通过 chmodding 权限阻止访问可能会阻止 PHP 读取文件。如果您不需要阅读该文件,则它不应该位于 PHP 可以访问它的地方——将它移到您的 webroot 之外。