ファイルのアクセス許可を確認する


14

passthru()またはexec()でオペレーティングシステム固有のコマンドを実行しなくても、file permissionsを確認するにはどうすればよいですか?

17

使用fileperms()機能

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

0

ファイルのアクセス許可をチェックして、何をしたいですか?

セキュアなコードを書くときは、ほとんど「チェックしてから、やる」ことがほとんどです。その理由は、あなたが何かを行うことができるかどうかをチェックして実際にそれを行うかどうかの間に、システムの状態が変わる可能性があり、その結果、異なる結果が生じることがあるからです。

たとえば、ファイルを書き込む前にファイルが存在するかどうかをチェックする場合は、ファイルを正常に書き込んだか(詳細なチェックを行わないか)チェックしないでください。あなたが書いたファイルは、実際に攻撃者によって書かれたファイルを読むことができます。

ファイルのパーミッションをチェックするのではなく、パーミッションのチェックが成功した場合は何をしていても、エラーを正常に処理してください。

+1

権限をチェックするための実行可能な理由は、おそらく彼はdoesnの固定権限のためのデーモンを構築しています、常にあります。別のプロセスがそれを行うようになるので、ファイルを読み書きするためにスクリプトに依存しません。 20 5月. 112011-05-20 14:44:56

+1

別の例として、rewriteMapプログラムがあります。このプログラムは、特定のファイル権限に基づいてゲートとして機能します。 21 3月. 122012-03-21 16:45:08


11

is_readable(),is_executable()などのコマンドを使用できます。

+1

is_writable()はグループメンバーシップをチェックしません(PHP 5.5.18以降)。 12 11月. 142014-11-12 22:30:01


1

使用fileperms()機能とサブ:

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

がパスや変数

__FILE____DIR__を交換してください:ファイルの場合

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


6

実コーダーは、ビットごとの演算ではなく、文字列を使用します。これは、取り扱い権限のはるかにエレガントな方法です):

function checkPerms($path) 
{ 
    clearstatcache(null, $path); 
    return decoct(fileperms($path) & 0777); 
} 
  0

これは何を返しますか?真/偽ですか? 06 5月. 142014-05-06 16:08:09