Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1202934
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-26 13:11:33

最近一直在和 suddy 折腾 XSLT 安全问题,他之前写了篇不错的blog

今天我再补充点心得。精力有限,只能马虎的写写了。

XSLT 2.0
功能更强大,但是目前浏览器都还没有完全支持,所以暂时不涉及。

javaphp里都有实现 XSLT Processor

在客户端浏览器里,也实现了 XSLT Processor,通过js可以进行调用.

transform
的过程,等于把xml数据组装在xsl样式文件里,拼出来一个html,最后展示在浏览器上。有兴趣了解更详细内容的可以参考W3C里关于XHTMLXSLT的规范。

在客户端,可以参考如下JS

 


点击(此处)折叠或打开

这个过程中,如果是输出在HTMLtransform 本身不会产生什么问题,即便是transform了一些特殊符号,比如 在拼装后的html里是执行不了的。

如下firebug里所见:

但是如果该值的输出是在 script 元素中或者是在某个元素事件内,则可能导致执行脚本。

比如,xsl文件中是这么写的:


点击(此处)折叠或打开

  1. xmlns:xsl="">
  2. My CD Collection

  3. Title Artist
  4. 如果在 xml 文件:
  5. <![CDATA[</script><script>alert(/xss1/);</script>]]>
  6. alert(1);
  7. USA
  8. Columbia
  9. 10.90
  10. 1985

那么onclick事件就会执行alert(1)

同样的,修改适当的xml数据后,在script标签中输出的数据也会得到执行。

如何解决这个问题,请参考我前几篇blog


此外,一些安全问题都是出在 xsl 文件中。

首先,XSL 文件可能会造成 XSS

如果允许用户直接上传XSL文件,则用户可能直接写脚本执行。

XSL 中支持 script扩展,即script标签。

某些XSLT Processor 中还支持调用本地文件,主要是通过 document() 或者 类似 doc() 的函数加载一个本地文件进来,如果控制的不好,就可能造成类似加载 ../../../../../../../../../etc/passwd 这类问题。


此外,在XSLT中有时候还能执行某些服务端的函数,比如在PHP中:(这是 PHP XSLT Processor 特有的)







IE
曾经宣称他们是安全的,因为在 MSXML 中很早就开始禁用 script 扩展,也就是说在XSL里的


是不被IE解析的,如果要使用,需要额外配置选项。

同时,MSXML里也是禁用document函数的。

这些选项确实增加了IE的安全性,不过我测试发现,对于事件中的输出,IE并没有处理

也就是说在XML中使用类似 

        
          
       

的语句,还是会导致XSS的执行。


参考资料:
http://www.tkachenko.com/blog/archives/000726.html

http://www.acunetix.com/blog/web-security-articles/the-hidden-dangers-of-xsltprocessor-remote-xsl-injection/

阅读(1618) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~