基于RBAC的权限设计模型

1  RBAC 介绍

RBAC 模型作为目前最为广泛接受的权限模型

NIST (The National Institute of Standards and Technology,美国国家标准技术研究院)标准RBAC模型由4个部件模型组成,这4个部件模型分别是基本模型RBAC0(Core RBAC)、角色分级模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC)[1]。RBAC0模型如图1所示。

clip_image001.jpg 
图表 1 RBAC 0 模型

l          RBAC0 定义了能构成一个RBAC控制系统的最小的元素集合

在RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权permissions(PRMS)五个基本数据元素权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的权限会话sessions是用户与激活的角色集合之间的映射。RBAC0与传统访问控制的差别在于增加一间接性带来了灵活性,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展

l          RBAC1 引入角色间的继承关系

角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的继承。而受限继承关系则进一步要求角色继承关系是一个树结构。

l          RBAC2 模型中添加了责任分离关系

RBAC2 的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型用户的访问许可。

l          RBAC3 包含了RBAC1和RBAC2

既提供了角色间的继承关系,又提供了责任分离关系

建立角色定义表。定出当前系统中角色。

因为有继承的问题,所以角色体现出的是一个树形结构。

test.bmp

2        权限设计:

 

配置资源以及资源的操作 : 这里资源可以定义为一个通用的资源模型。提供通用的资源统一接口。

 

 

 

 

 

数据库 ER 图:

clip_image002.gif

 

关系图:

 

clip_image003.gif

 

未命名.bmp

 

3        分析:

 

    根据以上的关系图和ER图可以看出。整个权限可以抽象为五个对象组成。

OrgBean : 用于描述org模型

Role : 用于描述角色。

Permission : 用于描述权限

Resource : 用于描述资源

Operation : 用于描述操作。

 

其中Permission中有Resource , Operation 的聚合,资源和操作组成权限

Role 和 Permission 都有自包含。因为设计到权限的继承。

资源Resource 也可能出现一颗树形结构,那资源也要有自包含。

 

思想 :

权限系统的核心由以下三部分构成: 1. 创造权限, 2. 分配权限, 3. 使用权限,然后,系统各部分的主要参与者对照如下: 1. 创造权限 - Creator 创造, 2. 分配权限 - Administrator 分配, 3. 使用权限 - User :

1. Creator 创造 Privilege , Creator 在设计和实现系统时会划分,一个子系统或称为模块应该有哪些权限。这里完成的是 Privilege 与 Resource 的对象声明,并没有真正将 Privilege 与具体 Resource 实例联系在一起,形成 Operator 。

2. Administrator 指定 Privilege 与 Resource Instance 的关联 。在这一步, 权限真正与资源实例联系到了一起, 产生了 Operator ( Privilege Instance )。 Administrator 利用 Operator 这个基本元素,来创造他理想中的权限模型。如,创建角色,创建用户组,给用户组分配用户,将用户组与角色关联等等 ... 这些操作都是由 Administrator 来完成的。

3. User 使用 Administrator 分配给的权限使用各个子系统。 Administrator 是用户,在他的心目中有一个比较适合他管理和维护的权限模型。于是,程序员只要回答一个问题,就是什么权限可以访问什么资源,也就是前面说的 Operator 。程序员提供 Operator 就意味着给系统穿上了盔甲。 Administrator 就可以按照他的意愿来建立他所希望权限框架 可以自行增加,删除,管理 Resource 和 Privilege 之间关系。可以自行设定用户 User 和角色 Role 的对应关系。 ( 如果将 Creator 看作是 Basic 的发明者, Administrator 就是 Basic 的使用者,他可以做一些脚本式的编程 ) Operator 是这个系统中最关键的部分,它是一个纽带,一个系在 Programmer , Administrator , User 之间的纽带。

 

4        权限API

   getPermissionByOrgGuid(String orgGuid )

      通过传入一个org的Guid , 拿到当前这个org对象都具有那些访问权限

 getSourcePermissionByOrgGuid(String orgGuid , String resouceGuid)

    通过传入一个org的Guid 和 一个资源的Guid , 返回改Org对当前这个资源的访问权限

 

getPermissionByResourceGuid(String resource)

    通过传入一个资源的Guid , 得到当前资源下都有那些权限定义。

 

havingHeritPermission(String orgGuid , String resouceGuid) : Boolean

    传入一个orgGuid, 资源GUID ,查看改OrgGuid下对资源是否有向下继承的权限。这里继承是资源的继承。即对父栏目权限,可以继承下去对父栏目下的子栏目同样有权限

 

havingPermission(String orgGuid , String resourceGuid) : Boolean

    判断某Org对某一资源是否用权限

 

以上是粗粒度的权限API 。 以下为细粒度的权限

 

getOperationByPermission(String permissionGuid)

    通过permission 的Guid 得到该permission 的所有有效操作。

 

getOperationByGuid(String permissionGuid , String resourceGuid)

    通过permision的Guid , 资源的Guid 得到该资源下所有的有效操作。

 

screeningOpreationByGuid (String permissionGuid , String resourceGuid , String orgGuid)

    通过permission , resource , org的Guid 得到改Org对这一资源的有效操作。

 

hasOperation(String operationGuid) : boolean

    通过传入的operationGuid 返回是否具有操作权限

 

5        权限的实现:

1 .表单式认证,这是常用的,但用户到达一个不被授权访问的资源时, Web 容器就发

出一个 html 页面,要求输入用户名" title="用户名" >用户名和密码

2 .用 Filter 防止用户访问一些未被授权的资源, Filter 会截取所有 Request/Response ,

然后放置一个验证通过的标识在用户的 Session 中,然后 Filter 每次依靠这个标识来决定是否放行 Response 。

这个模式分为:

Gatekeeper :采取 Filter 或统一 Servlet 的方式

Authenticator : 在 Web 中使用 JAAS 自己来实现。

 

Filter 拦截只是拦截该用户是否有访问这个页面,或这一资源权限。真正做到显示后拦截是在应用程序内部去做。

 

做显示拦截提供API , 标签这两种方式

标签: IT, 权限, 用户

PHP开发WAP游戏的一些注意事项

:WAP游戏是没有客服端的,仅仅是通过网页页面上的链接,输入框,等等进行游戏,实际上,所有的逻辑运行都是在服务器端。举个简单的例子说:比如在地图上移动这一动作,首先地图的所有数据都是保存在服务器上的,无论是数组还是DB,而要表示当前玩家所在的位置在哪,也仅仅是把地名,本地的描述信息图片,及NPC等有关信息生成一个页面发送给客户端,就这么简单。而玩家要从本地移动到其它地点,也仅仅需要点击一个用POST或GET传递地点ID的链接便可完成,在程序方面,当前程序能够接收到一个合法的地点ID时,便将本ID更新到玩家的记录中去,并生成对应本地的信息生成页面输出即可。


从三方面介绍一些做WAP游戏所需要注意的:安全效率,延展。


安全


用户输入:这是最基本的,也是最可能被忽视的一点。‘1+(-10000)’,这是什么?这就是‘黑客’最常用的一种方法,它出现在当你的程序需要用户输入一个数字时,比如,玩家可以把自己钱送给其他玩家,逻辑很简单,看看自己有没有这么钱(if($my_money>$give_money)()),有的话,给自己扣钱,并给其他玩家加钱。完成。但你试试下面这段程序:

[php]<?php
$a="1+(-111111)";
$b=2;
if($b>$a)
{echo "xx";}
?>[/php]

结果如何?你很吃惊嘛?就这样,你的程序有BUG了,还没完,你再试下下面这条SQL:

"update user_money set money=money-".$a." WHERE user_id=155"

结果又如何,你给两个人都加了钱,谁都不亏,你的游戏和你亏了。这样下去,你的游戏货币越来越不值钱,游戏也变得不受欢迎。
怎么解决?过滤!用适当的方法过滤,让他的输入,是一个真实安全数字,是你真正你需要的。
似的问题还有,用户在发言时输入了一个<,结果是你在输入这条发言时,就会有相当一部分显示不了这个页面,你的游戏也受到了怀疑。
数字:过滤数字,你首先想到的是什么方法函数?intval?嗯,对于“1+(-10000)”这样的输入,这个没有问题函数返回值" title="返回值" >返回值是1,这个数字安全的。注意!这个数字安全的并不代表就都安全了,你再试试下面这个

[php]<?php
echo intval(2200000000);
?>[/php]

看到了嘛,又吓一跳吧,这都是血的教训啊。因为2200000000这个数已经超过了INT的取值范围(强行转化)。相似的问题还有,在MYSQL5中(目前我不知道能不能设置),如果把字段设成UNSIGNED,那么0-1=42XXXXXXXX。
这里提供两种解决办法:
1,用abs换掉intval,经初步测试,abs这个函数是可信的,它不会对数字造成什么不良影响。
2,使用高精度函数及相关,如:
bcadd()bccomp()ctype_digi()/*注意,这些函数参数一定得是字符串" title="字符串" >字符串型!*/

微观操作:同样用送钱的这个例子,你过滤了用户输入,用bccomp比较了用户要送的和他所有的,成功,可以送钱了。别忙,还有一个你可能不太相信但又确实存在的问题。有一句古话:我们不可能两次跨过同一条河。它说的是时间是变化的,所以事物也是变化的。你有没有想如,如果在你验证过了他是不是有这么钱可送到你用UPDATE句" title="句" >句为他改钱的这一瞬间,另一个人把他的钱取走了?不可能吧?可能,非常可能。一切都可能发生。所以在PHP程序验证之后,还会在UPDATE句" title="句" >句之中,再做一次验证,即在WHERE句" title="句" >句中加一句 AND MONEY>$a,这样的一个条件,基本不会对SQL执行效率产生什么影响,还能保证安全性,加上是很有意义的而句" title="句" >句是否执行成功,才是能否给对方加钱的真正条件。相关的还有一点要说明,在做这样操作时,一定要把对玩家有损失的操作放在前面执行,似给他加钱这样的能让他HAPPY的操作放在后面,因为在没有引入事务数据库" title="数据库" >数据库处理机制之前,程序中止也是可能且可怕的。对于可能出现人抢同一资源问题,也应该有很好的先后判断,这点不细说了,但同样重要。

日志:这个东西很重要,要知道,如果程序出了问题,找到是哪里出的问题问题影响了少人的数据,如何恢复,就全靠它了。日志一般分两种,一种是游戏中需要用户的,比如救济品每人只能领一次,就是通过它来控制(其实是不应该算是程序日志范畴,只提一下)。另一种就是真正的日志,比如谁在什么时候给了谁少钱他输入的是什么数字,操作前送出方有少钱,操作后又有少。如果有了这样的日志记录,我想对钱这重要数据流向,就很清晰了。在程序没有正常的运行很长时间,经过时间的考验之前,这日志数据是相当必要的。
总得来说,游戏产品和其他型产品相比,对精确性的要求更高,所以程序每一步执行都要求是精确且在出错时是可恢复的。另外记住:用户,是绝不能相信的!!!


效率


这点我觉得不用说什么,作为一个程序开发人员,程序的执行效率是我们的本职工作之一。
个人认为,一个程序的执行效率,很大程度取决于程序的设计(针对某一问题提出想法,并用最合理、高效、低成本的方式解决和实现它,这是我对设计的理解。)所以在进行系统的开发之前,一定要先把遇到或可能遇到的问题分析清楚,想明白解决方案,并准备好备用的或是在出现问题时的应急方案。(这也是我们头对我们的要求:)具体说基本就是对数据结构和程序逻辑的分析,可能的话,写出一份策划案或是重点问题清单,在实际开发时,只要敲键盘就好了。这样做也能很好的提高程序开发效率。而在程序执行效率上,我不说了,前人有很很好的例子,说明我们可以学到,我也就不显丑了(没这个自信)。举一个例子吧,我个人最早是看到DZ论坛数据结构上这么用的:统计一个论坛下面有少个主题,可以在本论坛记录里增加一个用于统计的字段比如stat_threadnum,每次有人发贴删贴时更新这个字段,这样虽然有了一定冗余,但就不用每次都COUNT去了,这是个好办法。


延展


其实这个问题,就已经不完全是一个程序开发人员的工作能力上的问题,而是所谓‘职业操守’的问题了。除了不能相信用户,还有一人是不能相信的:策划。(这并没有褒贬之意)为什么?因为作为一个策划,他的职责就是求变。所以他们总会想出新的东西来,这也就意味着,你的程序产品,要不断进行修改,再修改,这是必然的。所以把程序写‘活’,也是你必须学会的。(我个人认为,面向对象,其实就是为了解决这一问题。)举一个例子,见过一段这样的程序,它的作用是用玩家的几种道具在一定条件下换取另一种道具。程序的实现方式是用SWITCH。结果是,当每次要添加新的兑换方法(比如加入用两个梨换一个苹果),那就要不断添加新CASE句" title="句" >句。使得这一功能足足用了好几百行来实现。虽然可能换一个数组来写,可能(只是可能)效率上不如SWITCH,但延展性就要好得文件也小)。所以能够预测到策划下一步可能会怎么做也算是一个好的开发人员的能力之一。(在下一次改动之时,让自己更轻松一些不也是件好事嘛?)
关于注释文档游戏程序逻辑,相对要更复杂一些,所以,足够且清楚的注释,是当其他同事接手你的工作时,你给它最好的礼物:)当然,如果你能把程序写的清楚些,命名得更准确些,程序本身就是很好的注释。而文档,作为注释扩展,更是必要东西。我把它们也算作在程序的延展性之中了。
后记:写完之后,觉得没写出什么东西,还是太浅薄,回头想起什么再补充吧。
那啥一下:感谢朱SIR的培养,他的思维逻辑真清楚,且从不放弃一点小的细节,这是很有帮助的。感谢NESTA的帮助,且为我们的应用产品提供了坚实的系统后盾。感谢NATHAN不留余力的帮助,我跟他学到了很

 

转自:phpchina

IIS下PHP的CGI,ISAPI,FastCGI比较

来自php
-under-iis-for-cgi-isapi-fastcgi
-compare/">博吧

在Windows IIS 6.0下配置
PHP,通常有CGI、ISAPI和FastCGI三种配置
方式
,这三种模式
都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式
配置
区别
和性能上的差异。

  1、CGI(通用网关接口/Common Gateway Interface)一般是可执行程序
,例如EXE文件
,和WEB服务器
各自占据着不同的进程
,而且一般一个CGI程序
只能处理一个用户
请求
。这样,当用户
请求
数量非常
时,会大量占用系统
资源
,如内存、CPU时间
等,造成效能低下。

  2、ISAPI(Internet Server Application Program Interface)是微软
提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能
,并在此基础上进行
扩展
,如提供了过滤器应用程序
接口。ISAPI应用大
数以DLL动态
库的形式
使用
,可以在被用户
请求
后执行,,在处理完一个用户
请求
不会
马上消失,而是继续驻留在内存中等待处理别的用户
输入。此外,ISAPI的DLL应用程序
和WEB服务器
处于同一个进程
中,效率
要显著高于CGI。

  在Windows Server 2003的IIS6下配置
ISAPI方式
的PHP,配置
方法
是,在IIS的“WEB服务扩展
”中,添加一个新的WEB服务扩展
程序
后缀
为PHP,ISAPI程序
php
5isapi.dl
l,然后再“环境变量
”-“系统
变量
”中增加变量
名PHPRC,数值
php
.ini的路径
,在Internet信息
服务管理器中,选择
网站
或应用程序
的根目录
,打开目录
属性
页(右键选择
属性
”),再选择
“主目录
”。点击“配置
按钮
选择
“映射”Tab页。点击“添加...”,在“可执行文件
”设为: c:\php
\php
5isapi.dl
l,扩展
名" title="扩展
名" >扩展
名设为.php
选择
“确认文件
是否存在”,然后“确定”保存设置
。重启服务器
即可完成PHP的配置

  3、FastCGI是可伸缩架构的CGI开放扩展
,其主要行为是将CGI解释器进程
保持在内存中并因此获得
较高的性能。传统的CGI解释器的反复加载
是CGI性能低下的主要原因
,如果CGI解释器保持在内存中并接受FastCGI进程
管理器调度,则可以提供良好的性能、伸缩性等。

  FastCGI已经集成于IIS7,也支持
IIS6,在IIS6中的安装
方法
可参见微软
的官方文档
,我这里简单翻译一下。

  先点这里下载
一个32位的FastCGI extension
for IIS,然后将其安装
安装
后的文件
应该
放到system32\inetsrv目录
下。

  之后打开system32\inetsrv目录
,执行下面的
句" title="
句" >
句,其中c:\php
为你的PHP目录
,可以修改为其他数值

  cscrip
t fcgiconf
ig.js
-add -section:"PHP" -extension
:php
-path:"c:\php
\php
-cgi.exe
"

  在Internet信息
服务管理器中,选择
网站
或应用程序
的根目录
,打开目录
属性
页(右键选择
属性
”),再选择
“主目录
”。点击“配置
按钮
选择
“映射”Tab页。点击“添加...”,在“可执行文件
”设为: c:\windows\system32\inetsrv\fcgie
xt.dl
l,扩展
名" title="扩展
名" >扩展
名设为.php
选择
“确认文件
是否存在”,然后“确定”保存设置

  修改php
.ini文件
,增加如下
句" title="
句" >
句:

  fastcgi
.impersonate = 1
  cgi.fix_pathinfo = 1
  cgi.force_redirect = 0

  之后打开system32\inetsrv目录
,执行以下
句" title="
句" >
句:

  cscrip
t fcgiconf
ig.js
-set -section:"PHP" -InstanceMaxRequests:10000
  cscrip
t fcgiconf
ig.js
-set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

  最后,配置
c:\php
目录
安全
性,使得IIS_WPG组对于这个目录
有读取和执行的权限

  这时候,基于FastCGI的PHP就成功配置
到IIS6上了。

  不过根据我自己的测试,FastCGI的性能比ISAPI的好像高不了
少,不知道Windows Server 2008下的IIS7是不是
会好一些。这里是微软
提供的基于内置FastCGI的IIS7安装
PHP的方法

PHP定时生成静态html首页

 

本文来自小屋sjolzy.cn【原创】

 

//这边的定时也是需要用户触发 否则 使用设置html">php计划任务的方法来实现的话资源耗费较大

<?php
$nowtime=time();
$pastsec = $nowtime – $_GET["t"];

if($pastsec<60)
{
    exit; //1分钟更新一次,时间可以自己调整
}

ob_tart" title="start" >start(); //打开缓冲区
include(”index.php”);
$content = ob_get_contents(); //得到缓冲区的内容
$content .= “n<script language=javascript src=”f5.php?t=”.$nowtime.”"></script>”; //加上调用更新程序的代码

file_put_contents(”index.html”,$content);

if (!function_exists(”file_put_contents”))
{
    function file_put_contents($fn,$fs)
    {
        $fp=fopen($fn,”w+”);
        fputs($fp,$fs);
        fclose($fp);      
    }
}

以前。我是一个百毒用户

 。我最早用百毒,那时候GOO还未进入国门。其实我不算GOO的粉,我用GOO,只是偶尔别的地方search不到的GOO能帮到我,作为我的补充。

 

。但是在13日GOO扬言退出,我决定尽量做到不使用百毒,所以我会开始尝试使用有道,以前有GOO在,反倒不太介意,因为有制衡,有选择。现在,我很介意。我不想我今后的生活,除了百毒,无所选择。所以GOO撤出中国,也导致我撤出百毒。今后,我会尽量用有道,BING,结合翻墙, 上米国的GOO……我想给他们机会,让他们发展。这只是我个人喜欢这么做而已。我是一个任性的人。

。我不是一个信息搜集爱好者,通常我搜索信息也都是为了解决碰到的问题。百毒因为是我最早用,所以用着也就习惯了,所以可以这样说,以前,我是个百毒用户。

。 12日百毒被黑,13日GOO说不。我没兴趣去了解其中的奥秘和真与假,只是心中一直在呐喊:GOO别走,中国很多人需要你

。在中国 搜索网站不仅仅要接受过滤和审查,还要按照指令来排名搜索内容,把人民引向某些网站上去。GOO如果要留在中国,就必须也接受这样的管理。这在一个跨国公司来说,是自毁形象的。所以两害相遇取其轻。它干脆就玩了。从商业角度来讲,它是对的。从魄力来讲,它是令人敬佩的。

。有的人拿市场份额来说事,对于这件事我这么看,有的人身为百万富翁不肯放弃一块钱。市场份额占得再小,也是唯一能在中国和百毒制衡的网站,也不是没钱了开不起公司了。所以,这不是个说能放弃就能放弃的地位,是需要一种勇气。别以为很容易,你做不到。

。他们说,不要神话GOO,他不是神。我说,恰恰相反,我开始喜欢他了,是因为他更像个人。

。每个网站就像一个人,GOO的做人原则和我很像,百毒和我很不像。但是很多人不相信人是可以为尊严放弃一些东西的,那是因为他们自己就不是那样的人。我是,所以我相信GOO相信的东西:don't be devil. 我做到了,所以我相信这个世界上有人能做到。那些不相信别人能做到的人,往往是自己也做不到,或者没信心做到的人。我觉得这是一个底限,没有底限的人是可怕的。

 。很多人出来批评GOO,你太任性了,太欠考虑了,太不知道顺从了。笑,别忘记了,如果不任性,不是异想天开,不是坚持梦想做自己,当年就不会有GOO了,GOO之所以是GOO,他之所以这么大的成就,就是因为他和你想得不一样。

。百毒技术好,但他在良心方面,是个没有什么底限的。一个没有底限的公司,它一家独大了之后,权利无限膨胀之后,会做出什么。没有人会知道。

。GOO的撤出,意味着翻墙技术的质的飞跃和大范围的普及。我很庆幸自己以前为了别的目的学了一身翻墙好功夫。

。今天,我很想试试没有百毒是不是就不能活了,所以今天一天都用的有道。体验是,一天都完了。没觉得特别不方便。 

。丧钟为谁而鸣?就为你而鸣。GOO走了,百毒也不用美,因为CCTV的搜索频道上线了,大家组团去参观吧:http://search.cctv.com/

。顺便提醒一句,爱用百毒的人也许是觉得百度是中国的或者因为习惯使然不常使用其他搜索网站,但我要告诉你,百度的最大控股是外国佬,本质上跟GOO一样,不要一旦没有百毒,你就不知道怎么活。

 

Google百度和谷歌的那些事

 {
}很久不在这个blog上写和技术无关的东西了,尤其不想写跟业界有关的东西,觉得太空,太忽悠,对别人没价值。但这次,我想写写这5,6年对google和百度的一些观察心得。这里面,这里面存在大量的个人推论,我并不能担保完全正确,请只当作是一次思想的碰撞。

这篇blog主要由我完成,Tinyfool
提出了大量修改意见,亦有重要贡献。

1 google,不作恶,信息流动

众所周知,google的目标是"整合全球信息"。从另外一个角度看来,这可以看作加快信息流动。信息流动变快是有巨大的经济价值的。加速,始终是人类经济活动的主线,快即是价值。从蒸汽时代到现在,每一次让移动速度加快的方式都造成了人类巨大的变化,只不过,在蒸汽和机械的时代,加快的是人和货物的移动,信息时代加快的是信息的流动。

仔细观察,可以发现,很多事情不再需要实体物质的流动。比如,我们不再需要人去送一封信,而只需传递一封电子邮件。我们也不那么需要去订阅一份报纸送上家门,而只需要浏览门户网站。这是信息时代带来的改变。而Google所做的,是继续加快这种信息流动的速度,让人们需要的东西更快的呈现在眼前。

Google始终坚持Pagerank排名,除了惩罚作弊者,并未干预过任何排名。这是因为,信息的正常流动才会加速,加速信息是Google的价值,也带来巨大的经济价值。Google绝对不允许把广告插入到搜索结果中。否则搜索结果质量会下降->用户不满意->搜索量降低->广告点击降低,最终仍然造成收入下降。(后面我们会讲到百度完全不同的做法)

投放过Adwords的同学会发现,并非价格越高越好,就算单价非常高,如果匹配度很低,广告点击率就会很低。这样Google仍然会降低这种匹配的出现频率。这样就避免了在A在B的搜索结果中投放"我是B"的广告来误导用户。

在这个体系下,有用的东西就是有用的,信息流动会变快,Google会推动这种信息变的更快,没用的东西就是垃圾,会阻碍信息流动,Google就让他变的更慢,直到被放弃。

Don't be evil 这句口号,可以理解为东欧出生的布林对人生的追求,也可以理解为Google商业利益的准则。因为,越是不作恶,越是让信息有序,正常的流动,给Google带来的实际利益也就越大。很多人认为这只是一句作秀的口号,事实上这是商业和个人追求的双重准则。


2 baidu,竞价排名,Google

百度显然看到了搜索的巨大价值,于是挤进了这个市场。我们且不论搜索质量,先看百度的利润来源。

百度同样有右侧广告(类似Adsense)和左侧排名。左侧排名就是所谓的竞价排名,这是百度的"创新"。竞价排名是百度收入的主要来源(注1
)。

前面说过,竞价排名会干扰用户搜索体验,这大家都深有体验,某些热门关键词,百度前几页的结果都是竞价结果。那么为什么Google不敢这样做,而百度这样做就赚翻了呢?

昨天我在twitter上说过一句话:"adsense是促使信息有序流动并盈利,竞价排名是破坏信息流动并盈利。也难怪两个公司的人看问题截然不同。
"

很多人有体验,如果你的搜索结果比较靠前,百度会有销售来找你做竞价排名,如果不做的话,很快你的搜索结果就骤减。这种"巧合"正好说明了阻碍信息流动也是可以盈利的。换言之,帮助别人照看孩子可以赚钱,威胁别人家孩子来收保护费也可以赚钱。

那么,按照前面的说法,阻碍信息流动的应该会被用户抛弃,在百度这边为什么情况相反呢?

搜索引擎的结果好坏实际很难评价,通常来说,"好10%"是完全没有意义的。这在这个市场上反复被证实,仅仅让搜索结果比对方好10%,或差10%,不会对用户体验影响太大。第二梯队中的搜狗,有道,搜索结果未必真的比百度差多少,但无论如何也无法翻身。同样的竞争也发生在了Google,Bing,Yahoo之间。换言之,搜索引擎产品是一种先入为主的产品。

在百度起家的年代,Google遭遇了最严重的屏蔽。大家应该都有体验,在大公司内基本无法正常访问Google。我们且不去讨论这种屏蔽的始作俑者是否是百度(无论百度是否加快了这种行为,最终的结果也必然发生)。那几年,又正好是中国互联网用户增长最快的年代(注2
)。大量的新互联网用户直接成为了百度的用户。

搜索引擎市场上,"获得第一批用户"是至关重要的。

比较百度和Google的产品和收购策略,百度通常收购能带来巨大流量的产品,包括hao123,天空软件站等等。而Google收购的通常是具有独特的技术,可产生独特数据的产品,比如Analytics,blogger。

百度的主要企业运营行为是围绕"获得第一批用户"的。这些方法包括:工具条,hao123,和软件下载站合作等等。Google被屏蔽看作这种行为的反向手法,无论是否百度造就的,至少这个结果导致了百度获得了更多的第一批用户。

在一个基本没有竞争对手的市场上,百度可以"挟流量以令诸侯",这时候,他破坏一部分信息正常流动也不会造成太严重的后果。因为用户毫无比较。

Google的铁杆用户分为两类。一类是早期用户,这部分用户用过Google,也用过百度。有明确的比较和鉴别能力。他们最终选择了Google。另外一类是专业用户,他们真的发现百度找不到他们需要的东西。这时候Google对比百度的优势大大增加,到达了用户满意程度的临界点,于是这部分用户也选择了Google。

在中国互联网上,大部分用户偏重娱乐。这些用户很难分辨Google和百度的区别。甚至他们会觉得百度更好一些,因为百度提供了方便无比的MP3搜索。他们一旦先尝试了百度,那么就会留下,继续成为百度的用户。这就是我们今天看到的样子。


3 谷歌做了什么

2006年,Google决定开设中国办公室,并命名为谷歌。这是Google创始以来,最大胆,也是最小心的尝试。他们从来没有过试图进入一个需要过滤某些内容的国家(如前所述,这是阻碍信息流动,同时也背叛了Google的价值观)。

我们可以从一些细节看到Google的小心翼翼。比如,Google.cn是没有Google Account的。用户不能注册,也就没有密码,因此也就没有泄密之忧。后来有人嘲笑谷歌音乐可以用各种帐号登录,但就是不能用Google Account登录。所有需要登录的Google服务都没有进入中国。包括Gmail,Gtalk,Blogger等等等。

Google从进入中国那一天,就给自己设置好了底限。这种底限,就是李开复所说的"总部压力"。

李开复的谷歌,是谷歌,绝不是Google。是一个像百度的外企。

3个字可以来概括谷歌几年的工作:"倒流量"。倒流量的工作由一系列的合作(迅雷,sina,天涯,265)完成。这和Google的传统做法完全不同,Google几乎不去主动谋求流量,产品质量会解决所有问题。但谷歌必须谋求流量,一个急进,喜欢去大学讲座和写书的职业经理人,不会有创始人那样的耐心慢慢的守着一个市场。这让谷歌越来越像百度。

众所周知,用和对手一样的手段不可能打倒对手。

谷歌推出的最重量级产品,是谷歌音乐。这显然是看到了百度在MP3搜索上获得的好处,意图获得以娱乐为主的用户。当然,鉴于Google全球的品牌,这些音乐需要有版权。我不评价这个产品的好坏,但这显然和Google总部习惯格格不入。难道Google不知道去做一个音乐下载产品吗?难道Google不能去做一个下载站吗?总部不去做,只不过是因为这和价值观不符。

同样的价值观不符,还包括和天涯合作的来吧。之前说过,除了独特的数据,Google不会主动创造内容。以Google的胸怀,可以去索引百度贴吧和知道,并放在结果的显著位置,但没必要自己去模仿一个贴吧出来。这种竞争的水平太低了。

甚至,谷歌把中国访问Google.com的流量"劫持"到了Google.cn,以便提高自己的"占有率"。这件事让很多Google老用户恼火,Zola曾经在某个李开复参与的活动中举手提问,如何才能在中国正常的访问Google.com。

"倒流量"之后,谷歌的市场占有率有所上升。这是应该的。不过,新上升的占有率中,有多少是真正的搜索流量就不得而知了。正如百度搜索和贴吧等产品的比值是个秘密一样。

百度跟在Google后面,而谷歌跟在百度后面。

除了倒流量,谷歌也在"抓收入"。

投放过Adsense的朋友,大概会记得,Adsense的匹配质量越来越差,医疗方面的内容也越来越多。之前经常有人因为作弊被封掉帐号,后来再也没人说过自己的帐号被封。

我07年的两篇blog提到了这件事:
对不起,这是谷歌,不是google
去掉了blog上的google adsense

这两个特点都不是Google Adsense应有的特性。Google Adsense应该是匹配准,不干扰用户,且提供有用信息。时常读英文内容的人会时常看到Adsense广告的匹配相当精确,时而有点击的必要。

离开了这两个特点,可以把谷歌的广告看作一个大的广告联盟。这和拿了很多小网站的Banner的流量去找广告主谈价本质是一样的。在这种广告销售策略下,不需要匹配,不需要杜绝点击欺诈。最舍得花钱投这种广告的,无非是医疗,美容几类。

这几类是最赚钱的部分。不仅对于谷歌,对于百度,甚至对电视台都是一样的。

关于Adsense的故事,可以看看Tiny这篇文章 :我和Google Adsense那点故事

在这5年中,最常被记者们提起的"谷歌困境"就是"总部压力"。在我列出的这些部分,都已经触及到了Google价值观,所以Google必然不满。

有兴趣的同学可以对比一下2005~2010这5年,Google做了什么,谷歌做了什么。你会看到截然不同的项目。虽然结果看起来似乎都是:"市场份额增加,收入增加",Google在这几年,砸实了搜索的基础,扩大了搜索的内容来源和范围,把索引伸向了非数字内容,完成了地图/卫星图/Earth/街景等一系列重要产品,完成了在移动和3G方面的布局。谷歌做了什么呢?音乐,热榜,还有一个抄袭的输入法。

从谷歌存在的那天,我就写过一篇文章,核心意思是:要么把中国当作研发基地,投资,研发,但不运营,要么就干脆去印度开分公司。不幸言中。

4 孙云丰的观点

从商业价值和经济利益方面考量,都可以看出Google的不作恶,并不是作秀的口号。对于一个靠信息有序化赚钱的公司,必须要不作恶才行。百度正好相反,必须要作恶才行。

Google是幸福的,可以把商业价值建立在一个正确的价值观之上。这确实是可遇不可求的机会。很不幸,百度不行。

孙云丰的言论
是无法自圆其说的。一方面,他认为Google不是人权斗士,只是个为了利润的市侩分子。另一方面,他又高举社会公平的大旗,宣称百度的道德感。这两者之间有明确的冲突。如果Google只为了利润,那么百度同样不应该有道德可言。

一方面,他宣称自己观点毫无错误,另一方面,他又删掉了自己的文章。有人说删贴未必是他自己的意愿。那么,作为宣称"有道德感"的百度员工,他不应该屈从别人的意见删掉自己认为正确的东西。作为百度高管,不应该允许百度公关去打电话要求别人删贴。

今天有一些百度员工为孙云丰辩护,这些说法同样无法自圆其说。试图证明百度是一家很好的公司,并不能证明孙云丰说的正确。正如纳粹德国有一支很有战斗力的军队,并不能证明希特勒是正义的。他们甚至自相矛盾,认为孙云丰对竞争对手恶言相对是正确的,其他人骂孙云丰是错。如果孙云丰代表自己骂了一家公司,该公司的用户有权回击。如果孙云丰代表百度,那他严重的缺乏职业道德。从任何角度,我也得不出百度员工和前员工的那些结论。

当然,我从来也没认为过百度是一家很糟糕的公司,甚至很多次认为百度正在逐渐变成一家有责任感的公司。遗憾的是,从高管到员工,似乎都没和这家公司一样完成这种转变。

不要以为这次事件打击了Google在中国的份额就幸灾乐祸,事实上,中国的互联网市场消失了。这和市场份额无关,和宏观形势有关。这个国家温情脉脉的互联网时代就此结束,就好比IT精英们看不起的那些传统生意人一样,慢慢被兼并,重组,消亡,剩下的那一点,会被扫倒利润微薄的边边角角。就好比,你家楼下菜市场那个可怜的菜农,守着那一点点收入,还要担心城管。这是这个行业中每个人的悲剧。

Tinyfool说:百度的矛盾在于,Google的成功是他在全世界资本市场受宠的原因,但他们可能无时无刻不想google死掉会更好。在全世界范围内,这是不可能出现的,现在在中国出现了,他们真的会高兴吗?

Google给我们的最大价值,除了信息流动加速,就是信息永存。当我写完这篇blog,发布在我的blog上,按下"发布"之后的几分钟,各种蜘蛛就会蜂拥而至,把这篇文章复制若干次,存在这世界的各个角落。这文章即永存。无法被某个组织控制或删除,也无法阻止其流动。公关公司不行,某个国家政府也不行。孙云丰的言论,和百度其他员工的言论,也将和这篇文章一样,被永存,成为历史的一部分。这是我们热爱Google的原因。

现在,我要按下发布按钮了。