Loading...

多级目录的处理思路

Filed under: PHP,网站技术 — 江东 @ 2012-09-04 11:50:17 才(9)条评论

现在很多系统,如文件管理,内容管理都存在多级目录的问题,而多数主流的程序(甚至包括知名的网店程序)居然都是采用数据库逐级查询来将目录按照分级形式显示出来,这种思路非常不科学,而且还消耗资源。

当然,本人以前也是这么做的,为了减少资源的开销,我一般都是添加了文件缓存。除非目录有变动,缓存不会做更改,这种方法大大降低了每次载入目录的资源占用,当然,也会很明显的减少网页的载入时间。

不过,我这里要介绍一个新的思路,对我自己来说,是原创,不过肯定有人已经用了这种方法。 (read on …)

php如何判断IP为有效IP地址

Filed under: PHP,网站技术 — 江东 @ 2012-04-18 21:03:20 才(6)条评论

多数人看到这篇日志,第一印象肯定是以为是要讲如何通过正则表达式来判断。

非也,在php5.2.0之后,有专门的函数来做这个判断了。

判断是否是合法IP
if(filter_var($ip, FILTER_VALIDATE_IP)) {
// it’s valid
}
else {
// it’s not valid
}

判断是否是合法的IPv4 IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
// it’s valid
}
else {
// it’s not valid
}

判断是否是合法的公共IPv4地址,192.168.1.1这类的私有IP地址将会排除在外
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE)) {
// it’s valid
}
else {
// it’s not valid
}

判断是否是合法的IPv6地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE)) {
// it’s valid
}
else {
// it’s not valid
}

判断是否是public IPv4 IP或者是合法的Public IPv6 IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
// it’s valid
}
else {
// it’s not valid
}

本文来源:http://www.electrictoolbox.com/php-validate-ip-address-filter-var/

一个简单自动监控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 才(5)条评论

前段时间,因为某些用户的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能正常的显示图片,本人不敢造次!

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