检查文件权限
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 程序,它根据某些文件权限充当门。以上是关于检查文件权限的主要内容,如果未能解决你的问题,请参考以下文章