allow_url_fopen
サーバーで有効にするように求めている開発者が数人います。最近の標準は何ですか?libcurl
有効になっている場合、許可する正当な理由は本当にありますか?
環境: Windows 2003、PHP 5.2.6、FastCGI
allow_url_fopen
サーバーで有効にするように求めている開発者が数人います。最近の標準は何ですか?libcurl
有効になっている場合、許可する正当な理由は本当にありますか?
環境: Windows 2003、PHP 5.2.6、FastCGI
答えは、開発者が責任を持って機能を使用することをどれだけ信頼しているかにかかっていると思いますか? 外部 URL からのデータは、他の信頼できない入力と同じように扱う必要があります。
私の見方では、開発者を子供のように扱い、鋭利な処理を決して行わせなければ、安全なコードを書く責任を決して学ばない開発者が生まれるということです。
オフに設定することをお勧めします。allow_url_include
これにより、多くのリスクも軽減allow_url_fopen
されます。
しかし、PHP のすべてのバージョンに があるわけではないためallow_url_include
、多くのベスト プラクティスは fopen をオフにすることです。すべての機能と同様に、現実には、アプリケーションで必要ない場合は無効にします。それが必要な場合は、curl モジュールの方がうまく機能する可能性が高く、curl を使用して無効にするようにアプリケーションをリファクタリングするとallow_url_fopen
、最も決定力のないクラッカーを抑止できる可能性があります。
開発の種類によって異なります。プロトタイピングの場合、'allow_url_fopen' を有効にすることは問題ありませんが、libcurl と file_get_contents の間に大きな速度の違いはなく、有効にすることは便宜上の問題にすぎません。
運用サーバーの場合、libcurl へのすべての呼び出しは、セキュリティ監査のためにフラグを立てる必要があります。「allow_url_fopen」が有効になっている場合は、fopen と file_get_contents も同様です。「allow_url_fopen」を無効にしてもエクスプロイトは防止されず、エクスプロイトを実行できる方法の数がわずかに制限されるだけです。
クロスサイト スクリプティング攻撃は苦痛なので、反対票を投じます。そして、絶対に「allow_url_include」をオフに設定する必要があります。そうしないと、ひどいことになります。
大きな問題は、allow_url_fopenのセキュリティが強化されていないことです。そのため、curlを使用してURLからファイルを保存する場合は、fopen/file_getからパスしてファイルを保存する必要があります。
- CURLは、URLからリモートコンテンツを取得する場合にのみ有効です。 (allow_url_fopenは必要ありません)
- リモートファイルをサーバーに保存する場合は、FopenまたはFile_getを使用してCURLを追加する必要があります。 (allow_url_fopenはCURLで必須)
PHPは、より安全にするための他の方法を見つける必要があります。