web-dev-qa-db-ja.com

dirname(__ FILE__)を使用することは良い習慣ですか?

Joomlaのコードを見ると、インデックスの最初の行で、インストールの基本パスがdirname(__FILE__)で定義されていることがわかります。

これはサイトに起こりうるリスクですか?インクルードの失敗などが原因で、制御されていないエラーメッセージがJoomlaディレクトリの内部パスを示している場合、それを使用してサイトへの何らかの攻撃を実行できますか?はいの場合、この機能を使用すると便利ですか?

2
webose

最初にPHPエラーメッセージをユーザーに表示するべきではありません。そのため、リスクはありません。

また、サーバーでの唯一の安全対策がソースコードのあるパスを非表示にすることである場合、...まあ...ユーザーにパスを表示することで、他のリスクをより心配する必要があります。

最後に、相対パスを使用すると、セキュリティホールが増える可能性があります。例えば PHPでディレクトリトラバーサルを防止するがパスを許可する を参照)。

1

___FILE___は、実行中のスクリプトのパスを保持するネイティブグローバル変数であり、dirname(__FILE__)はそのパスのディレクトリ部分を返します。 ___FILE___のパスが存在しないか無効である場合、そもそもスクリプトを呼び出すことができなかった場合、これが失敗することは絶対にありません。

一般的に言えば、PHPエラー(警告と通知を含む))がユーザーに届かないようにする必要があります。 _error_reporting_ および _display_errors_

3
yannis

___DIR___PHP> = 5.3で使用し、それ以外の場合はdirname(__FILE__)で使用します。

どちらも同じ出力を提供しますが、___DIR___はコンパイル時に評価され、高速です(または高速である必要があります)。 dirname(__FILE__)は、実行時に評価される関数呼び出しを意味します。

_var_dump(__DIR__);
var_dump(dirname(__FILE__));
_

https://stackoverflow.com/a/2749423/2010598 で説明されているように

0
Phil