|
關于fsockopen pfsockopen函數安全問題
時間:2012-06-13 來源: |
尊敬的億騰用戶:您好! 我(wǒ)(wǒ)們發現fsockopen pfsockopen函數存在着重大(dà)安全隐患,會對整個機房産生(shēng)極大(dà)的影響,爲了維護機房以及自身網絡的穩定,我(wǒ)(wǒ)們不得不在所有主機産品上禁用fsockopen pfsockopen函數,我(wǒ)(wǒ)們會首先将隐患發生(shēng)較重的服務器着手操作,其他的服務器會分(fēn)批分(fēn)量進行,有使用此功能的網站建議用戶提前修改程序,以免影響網站的正常使用,給您帶來不便,請您諒解!如有疑問,您可以緻電億騰客服中(zhōng)心,電話(huà):0717-6463660 關于fsockopen pfsockopen函數被禁用的解決方法 一(yī)、 服務器同時禁用了fsockopen pfsockopen,那麽用其他函數代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的參數不同。 具體(tǐ)操作: 搜索程序中(zhōng)的字符串 fsockopen( 替換爲 stream_socket_client( ,然後,将原fsockopen函數中(zhōng)的端口參數“80”删掉,并加到$host。 示例如下(xià) 修改前: $fp = fsockopen($host, 80, $errno, $errstr, 30); 或 $fp = fsockopen($host, $port, $errno, $errstr, $connection_timeout); 修改後: $fp = stream_socket_client("tcp://".$host."80", $errno, $errstr, 30); 或 $fp = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $connection_timeout); 二、 如果PHP版本低于5.0,fsockopen被禁用,又(yòu)沒有stream_socket_client()怎麽辦呢?自己寫一(yī)個函數實現fsockopen的功能,參考代碼: function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) { $ip = gethostbyname($host); $s = socket_create(AF_INET, SOCK_STREAM, 0); if (socket_set_nonblock($s)) { $r = @socket_connect($s, $ip, $port); if ($r || socket_last_error() == EINPROGRESS) { $errno = EINPROGRESS; return $s; } } $errno = socket_last_error($s); $errstr = socket_strerror($errno); socket_close($s); return false; } 具體(tǐ)操作: 1.首先找到使用fsockopen函數的代碼段,将上面代碼加至其上端,搜索該代碼段中(zhōng)的字符串 fsockopen( 替換爲 b_fsockopen( 。 2.因爲fsockopen函數返回文件指針所以可以被文件函數操作,但是這個b_fsockopen函數沒能返回文件指針,需要繼續修改代碼段:用socket_read( 替換掉 fread( ,用socket_write( 替換掉fwrite( ,用socket_close( 替換掉fclose( 。 三、 使用CMS類網站程序的用戶,如織夢CMS,phpwind,帝國,等程序,請将您的程序升級到最新的版本并及時更新安全漏洞補丁。
億騰客服部 2012.6.13 |
|
|
|
|