注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

关于《IE8的innerHTML缓冲区过小的BUG》的问题根源(BSTR带来的问题)  

2011-06-25 17:13:20|  分类: 疑难杂症 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        之前误以为IE8的innerHTML存在缓冲区过小的问题,今天再次跟踪,发现是自己的代码的问题。一直一来,我习惯于这样写:
       CAtlString str;
innerHTML(str.GetBuffer(0));

        也就是,直接将WCHAR *宽字符串直接操作成BSTR,而且也一直没发现存在什么不妥。然而,IE8中,IE对BSTR字符串进行了严格检查!
        于是,“标准BSTR是一个有长度前缀和null结束符的OLECHAR数组”这个就开始生效了!可以看到,以往的BSTR只是有名无实的,很容易构造一个缓冲区溢出,从而带来安全隐患。
        IE8中,系统会检查BSTR的这个长度前缀和null结束符。而在IE8之前,系统不会对此进行安全检查,从而给攻击者提供了方便之门。由于检查了长度前缀,所以,如果直接传入一个WCHAR *,就可能因为长度不足,从而被截断!
        解决方法就是:

       CAtlString str;
innerHTML(T2BSTR(str.GetBuffer(0)));

By:zhanyonhu

  评论这张
 
阅读(1000)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016