Loading...

一个简单自动监控nginx 504错误的php脚本

Filed under: PHP,网站技术 — 江东 @ 2011-11-22 11:39:59 才(12)条评论

因为php连接网络超时,很容易导致nginx 504错误,网络上有很多解决办法,但是不知道为啥在我这里都不奏效。

所以我只好写一个脚本,定期检测我的站点是否504了,若有504,只好出绝招“重启nginx和php-fpm”,

具体代码如下:
#!/usr/bin/php 是你的php路径 (read on …)

防止php fsocksopen函数发起DoS攻击的一个思路

Filed under: 互联网事 — 江东 @ 2011-11-18 11:49:57 才(4)条评论

前段时间,因为某些用户的dedecms程序被黑,被黑的脚本利用php的fsocksopen对外发起DoS攻击,所以我不得不禁止fsockopen函数,实际上,很多国内国外的主机商都是禁止这个函数的。

实际上,多数情况下fsocksopen可以用curl替代之,后者更加安全,然后依然有部分程序,如aksimet反垃圾插件,discuz论坛都需要fsocksopen来支持,所以如果可能,我觉得还是打开fsocksopen函数比较人道。

因此,我想到了一个方案,不知道是否可行:

  1. 写了一个脚本,定期扫描用户的文件,专门揪出那些有fsocksopen函数的文件,同时看看是否有被黑的标志,如果有,则标记为可疑文件;
  2. 用iptables监控流量,1分钟一次,如果发现outbound流量异常,则dump下当前的所有进程,以供后期人工排除查看;
  3. 将进程中的php文件 和可疑文件列表相对照,如果有吻合的文件,马上kill掉进程,同时将此文件属性标记为000,并且邮件通知;

当然,上面的1,2,3将会用脚本自动完成 。
这仅仅是一个想法,等到测试确实可能之后,homezz将会再次支持fsocksopen函数

发现一个问题:

  1. 若用户的php脚本进行了简单的base64加密,判断难度增加;
  2. 若php脚本进行了其他方式的加密,则无法扫描;

所以,目前还是有无法开启fsocksopen
此种方案不太完美

被黑脚本的特征列表(慢慢完善)

Filed under: 互联网事 — 江东 @ 2011-11-05 19:55:42 才(2)条评论

做虚拟主机的,最怕的就是用户的脚本被黑。

因为黑客往往喜欢自己放脚本上去,从而影响整个服务器的运行。因此我这篇日志的目的就是列出常用的被黑特征,以供自己今后查找原因使用,当然,这些信息也会用于我自己编写的服务器脚本扫描代码中。

  1. postocar.php  dedecms 被留下的脚本。脚本会建立大规模的socks连接,消耗光服务器资源;
目前只发现这个一个,本着有一个记录一个的目的,所以即使只有一个,也记录再次;
若读者朋友还知道其他的信息,欢迎留言添加,谢谢。

密码保护:屏蔽某个网站来源的用户的脚本

Filed under: 互联网事 — 江东 @ 2011-10-11 17:42:13 要查看留言请输入您的密码。

这是一篇受密码保护的文章。您需要提供访问密码:


简单介绍如何在网站集成支付宝或者paypal及时到帐交易

Filed under: 互联网事 — 江东 @ 2010-05-09 13:57:30 才(15)条评论

支付宝,安全、简单、快捷的网上支付 最近收到很多邮件,询问如何集成支付宝和paypal到网站中,而这些咨询的朋友又是比较熟悉php编程的,所以我不妨写一篇日志简单减少集成的流程:

  1. 支付宝请首先购买商家服务,否则没有API使用,同理paypal请升级为商家用户;
  2. 创建一个支付记录的数据表,表里面应该至少包含1. 交易ID 2.交易日期 3. 交易金额 4.此笔交易所有者的帐号,其他信息;
  3. 创建交易链接,创建链接包含交易金额,同时包含服务器通知链接*(后面有解释),便于服务器将交易状态通知到该程序。
  4. 编写通知链接指向的那个文件,接收交易平台发过来的通知,如果确定交易成功,则返回一个“成功”的标志给服务器,以免服务器重复发送。同时将交易数据更新到第二步创建的数据表中,供今后使用;
  5. 至此,每个用户的当前余额就可以在交易记录中提取了,有了数据,后面如何扣款,那自然是很简单的事情了。

服务器通知链接*:一旦发起了交易,只要在支付宝或者是paypal创建成功,那么支付平台的服务器就会向你指定的这个链接发送通知。然后便可以根据发送过来的内容判断交易状态。当然,这个程序同时也要给交易平台一个应答,否则交易平台无法判断通知是否被接受到,如果无法判断通知被接受到,交易平台服务器会不断的发送通知,当然发送会有时间间隔的,这个时间间隔会不断的增大。

几点注意事项:

  1. 支付宝的通知链接是不能有任何get参数的,比如 http://homzz.com/ali_notify.php?userid=100 这样是永远不可能成功的,所以要判断交易与哪个用户相关,必须在第二步,将交易ID和交易所有者关联好,到时候根据支付宝的通知返回的交易ID来判断交易的所属;
  2. paypal没有get参数限制,然而paypal的交易ID是不可以预设的,因此,我们可以动态创建通知返回链接如http://homzz.com/ali_notify.php?userid=100,那么这笔交易产生之后,paypal就只会向这个指定的link发送通知;
  3. 接收到一个通知之后,请向paypal或者alipay返回成功标志,以免重复通知;
  4. 由于有时候程序故障,或者第三方支付平台也会故障,或者是网络故障,导致返回的“成功”标志没有被支付平台服务器识别,所以在第四步的时候,要考虑重复通知问题,也就是说,即使重复通知了,数据库也不要产生多次插入操作,防止凭空出现无用的交易。

就写到这里吧,这对做即使到帐交易程序的朋友应该有点帮助。

解决最近刚刚出现的图片红叉问题

Filed under: PHP,网站技术 — 江东 @ 2009-07-16 23:13:49 才(45)条评论

由于本人的相册都很和谐,所以还是得想办法让用户能看见。

原理很简单,首先在国外的主机上加上一段代码,让国外的主机根据GET传递过去的url参数相片读取下来,缓存在自己服务器上,由于某个东西异常厉害,所以传递参数的时候还得要将某些单词给替代,才能传递,否则国外的主机连带撞死;

然后打开模板中的footer文件,添加一段js代码,此js代码的作用就是遍历该页所有图片,然后将其替代成http://xxx.com/readimg.php?这里是图片的地址,这样图片就可以正常显示了。js代码如下

$(“img “).each(function(i){//遍历本页所有的图片
var src = $(this).attr(“src”);
if( src.indexOf(‘ggpht’)!=-1 ){//如果图片来自某个地方,则替代之
$(this).attr(“src”,”http://0bad.com/readimg.php?src=”+src.replace(“ggpht”,”gouride”) );//则将图片地址改成转发的地址,记住ggpht替代掉,因为这个会触发墙
}
});

上面的全角字母请自行改成半角字母(请保证你主题引入了jquery )

至于那个php文件,请到这里下载:pika 然后放置到你国外的空间。ache和cache下的所有文件夹属性请设置成0777

另外,请大家低调发表评论,不要带上关键字,被和谐怕了

另,效果请参见右上角的homezz图片。

php插件方式将会在明天发布,届时feed中的图片也会正常显示!

此举仅仅是为了正常的blog能正常的显示图片,本人不敢造次!

不太熟悉如何使用的朋友,请等待我的插件发布!

定期发送数据库备份到email的程序

Filed under: 网站技术,虚拟主机 — 江东 @ 2009-07-08 23:00:40 才(19)条评论

cosbeta自己的每一个程序(如本站storyday.com,如homezz.com)都会有定期email备份,实现的原理很简单,那就是用php备份数据库,用crobjob定期(每天一次)执行这个程序将php的备份文件发送到我自己的email中。

程序下载地址:databasebackup

程序的安装方法:

  1. 直接下载,解压缩,将目录上传到服务器上;
  2. 打开index.php按照注释修改最前面的配置信息;
  3. 设置 data 文件夹的属性为0777, 为了数据库不会直接被下载,请不要删除 .htaccess
  4. http://您的域名/databasebackup?code=随机代码 打开网页,看看有没有错误提示,若没有并且收到了数据库备份邮件,则表示程序运行成功

下面在cpanel中让该程序可以自动运行

  1. 登录cpanel
  2. 进入cronjobs22-53-16
  3. 选择标准模式:22-53-22
  4. 设置每天执行一次php程序
    22-54-09

从此以后,您的数据库备份就会定期发送到您的邮箱。
提示:发件箱建议设置成gmail,我在国外虚拟主机上测试使用国内邮箱发送可能会失败。

程序下载地址:databasebackup

mysql大数据转移解决方案

Filed under: 网站技术,虚拟主机 — 江东 @ 2009-06-26 18:14:36 才(27)条评论

其实以前写过一次phpmyadmin无法导入大文件的解决方案,然而有些东西,若不点透,还是会有很大批的网友不明白怎么操作。所以下面我只告诉步骤,不再讲任何原理,事实证明,任何原理,懂的人没有必要看,不懂的人他们不会去看,即使原理很浅显。

首先在原来的phpmyadmin中分两步导出mysql数据库

请分两个步骤导出

第一步:导出数据库结构。数据库结构文件一般很小,几乎不可能超过2M,所以可以直接在另外一个phpmyadmin的上面直接恢复; (read on …)