最近facebook 的XHP是出尽了风头,看看,到底是何尤物.
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的开放的精神,一个不够成熟的项目也可以开放出来,这也许可以说明,他的开放并不是为了同行的喝彩,而是一个开放的心态。
分享到:
相关推荐
**XHP:Facebook的PHP强化项目** XHP(eXtended HTML for PHP)是由Facebook推出的一个PHP扩展,它的核心...对于那些关注代码质量和安全性,尤其是使用Facebook生态系统的开发者来说,学习和掌握XHP是非常有价值的。
xhp-lib 是 XHP 的库。XHP 是一个 PHP 扩展,通过它,开发人员可以直接在 PHP 代码中内嵌 XML 文档片段,作为合法的 PHP 表达式。这样,PHP就成为一个更为严格的模板引擎,大大简化了实现可重用组件的工作。这个库...
2. **PyTorch**:Facebook的开源项目,以其动态计算图和直观的API深受开发者喜爱。PyTorch的灵活性和易用性使其在研究和教学中尤其受欢迎,它的动态图特性使得模型构建更加灵活,能够方便地实现动态控制流程。 3. *...
《XHP Flow Frame:基于Numpy的深度学习框架解析》 在现代计算机科学领域,深度学习作为一种强大的机器学习技术,已经广泛应用于图像识别、自然语言处理、语音识别等多个领域。而构建自己的深度学习框架,是深入...
[黑苹果]Z7-KP7S1黑苹果EFI文件,这是一份适用于 Clevo P65xHP 的 Hackintosh EFI 配置,我的机型为 HASEE Z7-KP7S1,此类型号(Realtek ACL892)建议将 Clover 中「Devices」下「Audio」的「Inject」设置为「31」即可...
【xhp-bootstrap】是一个专为Facebook的Hack语言设计的库,它为Twitter的流行前端框架Bootstrap提供了集成。这个库使得在Hack中构建基于Bootstrap的Web界面变得更加便捷和高效。通过利用XHP(eXtended HTML,扩展...
相同模具系列(P65XHP)的应该差不多都可以拿来改改直接用上 所有驱动都在EFI里,不需要再另外安装任何驱动配置请详见签名 还有的一些小问题存在: 1,休眠唤醒摄像头丢失 2,驱动独显情况下,显示器没有内建...
简介XHP扩展了Hack的语法,使得XML文档片段成为有效的Hack表达式。 这使您可以将Hack用作更严格的模板引擎,并提供可重用组件的更直接的实现。 如果您需要高级XHP UI库,则可能需要看看...
本项目是基于Objective-C的XHP_PalmHealth掌上健康应用MVVM框架设计源码,包含1124个文件,其中
文档中的内容主要关注的是儿童心理健康,特别是针对孩子们在课堂上不愿积极发言这一现象进行分析,并提出了相应的解决策略。首先,教师发现学生在课堂上的参与度下降,一部分原因是害怕犯错被嘲笑,另一部分则是因为...
灯板,铝基板PCB图,0角度LED 可以直接拿去做
用自相关方法提取语音信号基频轨迹..........
电脑型号 Notebook P65xHP 笔记本电脑 操作系统 Windows 10 64位 ( DirectX 12 ) 处理器 英特尔 Core i7-7700HQ @ 2.80GHz 四核 主板 Notebook P65xHP ( 100 Series/C230 Series 芯片组 Family - A152 ) 内存 16 ...
XLamp XHP系列分为XHP50和XHP70两种型号。XHP50拥有5.0 x 5.0毫米的封装尺寸,最大功率为20瓦,而XHP70则稍大,封装尺寸为7.0 x 70毫米,最大功率可达30瓦。这两款产品都设计用于非定向、定向和线性照明应用,如下照...
XHP CMS-eXpandable主页是易于安装,易于使用,易于扩展的内容管理系统(CMS),以PHP编写,并使用MySQL作为数据库。 它包括博客,图片库,内容,聚合器模块以及用于贡献模块的API。
xp.mobileconfig
XHP是Facebook开发的一个PHP扩展,它为构建安全的、可组合的HTML组件提供了强类型的支持。XHP的灵感也被融入TeeinHtml,使得开发者可以创建可重用、可维护的模板组件,同时确保了输出的安全性。 Elm则是一种函数式...
"mobile-config"是一个在移动应用开发中常见的概念,主要用于配置和管理移动设备上的应用程序设置。在iOS和Android等平台的应用开发中,配置文件是不可或缺的一部分,它们帮助开发者定义应用程序的行为,适应不同...