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 =”,如果这行前面有;符号的就删除这个符号,然后把这行修改为:- 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代码- <?php
- $fp = fsockopen("www.my9u.com", 80, &$errno, &$errstr, 10);
- if(!$fp) {
- echo "$errstr ($errno)<br>\n";
- } else {
- fputs($fp,"GET / HTTP/1.0\nHost: www.my9u.com\n\n");
- while(!feof($fp)) {
- echo fgets($fp,128);
- }
- fclose($fp);
- }
- ?>
复制代码 |