浏览 2274 次
锁定老帖子 主题:Facebook XHP 调研
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-27
最后修改:2010-07-27
1. XHP到底做了什么: 看过新闻的人都知道,他主要是做了一件事情,在PHP中添加XML语法输出功能,可以输出的过程中检测xml语法,避免xss漏洞发生. 除此之外,他还添加了一个特殊的专门用来描述xml 结构的php语法(这个玩大了吧). XML 语法的支持不必太多解释了,很多文章都有示例. <?php require_once("php-lib/init.php");//现在流传的文档都没有加上这句,为什么?遮羞而已! echo <div>Hello {$_GET['name']}</div>; 这里div元素内有一部分动态内容,$_GET['name'],它将被当作xml编码输出:(调用:htmlspecialchars($_GET['name'])) xml DSL?其实,这没什么,只是在源代码解释之前对对源代码做一些代码替换的预处理,一种用来贴金的玩艺,给xhp增加一点神秘感。 2. 工作原理 xhp的工作原理就是在php解释前,对源代码做预处理(与常见的模板系统类似,但是xhp不作文件缓存),然后将转换后的php代码交给解释器执行。 比如上述简单的代码,将被翻译成: <?php require_once("php-lib/init.php"); echo new xhp_div(array(), array('Hello ',$_GET['name'],), __FILE__, 8); 上述时xml输出语法,此外,他还需要一个xml定义语法,比如上面的<div标签,其实对应的是一个类 xhp_div. 而这个类就定义在php-lib目录下的html.php中。只不过,他在定义的时候也借助预处理增加了一种新的定义语法。 xhp 基础类库中 div的定义:(/php-lib/html.php) class :div extends :xhp:html-element { category %flow; children (pcdata | %flow)*; protected $tagName = 'div'; } 这段代码在xhp的预处理阶段,将翻译成: class xhp_div extends xhp_xhp__html_element{ protected function &__xhpCategoryDeclaration() {static $_ = array('flow' => 1);return $_;} protected function &__xhpChildrenDeclaration() {static $_ = array(1, 5, array(5, array(0, 2, null),array(0, 4, 'flow'))); return $_;} protected $tagName='div'; } 3. 安全 在所有可见材料里面,我们看到他最大的亮点就是安全,其实不然,xhp这点做的其实不咋样。 我随机测试了几个lite 模板常见的基本功能。发现都有问题。 比如: <?php echo <div title="{$_GET['title']}">Hello {$_GET['name']}</div>; 错了,发现title{$_GET['title']}输出是php源码,把引号去掉(这也算懂XML?无语中)? <?php echo <div title={$_GET['title']}>Hello {$_GET['name']}</div>; 这下貌似正确了,可是我在title参数中传入一个: XSS" onmouseover="alert('xss bug') 这下可就鸡犬不宁了,最明显的xss漏洞都放过了,xhp可真够大方的。 此外,他的xml属性里面如果想传入静态和动态文本组合,哪貌似只能通过php写死。 4. 效率 这个就不揭人短了,够呛,而且,因为它是源码预处理的方式工作的,而且还不做文件缓存,所以,它对普通php程序也会有影响,所以开启xhp扩展后一定要和同时运用php加速器。 5. 容错 这个首先,从功能上看,它是把xml翻译成php对象处理,在验证上有先天优势,而且他也确实做了属性合法性检查。不过貌似他只对属性名称检查,对内容并没有作任何检查,否则也不会出现前面所说的安全问题。 此外:因为还不够成熟吧,一些没有问题的代码他也能帮你整出点问题来,举例 <b>jin</b> <i>dawei</i> 将被压缩为: <b>jin</b><i>dawei</i>有效的空白也会被无情的压缩掉。 6. 功能 功能上有多脆弱我就不想说了,源代码也就那么几行。 总结,xhp还远不成熟,虽然版本号已经达到1.3.9,功能也还很糟糕,问题也很多很多,如果谁敢把它运用到产品中,我拜他为神! 不过还是要赞叹以下fb的开放的精神,一个不够成熟的项目也可以开放出来,这也许可以说明,他的开放并不是为了同行的喝彩,而是一个开放的心态。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |