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

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

【问题讨论】:

    标签: php file-permissions


    【解决方案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 程序,它根据某些文件权限充当门。
        猜你喜欢
        • 1970-01-01
        • 2014-09-10
        • 2011-12-16
        • 1970-01-01
        • 2015-02-10
        • 2015-06-13
        • 2018-01-09
        • 2011-08-20
        相关资源
        最近更新 更多