用XSLT欣赏所有世博印章

中国2010年上海世博会吸引了众人的关注,五彩缤纷的“世博印章”更是令人趋之若鹜。作为2010年世博会的两大创新项目之一的网上世博会的“我的护照”栏目,可以看到大部分场馆的世博印章图片。那么,能否一次性看到所有的世博印章呢?

Fiddler观察网络流量可以得知:每个片区有一个xml配置文件包含了片区内各场馆的名称和代码。例如,A片区的xml配置文件是:

<!-- http://www.expo.cn/configs/tencent/azone.xml -->
<root>
<err>0</err>
<p>
    <pid>11100001</pid>
    <dis>A片区</dis>
    <cnname>中国国家馆</cnname>
    <code>z0001</code>
    <type>体验馆</type>
    <name>China Pavilion</name>
</p>
<p>
    <pid>11200011</pid>
    <dis>A片区</dis>
    <cnname>哈萨克斯坦馆</cnname>
    <code>c1050</code>
    <type>浏览馆</type>
    <name>Kazakhstan Pavilion</name>
</p>
<p>
    <pid>11200013</pid>
    <dis>A片区</dis>
    <cnname>沙特馆</cnname>
    <code>c1086</code>
    <type>体验馆</type>
    <name>Saudi Arabia Pavilion</name>
</p>
<p>
    <pid>11200025</pid>
    <dis>A片区</dis>
    <cnname>印度馆</cnname>
    <code>c1018</code>
    <type>浏览馆</type>
    <name>India Pavilion</name>
</p>
<!-- 以下省略 -->
</root>

而世博印章的图片URI,可以根据pid字段构造。例如,中国国家馆的印章URI是:http://www.expo.cn/images/HZ/11100001.png

程序处理xml有很多种方法,其中一种好用的方法是XSLT。XSLT是一种声明性的、基于XML的语言,用于将一个或多个xml文档转换成另一些xml文档。XSLT经常被用于将xml数据转换成可以作为网页显示的html或xhtml文档。

双层动态图片保护Email地址

Email是最重要的通讯工具之一。滥发垃圾信息者会利用一切可能的通讯工具,把小广告送到你的手中。发送Email的成本极为低廉,使得Email倍受垃圾信息发送者的青睐。发送垃圾邮件的第一步,是收集足够多的有效电子邮件地址;而收集Email地址的方法,主要就是查询目录、使用网页爬虫两种。

通过查询目录收集Email地址,主要是查询各类电子黄页、网站备案资料、域名WHOIS信息等。例如WHOIS yoursunny.com,可以查询到域名注册者的Email地址(有些WHOIS结果页面会用各种方式保护Email地址,但大部分并不会进行保护)。根据规定,域名WHOIS信息必须包含有效的Email地址,因此规避这种收集的唯一方法是使用Private Domain Registration服务,令WHOIS信息中包含的Email地址不断变化。

使用网页爬虫收集Email地址,是指垃圾邮件发送者编写程序抓取互联网上的网页,在网页文本中提取形似Email地址的字符串。比如某网页包含了 someone@example.com 这个Email地址,爬虫程序抓取该网页时就可以用正则表达式找到这个地址。本文主要讨论针对这种收集方法的防范。

防范网页爬虫抓取Email地址的传统方法

使用变体Email地址

SNS社交平台的核心技术架构

SNS(Social Networking Sites),是一类用户可以自己发布信息、与别人互动并分享个人或职业兴趣的网站。知名的SNS网站有Facebook、MySpace、人人网(校内网)、开心网等。

运营一个SNS并不容易,需要用户体验研究、艺术设计、前端开发、后端架构、系统维护优化等技术人员,以及商务、公关、客服等非技术部门的通力配合。阳光男孩是技术人员,所以只谈技术。本文只想涉及SNS技术的一小部分:平台核心架构。所谓“平台核心架构”,我说的是SNS网站最基础、最核心的部分。与“操作系统”对比,SNS的平台核心架构,就相当于操作系统的内核。阳光男孩认为,SNS平台的核心架构包括两块:应用接入、消息分发。

应用接入,让用户有事可做

完善、稳定的应用接入平台,让用户在SNS平台上有事可做。这里所说的“应用”,既包括第三方应用(比如开心农场、荣光医院、跑火车等各类游戏),也包括SNS网站自己推出的应用(比如日志、照片、相册等各种内置工具)。自有应用+第三方应用,约等于SNS网站上除了首页、个人主页、设置页面以外的所有页面。

SNS平台为接入应用提供的功能

又一个加密PHP脚本的解码方法

三个星期以前我发布了一篇文章,介绍了base64加密的PHP脚本的解码方法。前几天,飞信好友行者又扔来了一段更加复杂、诡异的PHP脚本:

下载每一步的源代码

//0.php
<?php
$OOO0O0O00=__FILE__;$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$OO00O0000=26408;$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$O0O0000O0='OOO0000O0';eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMTgyKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDkwOCksJ0kvTU5LQUNkVlJHUXlEV1VncTY4d3BrYXpMTzVsdG5tVEIrMGJ2OXVIcnhGN1hTWTFFM2ZaaGlqYzRlMm9Kc1A9JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?>
tiBr5CwHGMBrljDvtMTb6AqwwAJ8qpRkqpRmpbA6wh7uwZp6pbp6aZ4/8wwua6brR+zHVkp3LktrGMlHGMcxaMcrUiqHzkvSzk4lQ9DY56voGMBlQ+rlaMcrUiBFyuDH5jplQ9DY56voGMBlQ+rlaMcrUiEYziA7OCJftMbuQMqVpAqgahDAwvLAwvJkgpR8k3t8qpRkqpRm8bADq6ttG6brmd1HGCvflipZGMqmwZp6pbp6k3tVpAqgaZBUwhgua6brR+zHVkp3LktrGMlHGMcxaMcrUiqHzkvSzk4lQ9DY56voGMBlQ+rlaMcrUiBFyuDH5jplQ9DY56voGMBlQ+rlaMcrUiEYziA7OCJftMbuQMqmwZp6pbp6k3tVpAqgaZBUwhgua6brG6vbOkwHRomF3Fu81JU31P7TLCBBOk4B5+405iZTOC73liBYt6405iij1o2GHe3EYFazEsYGStUNH2r75iDB5CBYlj6BH2UyZUG4S7Q3EsY/x7shwpC0S0gED8V1DMlrW3qU8fI18fI18fIJljq3ajRvlCEBziwHRhJmqbvyqpJmR31+R3VSRKJU8f/UyKo1yMc+R3V7GMqU8Zo1yNI18fIHRKJUyKJUyN/UyMTb8Zo18Zo1yN/UGMqUyNI18f/UyNI7RKJUyN/UyNI1yMb7RZbY8w4QgwDbpvRdwavKphpul8zctj/Fzary8fp7tC4XpKVFyCRiWapVluBCDhB8k8AAyiLOOCvxzfqvy9JGlhIJR31ugwRNqKpCqZBR6bXy8w4UwAA6whqppvtzkprBz9DbLkLuOCvxOiEX59J1laRftdpitjB4n0IEy0yZD8zjWNbFQ3lrG6brWiL05CJfL6Tb8fI1yKo18fI1G8Xvt9A7GMqU8fI18fI18fIrW1==Ngr3LaAhOaRvGMlSQ+J05CAfl3J05i4SLkDZQu/HlMlrW1ZGOk405dpbL6TuQ+cYziEBljyYLCRmljA7Qu/HlMlrW1ZGOk405dpbL6TuQ+cYziEBljyY(后面还有大量数据,省略)

其中,在?>后面的数据足有27KB(共27316字节)。显然,这些数据并不是直接输出给客户端的,而要在服务端经过一定的处理。这27KB的数据看起来很像base64编码,但是直接用base64_decode解码得不到任何有意义的结果。

仔细观察,在前面的PHP代码部分有一个eval。那就按照上一篇文章的办法,把它改成echo试试!

base64加密PHP脚本的解码方法

PHP是网站服务端最流行的编程语言之一。PHP运行环境本身是开源的,服务器不加载插件时PHP脚本也无法加密。但是,总有人因为商业上的考虑,而将PHP程序通过各种方法进行混淆,使读者很难看到清晰易懂的代码。

然而,PHP运行环境的本质决定了,被混淆、编码的PHP脚本总是有办法恢复成可读的代码的。本文介绍了一种对含有LAVEbase64_decode的、被加密的PHP的解码方法。

在使用这种方法之前,你应该准备好:

  • 能运行PHP的Web服务器,例如 Apache 或 IIS
  • wget.exe命令行客户端 或 浏览器
  • 具备PHP语法高亮功能的文本编辑器,例如 Notepad2

下载每一步的源代码

Web应用的评测清单

有人说,只需24小时你就可以完成一个网站,并且开始做生意。建立Web站点已经变得像搭积木一样简单:在WordPress、Discuz、UCenter Home、ShopEx等常用建站程序选择一个(或者多个),能让你在3分钟之内创建一个可以运行的Web站点;然后,你可以用剩下的23小时57分钟安装插件、修改模板、发布内容,实现更丰富的功能。

不过,这些“积木”并不一定能满足你的目的。很多情况下,你需要自己(或者请人)开发一块新的“积木”——编写网站程序。至少,你也得对某些“积木”进行一定的修改和扩充,来满足你网站的特殊需求。

当你的网站并不完全由常用建站程序组成时,Web站点的质量就是一个必须关注的问题了。

Web站点的质量包括哪些方面?

我认为,制作一个网站,必须关注的质量问题,至少包括下面这些:

我的Web开发学习之路

最近有人问我,如何开始学习Web开发?在此,我想对自己学习Web开发的历程作一个回顾。

网页制作 vs Web开发

实际上,很多人提出的问题并不是“如何开始学习Web开发”,而是:

  • 怎么做网站?
  • 网页制作的方法
  • 建立网页的流程
  • 我会PHP和Dreamweaver,还要学什么?
  • 寻网页制作程序编程高手

现在,我坚持使用Web开发这个词,而不是网页制作网站建设这些说法。我认为,“网站”只是Web开发的一部分;学习了这么多开发技能,仅仅用于制作“网站”或“网页”,就是大大的浪费。

GAppProxy架构及协议分析

GAppProxy是一款基于Google App Engine的HTTP代理服务器,GAppProxy的作者是dugang。

GAppProxy是用Python语言编写的,包含客户端、fetch服务器、负载平衡器三个模块。

精巧型代理服务器hProxyN的20090223版本加入了GAppProxy插件。 GAppProxy插件使hProxyN可以通过GAppProxy协议转发请求。

GAppProxy模块组成

客户端

不写错别字是一种态度

阳光男孩倡议:

在文字交流中(包括文章、作业、帖子、邮件、短信),请使用规范语言,避免错别字、病句

发送含有错别字的文字内容,是不负责任的做法,是对收件人的不尊重。

用yate2实现软VoIP语音通话(SIP协议)

2009年1月7日,工业与信息化部发放了三张3G牌照,标志着中国进入了通信技术的新时代。3G的重要特性之一是高速数据链路,移动上网速度大大提高。同时,中国移动也大幅下调了2G网络GPRS上网的资费。可是,语音通话费用仍然按兵不动。作为永远处于弱势的用户,我们却可以通过VoIP网络电话自己实现免费语音通话。

网络电话是下一代网络(NGN)的重要应用之一。“下一代网络”是指10年以后的网络,全部基于软交换(Softswitch)技术。但是,拨打VoIP免费网络电话,并不需要再等待10年。基于现有的TCP/IP网络,我们已经可以使用开源的VoIP软件,实现PC-to-PC的免费语音通话。(注:这里的“免费”,是指不需要支付传统语音通话费用,ADSL/FTTB/3G等上网接入仍然是需要费用的)

下面,我将介绍如何用yate2软件搭建VoIP服务器,并用SIP协议完成语音通话。在我的实例中,使用了局域网内的3台PC,Windows操作系统,接在同一个集线器上,并不是广域网或3G接入。

yate2建立VoIP服务器

Yate = Yet Another Telephony Engine,是一款开源的VoIP网络电话软件。它可以作为服务器、也可以作为客户端使用。yate2可以在Linux下运行、也可以在Windows下运行。yate2下载地址