PHP allow_url_fopen

foto:Fence - Wikipedia, the free encyclopedia


PHP5の設定ファイルに( php.ini)Fopen wrappersという項目があり、その最初の項目に、allow_url_fopen という項目がある。


Fopen wrappersのブログでの言及は、ちょっと見、2006年ごろまでが多い。


「○○にすべきだ。」とか、「推奨しないとか、」「正しい、○○」とかを象徴する事例でもないのだけれど、

allow_url_fopen Offが常識なら、何かしなければいけない

気になるので調べてみることにした。


allow_url_fopen がOffになっていると、どうなるか。

foreach(simplexml_load_file('http://www.flickr.com/services/feeds/photos_public.gne')->entry as $it)
echo $it->content ;

PHP一行で書けるRSSリーダー : 管理人@Yoski
このように、外部のファイルを取得する作業は出来なくなってしまう。

echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');

PHP5.2<

こんなことも遠慮


自分の管理下にない、他のファイルを取得したり、ブログのコメントなどのように外部からの入力を受け入れる場合の、「安全性を評価するのは簡単じゃないのはわかる。」


が、allow_url_fopenが、Offなら、安全なのか?


allow_url_fopenがOffの状態で外部ファイルにアクセスする方法はある

HTTP_Requestでも、
<?php
require_once "HTTP/Request.php";

$req =& new HTTP_Request("http://www.tenman.info/frogpark/");
if (!PEAR::isError($req->sendRequest())) {
    echo $req->getResponseBody();
}
exit;

?>
curlでも
<?php
//urlのコピーを取る
$ch = curl_init("http://d.hatena.ne.jp/tenman/");
$fp = fopen("sample.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>