Category Archives: 瞎折腾

nginx php 错误配置导致安全漏洞

后知后觉发现了此文 Setting up PHP-FastCGI and nginx? Don’t trust the tutorials: check your configuration! 基本上是说,网上的大部分 nginx + php 配置教程中有一个错误,导致 php 会试图执行非 php 文件,甚至是用户上传的图片。

事实上看到此漏洞的描述我已经立刻想到问题之所在了,的确,之前我写的那篇配置笔记也是有此问题的。基本原理就是 nginx 配置中有这么一段

location ~ .*.php5?$ {
        include fastcgi_params;
        root /var/host/phpMyAdmin;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/var/run/php_fcgi.sock;
        fastcgi_index index.php;
    }

凡是以 .php 或者 .php5 结尾的 uri 都会被交给 php 处理,于是类似于 user.jpg/aaa.php 也会交给 php 处理,于是 user.jpg 就被当成 php 代码给执行了。

解决此问题的方法有好几种,codex.wordpress.com 上面提供的一种方式是如下修改 nginx 中有关 php 的配置。不过如果 nginx 和 php 不运行在同一台机器上时,此方法无效。

location ~ \.php$ {
	# Zero-day exploit defense.
	# http://forum.nginx.org/read.php?2,88845,page=3
	# Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
	# Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine.  And then cross your fingers that you won't get hacked.
	try_files $uri =404;

	fastcgi_split_path_info ^(.+\.php)(/.+)$;
	include fastcgi_params;
	fastcgi_index index.php;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#	fastcgi_intercept_errors on;
	fastcgi_pass php;
}

Envy 14 上手记

上个礼拜订的 HP 学生机 Envy 14 今天终于拿到了,具体型号是 14-1016tx。拿到新机器欣喜之余我觉得还是可以写个上手小记的。

首先包装很漂亮,好像今年惠普的大部分机型都是黑色的大纸盒包装,要比往常牛皮纸纸箱看起来感觉好许多。至于 Envy 就又有点不同,因为它的内置音响是 Beats 的,所以大黑盒子开出来,里面又是个黑盒子,上面还套着个印着 Beats 纸环。黑底上飘着一点红,这个我觉得相当之骚…… 由于今天我是第一个买了 Envy 去提货的,那些工作人员好像都没开过 Envy 的盒,所以开盒验货的时候,不由得赞叹起来,看来 Envy 也不是瞎起的名字…… 以至于我的感觉似乎有些太好了。

第一次开机要选语言,选完之后会自动装一堆东西才能进系统。原本在网上看评测的时候,看到说 HP 在这台机上预装的软件不是太多的。可是我点开开始菜单的时候我发现他们错了,还是一堆我一辈子都用不到的东西。当然也有我原本就想下载安装的,比如 Fences,竟然装了个 HP OEM 版进来,这个值得表扬一下。

把不要的软件卸载完,第一次重启的时候,发现进入了一个叫做 QuickWeb 的东西。可以上网,聊天,听音乐。研究了一下,基本鉴定是一个 HP 定制的 Linux。浏览器是 Firefox 改的,聊天工具是 Pidgin 改的,音乐播放器不明。这个东西还算有点用,至少比进 Windows 要快一点,如果只是想开机看一下邮件或者偷个菜的话,也的确更加方便,而且应当更加省电。

进 Windows 装系统更新,一段时间下来觉得发热还是挺厉害的,我都没有开任何需求高的游戏,仅仅是 CPU 发热就能感觉出来。右手边掌托上是有些热的,右上可能是显卡位置,也比较热。这么估计不会比我旧的 Macbook Pro 好到哪里去,唯一的进步就是,这次是右手边热,左手边不热,和 Macbook Pro 正好相反。这样其实已经好了很多,因为玩很多游戏都时候都是左手放 asdf 位,右手那鼠标,如果左手边热的话很容易出手汗……

[未完待续]

人人克隆关系网?

今天 Ice 在人人网偶然发现了一个夏润喆的小号,此号有不少好友,都是小号。这些小号又有不少其他好友,也大都是小号。这些号的共同点为:真名,真头像(如果有的话),互相加了好友,不活跃,无日志,少状态。注册日期无法判定,但是 ID 都是7字开头,应该在最近一年内注册。于是我们觉得这可能是一个阴谋,有人在暗地里经营着一张克隆关系网……

我们无从得知克隆关系网的目的,然而其带来的安全隐患是巨大的,倘若此关系网规模再增大,每个人的信息再补充完整一些,就能达到以假乱真的效果,从而引发人人网信任危机,甚至其他更严重的问题。

这里整理了少量克隆帐号,欢迎补充,如果有加错的也请提醒修正。

好久沒看到這麼有趣的東西了

很久沒有更新 Blog 的原因之一是,一直都覺得挺無聊的(當然主要原因還是我懶)。

今日在 Google Reader 上見到 Jackie Chen 同學分享的“西廂計劃”原理小解一文, 客戶端張生和服務器端崔鶯鶯的故事本就非常有趣,可是接著讀下去看到西廂計劃的實際內容時,我才真的意識到:好久沒看到這麼有趣的東西了啊~

西廂計劃和常見的穿牆方式不同,既不走彎路、遠路,也不須加密數據,而是利用 GFW 自身缺陷和 TCP/IP 協議的某些特性來實現了直連免過濾。西廂計劃告訴我們,學好 IEG3310 是一件很有意義的事情,看似無聊的三次握手也可能握得很精彩。

忘記曾經一次又一次看到 Connection Reset 頁面時的沮喪心情,向西廂計劃的貢獻者們致敬! Continue reading

协同翻译工具之阴谋论

听说 Google 又有新服务推出,是一个翻译工具,叫做 Google Translator Toolkit。推出的似乎比较低调,看域名也不像是一个独立的新产品,可以算作 Google Translate 的一部分。

我小试了一下,没有太多令人意外的地方:典型的 Google UI 设计——简洁,类似早些时候 Google Docs 的界面;拥有 CAT 软件基本的功能,多语言,自动翻译,词汇表导入……支持的格式也都是常见的那几种。基本的操作,似乎也没有太多可以研究——上传,选择语言,自动翻译,逐词句手工翻译,完成。

然而,这肯定不是全部,菜单上还有一个按钮——Share,这是一个协同翻译工具,你可以把需要翻译的文章和其他人共享,一同翻译,效率自然大大提高。除了共同翻译外,词汇表也可以共享,这又提高了翻译效率。然后,还有,那个叫做 Translation Memory 的东西,Google 给出的解释是 A translation memory (TM) is a database of human translations 这样,人工翻译的结果是可以存入数据库的。再注意到灰色字的提示 If no TM is specified, translated segments are stored in out shared, global TM. 原来,我们协同翻译的工作远比我们所想得更有意义,它们被存入了公共的数据库,凭借着 Google 在数据处理上的超级牛力,这些数据必定大大提高之后的翻译效率。于是,终于有人跳出来说,这,是一个阴谋!看到此文有人评论:翻译的成果竟然给 Google 使用下三滥手段偷了去,然后用来制造翻译产品并从中直接或间接牟利,作为一个专业的翻译,我,感到相当震惊!

这么想来,这个工具虽然能够提高翻译效率同质量,Google 却做得有点不厚道,默认设置不应该是共享 Translation Memory 的,毕竟翻译也是人家辛苦劳动的成果,不经意间被利用,难免让人感到不快。

Anyway,作为一个不会翻译的非专业人士,我,愿意围观更多翻译作品的诞生……

它真的不是一个搜索引擎

Wolfram 推出了一个叫做 WolframAlpha 的东西,之前网上有人把它称之为 Google 的挑战者,一时间得到了众多关注。然而它真的不是一个搜索引擎,它根本不是和 Google 竞争,它做和 Google 完全不同的事情。如果说它和 Google 有什么相似,那么最明显的只是——一个文本框——你输入词句,它给你信息。我没有说那个是搜索框,对,Google 的是搜索框,然而 WolframAlpha 的不是,它的输入框右边是个“=”,这是一个计算知识引擎(Computational Knowledge Engine),你在这里得到的信息,是算出来的。

前天一看到 Wolfram 这个词,就觉得似曾相识,而那个 Logo 更是相当面善,略加搜索才恍然大悟,Mathematica!如果你不知道 Wolfram,你也应该听说 Mathematica,如果你不知道 Mathematica,那么,你总该听说过 MATLAB…… Mathematica 是一个广泛使用的计算机代数系统,拥有强大的数值计算和符号运算能力。 我用过它,在我还是大一的时候,我懒得动手去算微积分作业,Mathematica 告诉了我答案,于是考试的时候我什么都不会,那门课我得了 B-……尽管如此,我还是很喜欢这个软件,虽然其实我不知道怎么用它。

一个数学计算软件摆在眼前,我就觉得有些头脑发热了——虽然我是学工科的,我并没有上很多数学课,而基础的数学我也可能学的不够好。对我来说,那都是些高深的东西,科学?计算?其实那些离我们并非太远,WolframAlpha 这次把一切搬到了网上,透过浏览器,在那个文本框中输入关键字,它用海量的数据和强劲的计算来告诉你想知道的信息。

integrate x^2 dx from 0 to 1

我花了大概半个小时来玩 WolframAlpha,还没有算正式上线,它显得非常不稳定。不过几次尝试的结果还是让人感到欣喜。输入 integrate x^2 dx from 0 to 1,它会告诉你 x^2dx 从 0 到 1 的定积分是 1/3,还附带一个图,标注了阴影部分来解释;输入 force m=1kg a=1m/s^2,它会告诉你,让质量为1千克的物体产生1米每平方秒的加速度,需要的力是1牛顿;输入 The Chinese University of Kong Kong,它会告诉你香港中文大学成立于1963年,大约有1万8千学生,本地生学费6千美元一年,国际生学费1万2千美元一年;输入 mortgage 5% 3 years $100k,它会告诉你,5分利息的按揭贷款10万美元,3年还清的话,每月要还2997美元,最后交了7895美元的利息……输入 D# 会得到什么?哦,五线谱和键盘图,还有 369.994Hz……

由于服务器不稳定,我不能试验太多东西,很多基于 JavaScript 的功能也不能正常工作。我尝试了 Firefox, IE 和 Safari,似乎都是这样,说明并非浏览器兼容性问题。就目前来看,我觉得 WolframAlpha 很好玩,但我不知道将来会是怎样,会不会很有用。它不会改变我依赖 Google 的习惯,如果非要说产生什么影响,我想被影响更多的应该是 Wikipedia,以后有些关于数字和图表的问题,问过 Google 和 Wikipedia 之后,我也许会试试 WolframAlpha。

nginx 的 wordpress rewrite 规则

我目前在用的 nginx 设置就是这个,已经包含了 WP Super Cache 的 rewrite rule,大部分内容是我搜来的,很不幸暂时找不到来自哪里了…… 其实网上类似的内容太多了~

server {
  listen 80;
  server_name www.example.net;

  location / {
    index index.php;
    root /var/host/wordpress;
    gzip_static on;

    if (-f $request_filename) {
      break;
    }

    set $supercache_file '';
    set $supercache_uri $request_uri;

    if ($request_method = POST) {
      set $supercache_uri '';
    }

    if ($query_string) {
      set $supercache_uri '';
    }

    if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
      set $supercache_uri '';
    }

    if ($supercache_uri ~ ^(.+)$) {
      set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
    }

    if (-f $document_root$supercache_file) {
      rewrite ^(.*)$ $supercache_file break;
    }

    if (!-e $request_filename) {
      rewrite . /index.php last;
    }
  }

  location ~ .*.php5?$ {
    include fastcgi_params;
    root /var/host/wordpress;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php_fcgi.sock;
    fastcgi_index index.php;
  }
}

[配置笔记]CentOS + nginx + PHP

之前的这篇文章似乎是挖了个坑一直没填,然而每每出现这种情况的时候,都会发现还偏偏总有人通过 Google 搜索过来……一定让不少人失望了,真是过意不去~于是这次重新写一篇,但愿能把坑填上……

和上次略有不同,这次 Linux 发行版是用的 CentOS,因为最近一段时间来其实我接触最多的还是 RHEL,所以就不写 Ubuntu 了。MySQL 也不在本文叙述范围之内,我实际应用的时候是直接 yum install mysql-server 装的,没有什么好说的。

nginx 用了 0.7.x 开发版。php 当然是通过 fastcgi 运行,不过没有用从 lighttpd 里分离出来的 spawn-fcgi,而是用了 php-fpm 这个补丁。
Continue reading

校内出错的那几分钟

貌似最近通过搜索 校内 502 Bad Gateway 来到此页面的同学越来越多了。简单明了的告诉你,这是校内的服务器不行了,不是用户的问题,也许等等就好了,如果等等也不好……那……校内,你倒底行不行啊? — Updated on 2 Jun, 2009

晚上开着校内的时候,突然弹了个框出来,说是 502 Bad Gateway,然后按刷新就看不到校内了,看到了……我熟悉的 nginx 502 错误页面~ 当时就想,校内又出错了啊,还是 nginx,可以研究一下哈。

立刻问了一下小野猪,他说校内是可以上的,就是有点慢。而我却是立刻返回 502 页面,服务器 nginx 0.6.32,校内正常的服务器应该是 resin 才对。两个人访问结果不同的情况,除了我 RP 差之外,还是有其他原因的,我猜就是我这两天碰巧在搞得 DNS Round Robin

$ nslookup xiaonei.com
Server:        208.67.222.222
Address:    208.67.222.222#53

Non-authoritative answer:
Name:    xiaonei.com
Address: 211.157.20.6
Name:    xiaonei.com
Address: 211.157.20.3
Name:    xiaonei.com
Address: 211.157.20.2

和 google.com 一样,xiaonei.com 解析的时候也会有三个 IP,DNS Server 会在每次回复的时候改变顺序,不过究竟用哪个 IP 还是客户端说了算,有时候 DNS Cache 久了,你可能长时间使用一个 IP 访问。不过这个在减低服务器负载上还是有效果的,因为人多了之后,还是大致上 IP 均分的。

DNS Round Robin 的实现是很容易,然后也有很大的弊端:由于 DNS propagation delay 通常要很久,几十分钟到几个小时甚至几天都有可能,所以如果一个服务器要临时下线的话,客户端是不知道这一情况的,还是会继续访问那个 IP,并不会被自动分流到好得 IP 上去。当然还是可以在 router/firewall 上把下线的 IP 分给某一台在线的服务器,不过要做到完全平滑过渡似乎是不大可能了(你至少得把所有 TCP 连接给断开才能改吧?)

回到校内这个问题上来…… 我试着反复清空 DNS cache,情况是,有一个 IP 返回 502,两个 IP 是好的,之后似乎情况又有变化,甚至有一段时间有两个 IP 是 502…… 于是猜测校内在重启 back-end server,但由于 DNS round robin 并不能解决平滑过渡的问题,即使是三只服务器依次重启,我还是遇到了出错的页面。

至于 nginx 的出现,我并不觉得惊讶,因为 nginx 的优秀性能总能让用它的人从中受益,校内可能省了点硬件的钱,我们则得到更好的用户体验~ 对于校内背后的服务器结构,我依旧迷惑。最外层是 squid,直接打 IP 就能看出来,而且即使 nginx 报 502 的时候,同一个 IP 还是能看到 squid,所以 squid 是最外层。然后是 nginx,可是再里面呢?resin?如果用 nginx 做 reverse proxy 的话,他的 server tag 是不会变的,永远都会自称 nginx,这个和 Apache 不同, Apache mod_proxy 做 reverse proxy 的话,server tag 是显示的 back-end server 的 server tag。于是迷惑了,更加奇怪的是,既然用到了 nginx,为什么校内的静态图片却是在 Apache 上呢…… 也许要等下次,下下次,不知道多少次校内出错的时候才能猜出来了~~