2

セキュリティ上の理由から、php.iniで関数globを無効にしましたが、期待どおりに機能しますが、phpinfoが次の情報を明らかにしていることにも気づきました。

登録済みのPHPストリーム:php、file、glob、data、http、ftp、zip、compress.zlib、phar

したがって、次のソースを使用すると、次のようになります。

$it = new DirectoryIterator("glob://C:\wamp\www\*");
foreach($it as $f) {    
    printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
}

それでも、指定されたディレクトリの内容が返されます。

globなどのPHPストリームの登録をグローバルに解除するにはどうすればよいですか?

4

1 に答える 1

2

簡単に言えば、試してみる必要さえありません。

PHP は十分に完全な言語であり、誰かが脆弱なコードの汚れを書き込もうとしても、配置した任意のブロックを介してそれを行うことができます。そのような機能を無効にする唯一のことは、アプリケーション開発者の生活を地獄にすることです。

safe_mode物事が好きで、実際には何も保護open_basedirしないことが証明されています。その理由は 2 つあります。

  1. ブラックリスト (safe_mode とは) は機能しません。これは何度も何度も証明されています。

  2. 安全でない基盤の上に安全を確保することはできません。もう手遅れです。PHP 自体にはすでに十分なアクセス権があり、楽しい部分をすべて無効にしたとしても、人々はそれを回避できます。

代わりに、ボトムアップから保護します。jailをインストールし、chrootその中で PHP を実行します。適切な権限を使用してください。サーバーで実行するコードを精査します。サーバーへの侵入を監視します。派手なものはありません。古き良きシステム管理者の仕事...

元の質問に答えるには

ストリーム ラッパーを登録解除できる唯一の方法は、stream_wrapper_unregister(). auto-prepend-file を使用してそれを行うことができます (すべてのスクリプトの前にそのコードを実行するため)。

しかし、PHP で glob を実装するのは簡単なことであることに注意してください。だから、それを無効にすることにはあまり意味がありません...

于 2013-06-21T00:34:13.240 に答える