如何在PHP中限制文件系统访问?

时间:2014-11-19 15:57:54

标签: php file-io php-stream-wrappers

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

对于少数选定的文件名(日志文件,访问/tmp等),外,应阻止

不是安全事件,而是强制开发团队直接访问文件系统 (并检测)现有代码中的斑点,已经是这种情况)。我们希望在这种情况下看到一个例外(被捕获并报告),因为这些文件的内容必须通过其他方式访问。

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

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