【发布时间】:2010-09-06 09:01:24
【问题描述】:
如何检查file permissions,而不必通过passthru() 或exec() 运行操作系统特定的命令?
【问题讨论】:
标签: php file-permissions
如何检查file permissions,而不必通过passthru() 或exec() 运行操作系统特定的命令?
【问题讨论】:
标签: php file-permissions
使用fileperms()函数
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
【讨论】:
您可以使用is_readable()、is_executable() 等命令。
【讨论】:
真正的编码人员使用按位运算,而不是字符串;)这是处理权限的更优雅的方式:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}
【讨论】:
使用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__ 替换为您的路径或变量
【讨论】:
你想通过检查文件权限来做什么?
在编写安全代码时,“检查,然后执行”任何事情几乎总是不正确的。原因是在检查你是否可以做某事和实际做某事之间,系统的状态可能会发生变化,以至于做它会产生不同的结果。
例如,如果您在写入文件之前检查文件是否存在,则不要检查文件是否写入成功(或不检查足够详细的方式),然后再依赖文件的内容你写的文件,你实际上可能正在读取一个攻击者写的文件。
因此,与其检查文件权限,不如在权限检查成功后做任何你想做的事情,并优雅地处理错误。
【讨论】: