2025年Facebook XHP 调研

Facebook XHP 调研最近 facebook 的 XHP 是出尽了风头 看看 到底是何尤物 b 1 XHP 到底做了什么 b 看过新闻的人都知道 他主要是做了一件事情 在 PHP 中添加 XML 语法输出功能 可以输出的过程中检测 xml 语法 避免 xss 漏洞发生 除此之外 他还添加了一个特殊的专门用来描述 xml 结构的 php 语法 这个玩大了吧 XML 语法的支持不必太多解释了 很多文章都有示例 lt

大家好,我是讯享网,很高兴认识大家。

最近facebook 的XHP是出尽了风头,看看,到底是何尤物.

[b]1. XHP到底做了什么:[/b]
看过新闻的人都知道,他主要是做了一件事情,在PHP中添加XML语法输出功能,可以输出的过程中检测xml语法,避免xss漏洞发生.
除此之外,他还添加了一个特殊的专门用来描述xml 结构的php语法(这个玩大了吧).

XML 语法的支持不必太多解释了,很多文章都有示例.


<?php
require_once(“php-lib/init.php”);//现在流传的文档都没有加上这句,为什么?遮羞而已!
echo &lt;div&gt;Hello {\(_GET[&#39;name&#39;]}&lt;/div&gt;;<br /></code></pre> <br /> 这里div元素内有一部分动态内容&#xff0c;\)_GET[‘name’],它将被当作xml编码输出:(调用:htmlspecialchars(\(_GET[&#39;name&#39;])&#xff09; <br /> <br /> <br /> xml DSL&#xff1f;其实&#xff0c;这没什么&#xff0c;只是在源代码解释之前对对源代码做一些代码替换的预处理&#xff0c;一种用来贴金的玩艺&#xff0c;给xhp增加一点神秘感。 <br /> <br />[b]2. 工作原理[/b] <br /> <br /> <br /> xhp的工作原理就是在php解释前&#xff0c;对源代码做预处理&#xff08;与常见的模板系统类似&#xff0c;但是xhp不作文件缓存&#xff09;&#xff0c;然后将转换后的php代码交给解释器执行。 <br /> 比如上述简单的代码&#xff0c;将被翻译成&#xff1a; <br /> <br /> <pre><code class="language-php"><br />&lt;?php<br />require_once(&#34;php-lib/init.php&#34;);<br />echo new xhp_div(array(), array(&#39;Hello &#39;,\)_GET[‘name’],), FILE, 8);

讯享网


上述时xml输出语法,此外,他还需要一个xml定义语法,比如上面的&lt;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 &#61; &#39;div&#39;;<br />}<br /></code></pre> <br /> 这段代码在xhp的预处理阶段&#xff0c;将翻译成&#xff1a; <br /> <pre><code class="language-php"><br />class xhp_div extends xhp_xhp__html_element{<!-- --><br />protected function &amp;__xhpCategoryDeclaration() {static \)_ = array(‘flow’ =&gt; 1);return \(_;}<br />protected function &amp;__xhpChildrenDeclaration() {static \)_ = array(1, 5, array(5, array(0, 2, null),array(0, 4, ‘flow’))); return \(_;}<br />protected \)tagName=‘div’;
}




[b]3. 安全[/b]

在所有可见材料里面,我们看到他最大的亮点就是安全,其实不然,xhp这点做的其实不咋样。
我随机测试了几个[url=http://lite.googlecode.com]lite[/url] 模板常见的基本功能。发现都有问题。

比如:

&lt;?php
echo &lt;div title=“{\(_GET[&#39;title&#39;]}&#34;&gt;Hello {\)_GET[‘name’]}&lt;/div&gt;;

错了,发现title{ \(_GET[&#39;title&#39;]}输出是php源码&#xff0c;把引号去掉&#xff08;这也算懂XML&#xff1f;无语中&#xff09;&#xff1f; <br /> <pre><code class="language-php"><br />&lt;?php<br />echo &lt;div title&#61;{\)_GET[‘title’]}&gt;Hello {$_GET[‘name’]}&lt;/div&gt;;

这下貌似正确了,可是我在title参数中传入一个: XSS” οnmοuseοver=“alert(‘xss bug’)
这下可就鸡犬不宁了,最明显的xss漏洞都放过了,xhp可真够大方的。
此外,他的xml属性里面如果想传入静态和动态文本组合,哪貌似只能通过php写死。


[b]4. 效率[/b]

这个就不揭人短了,够呛,而且,因为它是源码预处理的方式工作的,而且还不做文件缓存,所以,它对普通php程序也会有影响,所以开启xhp扩展后一定要和同时运用php加速器。

[b]5. 容错[/b]

这个首先,从功能上看,它是把xml翻译成php对象处理,在验证上有先天优势,而且他也确实做了属性合法性检查。不过貌似他只对属性名称检查,对内容并没有作任何检查,否则也不会出现前面所说的安全问题。
此外:因为还不够成熟吧,一些没有问题的代码他也能帮你整出点问题来,举例
讯享网 &lt;b&gt;jin&lt;/b&gt; &lt;i&gt;dawei&lt;/i&gt;

将被压缩为:
 &lt;b&gt;jin&lt;/b&gt;&lt;i&gt;dawei&lt;/i&gt;
有效的空白也会被无情的压缩掉。

[b]6. 功能[/b]
功能上有多脆弱我就不想说了,源代码也就那么几行。


总结,xhp还远不成熟,虽然版本号已经达到[url=http://github.com/facebook/xhp/downloads]1.3.9[/url],功能也还很糟糕,问题也很多很多,如果谁敢把它运用到产品中,我拜他为神!

不过还是要赞叹以下fb的开放的精神,一个不够成熟的项目也可以开放出来,这也许可以说明,他的开放并不是为了同行的喝彩,而是一个开放的心态。


讯享网

小讯
上一篇 2025-02-23 15:38
下一篇 2025-04-06 11:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/62859.html