2010年05月存档文章

C++右值引用-好东西

解决C++中临时变量的好方法-右值引用,可在visual studio 2010中试试

右值引用和移动语义(rvalue references, move semantics)
该特性比较晦涩,但用途很明确。
* 移动语义 考虑swap函数template <class T> swap(T& a, T& b){ T tmp(a); // now we have two copies of a a = b; // now we have two copies of b b = tmp; [...]

More »

nginx目前所有版本存在的高危漏洞

这个漏洞是国内的安全组织80sec发现的,经过测试老纪博客也存在这个问题,这个漏洞适合现在所有nginx+php服务器,有使用的朋友赶快进行修改
漏洞介绍及补救方式
漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行。80sec发现其中存在一个较为严重的安全问题,默认情况下可能导致服务器错误的将任何类型的文件以PHP的方式进行解析,这将导致严重的安全问题,使得恶意的攻击者可能攻陷支持php的nginx服务器。
漏洞分析:nginx默认以cgi的方式支持php的运行,譬如在配置文件当中可以以

location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

的方式支持对php的解析,location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。
那么假设存在一个http://www.80sec.com/80sec.jpg,我们以如下的方式去访问http://www.80sec.com/80sec.jpg/80sec.php将会得到一个URI /80sec.jpg/80sec.php,
经过location指令,该请求将会交给后端的fastcgi处理,nginx为其设置环境变量SCRIPT_FILENAME,内容为 /scripts/80sec.jpg/80sec.php
而在其他的webserver如lighttpd当中,我们发现其中的SCRIPT_FILENAME被正确的设置为
/scripts/80sec.jpg
所以不存在此问题。
后端的fastcgi在接受到该选项时,会根据fix_pathinfo配置决定是否对SCRIPT_FILENAME进行额外的处理,一般情况下如果不对fix_pathinfo进行设置将影响使用PATH_INFO进行路由选择的应用,所以该选项一般配置开启。Php通过该选项之后将查找其中真正的脚本文件名字,查找的方式也是查看文件是否存在,这个时候将分离出SCRIPT_FILENAME和PATH_INFO分别为/scripts/80sec.jpg和80sec.php
最后,以/scripts/80sec.jpg作为此次请求需要执行的脚本,攻击者就可以实现让nginx以php来解析任何类型的文件了。
POC: 访问一个nginx来支持php的站点,在一个任何资源的文件如robots.txt后面加上/80sec.php,这个时候你可以看到如下的区别:
访问http://www.80sec.com/robots.txt

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:05:30 GMT
Content-Type: text/plain
Content-Length: 18
Last-Modified: Thu, 20 May 2010 06:26:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
Accept-Ranges: bytes

访问访问http://www.80sec.com/robots.txt/80sec.php

HTTP/1.1 [...]

More »

linode中文文档系列-linode新手之我怎么在linode部署我的网站

有好多想用linode vps的朋友问老纪,我对linux不怎么熟悉,我能够在linode做网站吗?老纪的回答就是如果你知道一些基本的linux命令,就可以参照教程完成网站的部署和维护,其实linode官方已经出了很多文档,老纪前期翻译了不少,看来还是不够,还得继续翻译,以满足初次接触linode vps的朋友的需要,今天就是关于linode新手如何在linode上部署网站
假如对于linux系统管理或者linode你相对来说是个新手,这个只能能够解决我们收到的最常见问题,假如你刚刚创建了第一个linode账号,请先阅读 入门手册,一旦你的linode部署完后再回到这里
下面的这些指令都能运行于linode平台,如果你还没有linode,就请注册一个linode vps吧
我怎么登陆我的linode
缺省的,所有已经部署的linode都开启了ssh,这就可以通过shell用命令行来访问,你可以在入门手册里学到更多关于连接到linode的知识
有事,未完待续…

More »

Linode VPS社区文档中文系列-在debian 5中安装CouchDB

还长时间没有看linode的在线文档了,今天一看又多了N篇,老纪重新开始翻译其文档,对大家使用linode会有所帮助
CouchDB是一个基于文档的非关系型数据库系统,CouchDB试图提供一种更为灵活的数据库存储系统用于定制应用的开发,CouchDB用erlang写成,erlang支持一种创新的并行模型,CouchDB不用sql接口,而选用http接口和json作为数据格式,这样易于应用的开发
在安装CouchDB之前,我假设你已经阅读了入门手册
这些命令能用在linode平台,如果你还没有linode,请注册一个linode vps
安装CouchDB
在安装CouchDB之前,请先确认你的安装包库和已经安装的程序更新到最新版本,使用下面的命令

apt-get update
apt-get upgrade –show-upgraded

安装CouchDB及其依赖库

apt-get install couchdb

CouchDB
一完全安装后就会启动,你可以用位于/etc/init.d/couchdb这个init脚本对其控制,执行下面的命令就可以启动、重启、停止CouchDB

/etc/init.d/couchdb start
/etc/init.d/couchdb restart
/etc/init.d/couchdb stop

恭喜你、在大多数时候你不需要更改CouchDb的配置文件,但是,假如你需要更改任何设置,你可以设置/etc/couchdb/couch.ini中的任何选项
使用CouchDB
你和CouchDB的绝大部分交互都是通过系统的http和json接口完成的,CouchDB有一个基于web的管理界面叫做Futon,因为缺省的CouchDB仅能通过本地接口进行访问,为了访问CouchDB和Futon,你要建立一个安全的ssh隧道以避免发送明文数据。
一旦ssh隧道建立,你就可以通过请求http://localhost:5984对CouchDB进行访问,一个简单的命令行客户端curl 可以通过下面的指令来安装

apt-get install curl

现在执行下面命令

curl http://localhost:5984

CouchDB将返回

{"couchdb":"Welcome","version":"0.8.0-incubating"}

在ssh隧道激活状态下,你可以通过http://localhost:5984/_utils/访问Futon,假如你喜欢直接和CouchDB交互,CouchDB还提供了一个javascript接口,通过couchjs访问解释器

couchjs duck-team-check.js

More »

腾讯微博邀请码

twitter火了,国内的相关应用也起来了,特别是这些大牌的公司,新浪、腾讯、网易,功能及易用上肯定是本着具有中国特色的微博,孰优孰劣还见不了分晓,腾讯微博借着qq 2010 beta3的直接嵌入,在用户层面上肯定是没什么问题,老纪曾经被邀请,现在也有几个邀请码,用的朋友可以来拿

腾讯微博邀请码

http://t.qq.com/invite/71715cf39dc4ae500bd7
http://t.qq.com/invite/3122ee38aa787c094167

More »

开启分布式架构专题

前几天受了一次打击,老纪学的东西多,但是杂而乱,给人的感觉就是个老朽了,呵呵,虽说紧跟着技术的潮流,但大多停留在理论基础上,本身因为工作的原因没有太多的时间放在老纪感兴趣的领域,所以也只能自己构建一个平台自己实践一下,达到理论少许能结合实际。
分布式架构,这在目前整个网路领域是比较热门的话题,怎样能够承载大量用户的并发访问,怎样能够容易的进行系统扩充,这都是很多大网络公司亟待解决的问题。现在开源界已经有方案能够实现web服务层、应用层、数据库层的横向扩充、解决了数据库的单点问题,以后老纪也就慢慢对此进行关注。
技术只是技术、还有很多别的东西要做,如果最终能够开心的回归技术那么这是很多程序员所希望和向往的!

More »

蔡文胜:中国站长之王是如何炼成的

从别人的成功经验中汲取营养,老纪博客会不时的介绍一些成功故事给大家
  一个高中没毕业的草根创业者,从域名入手,做着被很多人看作是“投机”的生意,却在不经意间成为中国域名投资领域最成功的人,很多知名公司都从他手中买得好域名;他从个人网站做起,却吸引了IDG资本和Google的投资,最终将网站卖给了Google;他先后投资了上百家个人网站,在站长中有广泛的影响力,被媒体称为站长之王
  越来越多的创业者已经认识到了天使投资的重要性:一个好的天使投资人,所带来的不仅仅是资金,相关资源的支持更可以帮助创业企业快速起飞。但国内的现实是,天使投资人并不多,为普通创业者所熟知的几位似乎也都“高高在上”,很难真正接触到。从本期开始,本刊将邀请清华大学经管学院副院长廖理教授,对话国内的天使投资人,走近这些略显神秘的“天使”,帮助创业者了解他们的投资理念与故事。
  一个高中没毕业的草根创业者,从域名入手,做着被很多人看作是“投机”的生意,却在不经意间成为中国域名投资领域最成功的人,很多知名公司都从他手中买得好域名;他从个人网站做起,却吸引了IDG资本和Google的投资,最终将网站卖给了Google;他先后投资了上百家个人网站,在站长中有广泛的影响力,被媒体称为站长之王。蔡文胜的创业道路看起来颇具传奇色彩,如今他的身份是厦门游家网络有限公司的董事长,与另外一位个人站长出身的创业者李兴平(hao123创始人)一起运营着休闲游戏平台4399.《创业邦》杂志特别邀请廖理教授对话蔡文胜,就域名投资、个人站长、互联网创业与投资等话题,进行深度探讨。

More »