找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1472|回复: 1

[站长互助] PHP fsockopen 函数的作用及安全

[复制链接]
发表于 2011-4-28 02:45:07 | 显示全部楼层 |阅读模式
PHP fsockopen其作用是打开网络的Socket 链接,最近就有黑客利用该函数进行挂马,并用这些木马程序来发大量的数据包攻击其他服务器,发包时带宽会达到98M以上,这样会严重影响网络的稳定性。我在这里给大家写了两种解决该安全的方法,针对不同的web运行平台的解决方案,Unix 、Linux and Windows

Windows环境下可以下载我编译好的IPS-UDP类策略包,运行bat处理程序完毕即可。
http://96.46.7.97/UDP-IPS.tag.gz

为了安全可以关闭该函数,95%以上的程序是不需要这个函数的,个别程序如淘宝客、Ucenter、部分API程序等才需要使用这个函数。如果关闭这个函数,发包程序将彻底失效,极大的增强了服务器的安全级别。
一下是流程:

编辑php.ini文件(一般是在:/web/conf/php5.ini ),找到文件中的“disable_functions =”,如果这行前面有;符号的就删除这个符号,然后把这行修改为:
  1. disable_functions = popen,exec,passthru,system,fsockopen,pfsockopen
复制代码
修改完成后保存退出,并重启apache引擎系统即可生效 。

语  法: 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。可省略的 timeout 选项表示多久没有连上就中断。在使用本函数之后会返回文件指针,供文件函数使用,包括 fgets()、fgetss()、fputs()、fclose() 与 feof()。

参数 errno 及 errstr 也是可省略的,主要当做错误处理使用。使用本函数,会使用搁置模式 (blocking mode) 处理,可用 set_socket_blocking() 转换成无搁置模式。

本例用来模拟成HTTP连接:

PHP代码
  1. <?php   
  2. $fp = fsockopen("www.my9u.com", 80, &$errno, &$errstr, 10);   
  3. if(!$fp) {   
  4.   echo "$errstr ($errno)<br>\n";   
  5. } else {   
  6.   fputs($fp,"GET / HTTP/1.0\nHost: www.my9u.com\n\n");   
  7.         while(!feof($fp)) {   
  8.                 echo fgets($fp,128);   
  9.          }   
  10.          fclose($fp);   
  11. }
  12. ?>
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|王牌互联

GMT+8, 2024-11-17 06:34 , Processed in 0.034444 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表