November 18, 2010
杨卫华:新浪微博的架构发展历程
"新浪科技讯 11月16日下午消息,由 新浪微博( http://t.sina.com.cn)(http://t.sina.com.cn)主办的中国首届微博开发者大会在北京举行,这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。图为微博平台首席架构师杨卫华演讲。\n以下为演讲实录:\n大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心。最晚的一次,是12点多收到一个邮件说想了解一下微博底层是 怎么构架的。很多技术人员对微博的构架非常感兴趣,就是一个明星他有300万粉丝,这个技术怎么来实现?今天在这里跟大家分享一下微博的底层机构,让大家 对微博的底层技术有更好的了解。另外不管是做客户端、1.0、2.0、论坛、博客都要考虑架构的问题,架构实际上是有一些共性的。今天我通过讲解微博里面 的一些架构,分析一下架构里面哪些共性大家可以参考。\n首先给大家介绍一下微博架构发展的历程。新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是 …"
November 18, 2010
PHP autoload 机制
"1**、简介******\nPHP5中引入了类的自动装载(autoload)机制。autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。\n例子:****\n/* autoload.php */ function __autoload($classname) { require_once ($classname . “class.php”); } $person = new Person(”Altair”, 6); var_dump ($person);\n通常PHP5在使用一个类时,如果发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。\nautoload至少要做三件事情,第一件事是根据类名确定类文件名,第二件事是确定类文件所在的磁盘路径(在我们的例子是最简单的情况,类与调用它们的 PHP程序文件在同一个文件夹下),第三件事是将类从磁盘文件中加载到系统中。第三步最简单,只需要使用include/require即可。要实现第一 步,第二步的功 …"
November 18, 2010
linux的head命令及tail命令介绍
"当需要查看一个文本文件的头部或尾部时,head 命令及tail 命令可以非常方便的完成该操作。head 命令用于查看一个文本文件的开头部分;而tail 命令则用于显示文本文件的末尾几行。这两个命令举例如下: head example.txt 显示文件 example.txt 的前十行内容; head -n 20 example.txt 显示文件 example.txt 的前二十行内容; tail example.txt 显示文件 example.txt 的后十行内容; tail -n 20 example.txt 显示文件 example.txt 的后二十行内容; tail -f example.txt 显示文件 example.txt 的后十行内容并在文件内容增加后,自动显示新增的文件内容。 注意: 最后一条命令非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。"
November 17, 2010
牛人写的. 高级PHP应用程序漏洞审核技术
"一个安全界的牛人写的. 很不错.. [目录]\n前言 传统的代码审计技术 PHP版本与应用代码审计 其他的因素与应用代码审计 扩展我们的字典 5.1 变量本身的key 5.2 变量覆盖 5.2.1 遍历初始化变量 5.2.2 parse_str()变量覆盖漏洞 5.2.3 import_request_variables()变量覆盖漏洞 5.2.4 PHP5 Globals 5.3 magic_quotes_gpc与代码安全 5.3.1 什么是magic_quotes_gpc 5.3.2 哪些地方没有魔术引号的保护 5.3.3 变量的编码与解码 5.3.4 二次攻击 5.3.5 魔术引号带来的新的安全问题 5.3.6 变量key与魔术引号 5.4 代码注射 5.4.1 PHP中可能导致代码注射的函数 5.4.2 变量函数与双引号 5.5 PHP自身函数漏洞及缺陷 5.5.1 PHP函数的溢出漏洞 5.5.2 PHP函数的其他漏洞 5.5.3 session_destroy()删除文件漏洞 5.5.4 随机函数 5.6 特殊字符 5.6.1 截断 5.6.1.1 include …"
November 17, 2010
数据库主键全局唯一方案
"现在通过数据的水平切分(sharding)来实现数据库 Scale Out 的解决方案受到了越来越多人的青睐,但是在切分过程中可能遇到的问题也肯定不在少数,如切分规则的设计,切分后的访问路由,切分后的主键的全局唯一等等。\n这里我主要列举几个可以使用在 MySQL 数据库主键全局唯一方案及其优劣,供大家参考:\n通过应用程序生成一个GUID,然后和数据一起插入切分后的集群。优点是维护简单,实现也容易。缺点是应用的计算成本较大,且GUID比较常,占用数据库存储空间较大,涉及到应用的开发。 说明:主要优势是简单,缺点是浪费存储空间,GUID:32字节,100W记录,多32兆,如果是int,4字节,会少28M。如果有外键关联,会浪费更多。\n通过独立的应用程序事先在数据库中生成一系列唯一的 ID,各应用程序通过接口或者自己去读取再和数据一起插入到切分后的集群中。优点是全局唯一主键简单,维护相对容易。缺点是实现复杂,需要应用开发。 说明:ID表要频繁查和频繁更新,插入数据时,影响性能。\n通过中心数据库服务器利用数据库自身的自增类型(如 MySQL的 auto_increment 字段),或者自增对 …"
November 16, 2010
shell test操作运算符
"4.4 控制结构\n在shell脚本中,使用控制结构就可以控制Linux命令的执行。使用控制结构,可以重复执行命令,或者选择特定的命令。控制结构包含两个主要的组件:测试操作(test)和命令。如果测试操作成功,则命令就会执行。这样的话,就可以使用控制结构来决定是否执行选定的命令。\n存在两种不同类型的控制结构:循环和条件。循环结构会重复执行命令,而条件结构会在特定条件满足时执行命令。\nBASH Shell有三种循环控制结构:while、for和for-in,两种条件控制结构:if和case。控制结构把Linux命令执行结果作为测试。\n所有的Linux命令在执行结束后都会返回一个退出状态。如果某命令成功执行,退出状态将是0。如果因为某种原因该命令执行失败,则退出状态是表示失败类型的一个正值。控制结构会检查Linux命令的退出状态是0,还是其他值。对于if和while控制结构,如果退出状态是0,则说明该命令被成功执行,控制结构会继续。\n4.4.1 test操作\n借助于test命令,可以比较整数、字符串,甚至执行逻辑操作。命令由关键字test,以及被比较值组成;被比较数值之间使用一个选项分隔开, …"
November 16, 2010
grep用法详解:grep与正则表达式
"**首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!**正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;\n1基础正则表达式grep 工具,以前介绍过。\ngrep -[acinv] ‘搜索内容串‘ filename\n-a 以文本文件方式搜索 -c 计算找到的符合行的次数 -i 忽略大小写 -n 顺便输出行号 -v 反向选择,即显示不包含匹配文本的所有行 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -s 不显示不存在或无匹配文本的错误信息。 grep命令加- E参数,这一扩展允许使用扩展模式匹配。\n**其中搜索串可以是正则表达式!**grep: 要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。\n$ ls -l | grep ‘^a’ 通过管道过滤ls -l输出的内容,只显示以a开头的行。\n$ grep …"
November 12, 2010
nginx location基础
"基本语法\nlocation [=|~|~*|^~] /uri/ { … }\n= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。\n~ 为区分大小写匹配\n~* 为不区分大小写匹配\n!~和!~*分别为区分大小写不匹配及不区分大小写不匹配\n^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。\n例如:\nlocation = / { # 只匹配 / 查询。\nlocation / { # 匹配任何查询,因为所有请求都已 / 开头。但正则表达式规则和长的块规则将被优先和查询匹配。\nlocation ^~ /images/ { # 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。\nlocation ~* .(gif|jpg|jpeg)$ { # 匹配任何以 gif、jpg 或 jpeg 结尾的请求。\n++ 文件及目录匹配\n-f和!-f用来判断是否存在文件\n-d和!-d用来判断是否存在目录\n-e和!-e用来判断是否存在文件或目录\n-x和!-x用来判断文件是否可执行\n++ 一些可用的全局变量\n$args …"
November 12, 2010
nginx配置文件中的location中文详解
"location\n语法:location [=|~|~*|^~] /uri/ { … } 默认:否\n上下文:server\n这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式,你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。\n确定 哪个location 指令匹配一个特定指令,常规字符串第一个测试。常规字符串匹配请求的开始部分并且区分大小写,最明确的匹配将会被使用(查看下文明白 nginx 怎么确定它)。然后正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。如果没有找到匹配的正则表达式,使用常规字符串的结果。\n有两个方法修改这个行为。第一个方法是使用 “=”前缀,将只执行严格匹配。如果这个查询匹配,那么将停止搜索并立即处理这个请求。例子:如果经常发生”/”请求,那么使用 “location = /” 将加速处理这个请求。\n第二个是使用 ^~ 前缀。如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。\n而且它重要在于 NGINX 做比较没有 URL 编码,所以如果 …"
November 12, 2010
nginx下禁止目录运行php脚本
"为了安全起见,我们一般会对上传目录禁止运行php脚本\n在 apache 下面我们可以通过:\nphp_flag engine off\n的方式来来禁用目录下文件php执行权限。\n那么在 nginx 里面同样可以实现这种方法,那就是location的优先匹配,关于location可以参考我之前的一批文章http://226617.cn/archives/392.htm\n这里简单就举个例子\nlocation ^~ /attachments/\n{\naccess_log off;\n}\n这样 attachments这个目录 就不会再去跳转给fastcgi去执行php了.这里利用了nginx下location指令的处理顺序优先级特点.\n但上面的方法只能算一种技巧,一般不这样设置,正确的方法为:\nlocation /upload/ {\nlocation ~ .*.(php)?$\n{\ndeny all;\n}\n}\n而对于多个目录的话,可以一起进行限定:\nlocation ~* ^/(attachments|images)/.*.(php|php5)$\n{\ndeny all;\n}\n注意这段secion一定要放 …"