检查文件权限

Posted

技术标签:

【中文标题】检查文件权限【英文标题】:Check file permissions 【发布时间】:2010-09-06 09:01:24 【问题描述】:

如何检查file permissions,而不必通过passthru()exec() 运行操作系统特定的命令?

【问题讨论】:

【参考方案1】:

使用fileperms()函数

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);

【讨论】:

【参考方案2】:

您可以使用is_readable()、is_executable() 等命令。

【讨论】:

请注意 is_writable() 不检查组成员身份(自 php 5.5.18 起)。【参考方案3】:

真正的编码人员使用按位运算,而不是字符串;)这是处理权限的更优雅的方式:

function checkPerms($path)

    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );

【讨论】:

返回什么,真/假? @S.. 它以字符串形式返回权限。例如“644”。【参考方案4】:

使用fileperms()函数和子字符串:

substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777

对于文件:

substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644

__FILE____DIR__ 替换为您的路径或变量

【讨论】:

【参考方案5】:

你想通过检查文件权限来做什么?

在编写安全代码时,“检查​​,然后执行”任何事情几乎总是不正确的。原因是在检查你是否可以做某事和实际做某事之间,系统的状态可能会发生变化,以至于做它会产生不同的结果。

例如,如果您在写入文件之前检查文件是否存在,则不要检查文件是否写入成功(或不检查足够详细的方式),然后再依赖文件的内容你写的文件,你实际上可能正在读取一个攻击者写的文件。

因此,与其检查文件权限,不如在权限检查成功后做任何你想做的事情,并优雅地处理错误。

【讨论】:

检查权限总是有可行的理由,也许他正在构建一个用于修复权限的守护进程,它不依赖于他的脚本来读取或写入文件,因为不同的进程会这样做. 另一个例子是 rewriteMap 程序,它根据某些文件权限充当门。

以上是关于检查文件权限的主要内容,如果未能解决你的问题,请参考以下文章

使用python检查文件夹/文件ntfs权限

检查文件权限

检查用户是不是对windows中的文件具有读取权限

检查 .NET 中的目录和文件写入权限

如何检查写入目录或文件的权限?

在python中检查文件的权限