2

有人知道让 PHP 脚本自我限制访问文件系统(等)的技巧fopenfile_get_contents

除了少数选定的文件名(日志文件、访问权限等)外,应阻止此类调用/tmp

不是安全问题,而是迫使开发团队直接访问文件系统的一种手段(并检测现有代码中的点,这已经是这种情况了)。我们希望在这种情况下看到异常(被捕获并报告),因为必须通过其他方式访问此类文件的内容。

我正在考虑为协议实现我自己的streamWrapperfile://,但显然没有办法扩展内置的 filewrapper 类。

4

2 回答 2

2

选项1

您也可以使用open_basedir这是一个 php.ini 指令来限制应用程序可以访问的目录。目录可以用分号分隔,因此您可以只列出您希望应用程序访问的目录,包括 /tmp 文件夹。

需要注意的是,这也会影响 include、require 等内容。

选项 #2

您可以使用rename_functionrunkit_function_rename重命名它们,然后用您自己的逻辑包装重命名的版本。

从文档中引用:

将全局函数表中的 orig_name 重命名为 new_name。对于临时覆盖内置函数很有用。

例子:

rename_function('file_get_contents', 'nouse_file_get_contents');

function file_get_contents($filename, $use_include_path = false, $context, $offset = -1, $maxlen) {
    //
    // Do some validation here
    //
    return nouse_file_get_contents($filename, $use_include_path, $context, $offset, $maxlen);
}

选项#3

您可以为您的开发人员设置一些编码标准,并编写一些作为部署的一部分运行的单元测试,然后再将其投入生产。不确定你的发布程序是什么,但这些类型的东西应该在生产之前被捕获。

于 2014-11-19T16:07:13.033 回答
1

您当然可以让每个人都以只能访问您想要的文件的用户身份运行 php。但这是一个操作系统级别的解决方案。

于 2014-11-19T16:09:55.923 回答