Discuz禁用fsockopen函数的解决办法

发布时间:2020-10-04编辑:脚本学堂
利用程序漏洞注入后使用 fsockopen 进行PHPDDOS 攻击,导致部分服务器不稳定。本文介绍Discuz禁用fsockopen函数的解决办法。

利用程序漏洞注入后使用 fsockopen 进行PHPDDOS 攻击,导致部分服务器不稳定。
因此有些主机商就会暂时禁用fsockopen函数功能,这样部分网站程序功能可能会出现问题。

通用的解决方法是:
找到程序里的 fsockopen 函数,替换为:pfsockopen,即可解决所有问题,两个函数的区别在于 pfsockopen 保持 keep-alive,使得黑客无法进行 连接数攻击。
已知使用 fsockopen 函数的程序文件路径(在fsockopen 前加 p, 即fsockopen 修改为 pfsockopen  即可 )[其他程序可通过错误提示的文件路径查看更改]:

Discuz X2  安装提示不支持fsockopen:
将 /include/install_var.php  文件里的
 

复制代码 代码如下:
$func_items = array(‘mysql_connect’, ‘fsockopen‘, ‘gethostbyname’, ‘file_get_contents’, ‘xml_parser_create’);
 

替换为:
 

复制代码 代码如下:
$func_items = array(‘mysql_connect’, ‘pfsockopen‘, ‘gethostbyname’, ‘file_get_contents’, ‘xml_parser_create’);
 

即可正常安装。
X2全部包含fsockopen的文件(如果用邮件只修改邮件即可,其他文件都是自动判断 pfsockopen):
 

复制代码 代码如下:
apimanyouManyou.php
apitradeapi_alipay.php
installincludeinstall_function.php
installincludeinstall_lang.php
installincludeinstall_var.php
sourceadmincpadmincp_addons.php
sourceadmincpadmincp_checktools.php
sourceadmincpadmincp_cloud.php
sourceadmincpadmincp_misc.php
sourceadmincpcloudcloud_doctor.php
sourceclassclass_image.php
sourceclassclass_sphinx.php
sourceclassblockxmlblock_xml.php
sourcefunctionfunction_connect.php
sourcefunctionfunction_core.php
sourcefunctionfunction_filesock.php
sourcefunctionfunction_importdata.php
sourcefunctionfunction_mail.php      邮件相关
sourcefunctionfunction_plugin.php
sourceincludeportalcpportalcp_upload.php
sourcelanguagelang_admincp_cloud.php
sourcemoduleforumforum_ajax.php
sourcemodulemiscmisc_manyou.php
uc_clientclient.php
uc_clientlibsendmail.inc.php         邮件相关
uc_clientmodelmisc.php
uc_serverinstallfunc.inc.php
uc_serverinstalllang.inc.php
uc_serverlibsendmail.inc.php         邮件相关
uc_servermodelmisc.php

Discuz 品牌空间不能安装,提示UC地址不正确:
修改 /install/func.inc.php 里的 fsockopen函数为 pfsockopen

Discuz 7.2:(非首次安装,可以只改绿色部分。)
问题:使用 uc 不能登录 , fsockopen函数位于:
 

复制代码 代码如下:
includeglobal.func.php(240): $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
includesendmail.inc.php(54):  if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
installfunc.inc.php(803):  $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
installvar.inc.php(70): $func_items = array('mysql_connect', 'fsockopen', 'gethostbyname', 'file_get_contents', 'xml_parser_create');
uc_clientclient.php(211): $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
uc_clientlibsendmail.inc.php(40):  if(!$fp = fsockopen($mail_setting['mailserver'], $mail_setting['mailport'], $errno, $errstr, 30)) {
uc_clientmodelmisc.php(97): $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
uc_serverlibsendmail.inc.php(40):  if(!$fp = fsockopen($mail_setting['mailserver'], $mail_setting['mailport'], $errno, $errstr, 30)) {
uc_servermodelmisc.php(94): $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);