TextNut - Just concentrate on your words
TextNut is markdown editor for Mac. It is 100% compatible with CommonMark specification. TextNut can switch between rich and markdown editing mode at any time without losing your text formatting. Get free trial from www.textnutwriter.com.
Fsockopen

什么是fsockopen函数

打开网络的 Socket 链接。
语法: int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
返回值: 整数
函数种类: 网络系统

内容说明
目前这个函数提供二个 Socket 资料流界面,分别为 Internet 用的 AF_INET 及 Unix 用的 AF_UNIX。当在 Internet 情形下使用时,参数 hostname 及 port 分别代表网址及埠号。在 UNIX 情形可做 IPC,hostname 参数表示到 socket 的路径,port 配置为 0。

为什么会关闭

可有人用 fsockopen发起50M/s 的DoS攻击,导致我们的服务器被机房警告,这一切都是拜垃圾的dedecms所赐,目前主机同行均有很多服务器因为dedecms的这个漏洞导致服务器被拔线。

实际上,正常的网站应用,99%的情况下可以用curl来替代fsockopen。

因此不得不禁止。

我们接解除禁止多次,但是多次遇到用户被挂马发起攻击,最严重的一次还将我们的服务器停了一天。

其实,国内做美国主机的同行,在几年前都禁止了该函数。

一些解决方案


一般来说,需要fsockopen的地方均可用curl替代。

2011-11-20 我们设置了防火墙之后,再次开启fsockopen,发现服务器内依然有代码对外发动攻击,服务器几次宕机,所以只好再次禁止。

使用 WordPress 的 Akismet 插件

解决办法来自 mengzhuo。

打开 wp-content/plugins/akismet/admin.php。

在第166行

if ( !function_exists('fsockopen') || !function_exists('gethostbynamel') ) {

修改成
if ( (!function_exists('fsockopen') || !function_exists('gethostbynamel')) && !function_exists('wp_remote_post') ) {

在第706行
if ( !function_exists('fsockopen') || !function_exists('gethostbynamel') )

修改成
if ( (!function_exists('fsockopen') || !function_exists('gethostbynamel')) && !function_exists('wp_remote_post') )

省略的 timeout 选项表示多久没有连上就中断。在使用本函数之后会返回文件指针,供文件函数使用,包括 fgets()、fgetss()、fputs()、fclose() 与 feof()。参数 errno 及 errstr 也是可省略的,主要当做错误处理使用。使用本函数,会使用搁置模式 (blocking mode) 处理,可用 set_socket_blocking() 转换成无搁置模式。

或者干脆把所有 fsockopen 全替换为 pfsockopen。

如果fsockopen、pfsockopen都禁了怎么办,网友lyhydfp提出以下修改办法:
搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。示例如下
修改前:

$fp = fsockopen($host, 80, $errno, $errstr, 30);

修改后
$fp = stream_socket_client($host."80", $errno, $errstr, 30);

Discuz 安装跳过检查

安装 Discuz 的时候会有检查无法通过的问题,其实我们可以跳过这个检查,下面是方法。把
http://域名/upload/install/index.php?step=1&uchidden=&submit=%CE%D2%CD%AC%D2%E2

修改成
http://域名/upload/install/index.php?step=2&uchidden=&submit=%CE%D2%CD%AC%D2%E2

变版 Akismet

将 fsockopen 全替换为 pfsockopen 的版本
Create by mosir on 2012-03-15 10:25:01.0
Last updated by mosir on 2012-03-15 10:26:19.0