程序员的谦逊编程

其实每个程序员或多或少都会有个毛病,就是具有某种有强烈的“优越感”。而这种“优越感” 有可能成为激励自身不断发展的动力,同时也有可能成为其职场中的绊脚石。程序员的这种心态,源自自身掌握的技术、以及多年积累的经验。正如上面所言,这种心态 能使其一切都力求完美、同时准确按照自己的思路行事,能使其技术不断的提升。而另一方 面,如果将这种态度套用给身边其他的人(包括陌生人、同事、朋友甚至家庭),则会发现 他的生活将会如履薄冰 — 他们只会看见完美的一面而忽略了更多更需要关注的事物。

Continue reading


apache RewriteMap MapSource自定义规则使用手记

10.1期间,一位朋友问我一个apache的 Rewrite规则中一个高级语法RewriteMap的用法问题。其想要实现的是这个功能,有个多用户的blog,用户访问的时候,是用三级域名访问的。比如http://cfc4n1.blog.cnxct.com,http://cfc4n2.blog.cnxct.com这种三级域名。在服务器上,是对三级域名做泛解析。每个三级域名都生成了一个静态的html主页文件。由于用户数量较多,linux ext硬盘格式上同一目录文件太多,检索文件的速度会有折扣,遂将文件打散到不同的目录下。打散方式是以用户名【三级域名中的cfc4n1,cfc4n2等】的MD5值的每隔两位作为一个目录。

Continue reading


wordpress博客永久地址的二次重写

在很久很久以前,从前有座山,山上有个庙,庙里有个和尚在讲故事,讲什么呢?从前有座山,山上有个庙,庙里有个和尚在讲故事,讲什么呢……
言归正传,很久以前,博客的URL是这种形式http://www.cnxct.com/cnxct/612/ 这种形式,后来呢,听网上SEOer说,为了更好的SEO,URL中包含关键词,可提高权重等等等等。遂打算把老的URL形式重写成

Continue reading


如何精确查找PHP WEBSHELL木马?

上篇提到了关于网上流传查找PHP webshell的python脚本中,不严谨的代码并且给出了一个python的检测代码,同时,下文里也提到不能检测到反引号的命令执行的地方。今天,我想了下,现在把思路发出来。正则表达式该如何写?
分析:对于可移植性的部分共同点是什么?与其他正常的包含反引号的部分,区别是什么?
他们前面可以有空格,tab键等空白字符。也可以有程序代码,前提是如果有引号(单双)必须是闭合的。才是危险有隐患的。遂CFC4N给出的正则如下:【(?:(?:^(?:\s+)?)|(?:(?P<quote>[“‘])[^(?P=quote)]+?(?P=quote)[^`]*?))`(?P<shell>[^`]+)`】。

Continue reading


关于网上流传查找PHP webshell的python脚本中,不严谨的代码

不是闲着蛋疼,也不是批评谁,只是不忍心看到不严谨的代码在网上被疯传,误导初学者。以下引用的代码以及思路来自网络,只针对代码,不针对人。如有雷同,纯属巧合。
来自某大牛python版本的检测服务器上PHP代码中webshell的脚本代码片段如下:
findtype=[‘.php’,’.inc’] #要检查的文件后缀类型
keywords=[ [“eval\(\$\_POST”,”发现PHP一句话木马!”], [“(system|shell_exec|exec|popen)”,”发现PHP命令执行函数!”]]
然后,接着是python处理上面列表(数组),把每个列表的第一个元素作为正则表达式内容,然后进行匹配处理的。先看第一个检测“PHP一句话木马”的这个正则。【eval\(\$\_POST】这里转义了字符【_】,字符“_”不是元字符,不需要转义的,其实,转义也无妨,聪明的正则表达式引擎会识别修正的。来说下这个思路的遗漏之处。这里仅仅匹配字符串“eval(”后面的变量“$_POST”,如果是“$_GET”呢?如果是“$_REQUEST”呢?如果程序先把$_POST/$_GET/$REQUEST的key的变量先赋值给一个自定义的变量名,然后在用PHP的“eval”函数执行这个变量呢?是不是就查找不到了?其实,并不需要知道“eval”函数执行的变量名是什么,只要查找“eval(”即可,当然,还要注意“eval”函数后面可以有空格,tab键之类空白字符。上面的代码片段中,也没考虑到这一点。

Continue reading


snoopy.class.php中_striplink方法的正则分析

对于已经习惯8点左右起床上班的我来说,生物钟在早上8点左右,准时醒,有时候想赖床,但也无法再次入睡。起床洗漱,打开电脑,玩了两局web的三国杀,逛逛论坛,觉得饿了,才去煮点面条吃。回来继续,无意中打开PPC,看到一位网友“落叶人生”同学的帖子问一个正则问题,纠结了一下是否解释一下,以便给对方释疑解惑,也加固自己的知识。犹豫半天,觉得还是写下吧。

Continue reading


PHP中正则表达式对UNICODE字符码的匹配


我们在来分析一下这个网友写的正则表达式【[chr(128)-chr(256)]+】,正则表达式的PCRE引擎是如何解释这个正则的呢?首先,我们要知道,在正则表达式中,中括号【[]】表示字符组,字符组中除了连接符【-】只外,都不是元字符,也就是说,都是普通字符,当然,如果连字符出现在第一个,或者不是标识两个字符之间范围的,都是普通的字符横杠“-”罢了。这里的chr(128)只是标识ASCII码为128(确切的说,ASCII码只是0-127个,128到其他的,应该不叫ASCII码了。),但是在正则里,他仍然代表【c、h、r、(、1、2、8、)】(顿号不是,只是区分易读的)这八个字符罢了。这个正则里的连接字符,是哪些范围呢?很明显,这里的连接字符的范围是【)-c】,“)”ASCII码为0x29,也就是十进制的41;“c”的ASCII码为0x63,也就是十进制的99,那么,他这个连接字符的范围就是ASCII 41(chr(41))到ASCII 99(chr(99))之间的字符。

Continue reading


eval、gzinflate、 base64_decode三函数加密的代码在线解密


其实,这边日志的主题不是想写被eval、gzinflate、 base64_decode三函数加密的代码的在线解密的。主要写生活中的两三件事。

其一,刘威同学生了个儿子,在这里恭喜一下。俺又多了个侄子,年底回家,连他结婚的喜酒,跟小侄子的见面礼一并给了。(此人已经生子,还未结婚,大家一起来鄙视一下,当然,你也可以羡慕一下。)

Continue reading


升级ubuntu内核,virtualbox提示Kernel driver not installed (rc=-1908)出错


今天,我闲的蛋疼,更新来ubuntu内核,重启之后,也没在意,为了PS一张图,GIMP用起来不方便,遂开虚拟机virtualBox,进XP,用PhotoShop来操作,结果,VirtualBox却提示“ernel driver not installed (rc=-1908)”,我还没来得及点确定,又提示
The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Re-setup the kernel module by executing
‘/etc/init.d/vboxdrv setup’
as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

Continue reading