有难度的问题,请高手出马,重载getSecurityID试图实现跨域访问,却不能完全成功

hawktianyn 2008-08-26 01:36:59
目标是实现双向的跨域访问,即A域的脚本可以操作B域的网页,B域的脚本也可以操作A域的网页。

查询资料后发现应该重载InternetSecurityManager的getSecurityID函数以实现。

我重载以后,将所有URL都返回同样的SecurityID:{'h','t','t','p',':','w','w','w','.','a','b','c','.','c','o','m',3,0,0,0}希望能够欺骗IE,以为都是相同的域,但是却不能完全成功。

如果A域访问B域,而B域是abc.com,则可以成功,但是B域访问A域却不行。

其他情况都不行,看来好像需要重载什么函数,请各位高手出马研究研究。
...全文
345 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshcdr 2008-11-04
  • 打赏
  • 举报
回复
没做过这个方面,但是比较关注
hawktianyn 2008-10-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 jameshooo 的回复:]
不是不给面子的问题,而是我们也找不到正确答案。要不你把客户需求说说看,说不定能有其他解决方案
[/Quote]
非常感谢jameshooo,项目自然是需要进行下去的,绕过去的解决方案早就有了。
只不过我觉得这是一个非常值得研究和探讨的东西,希望能够有个让人可以接受的结论。
我想,遇到问题不细抠,就永远是一个工匠。
jameshooo 2008-09-22
  • 打赏
  • 举报
回复
不是不给面子的问题,而是我们也找不到正确答案。要不你把客户需求说说看,说不定能有其他解决方案
hawktianyn 2008-09-06
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yjgx007 的回复:]
非安全的做法, 不知楼主想干什么?
FF, IE都不会支持这种行为, 如果成功的话, 对客户端用户就是一种欺骗.
[/Quote]
这其实就是一个技术问题,只有能与不能,没有应不应该,如果这是不好的技术,那么google gear等技术又算什么呢?google可是强调过不作恶的公司啊。

就问了这么一个技术问题,平时有点儿小问题都想办法自己克服,也算是自律了,希望高手们给点儿面子。
hawktianyn 2008-09-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yjgx007 的回复:]
非安全的做法, 不知楼主想干什么?
FF, IE都不会支持这种行为, 如果成功的话, 对客户端用户就是一种欺骗.
[/Quote]

是不可能让FF或者IE这么做的,只有定制的浏览器才有可能。
这是我们自己的客户端需要的功能,这个和欺骗客户没有关系。
yjgx007 2008-09-03
  • 打赏
  • 举报
回复
非安全的做法, 不知楼主想干什么?
FF, IE都不会支持这种行为, 如果成功的话, 对客户端用户就是一种欺骗.
hawktianyn 2008-08-28
  • 打赏
  • 举报
回复
没有人知道吗?我顶
jameshooo 2008-08-27
  • 打赏
  • 举报
回复
域名欺骗用mimefilter或者命名空间过滤器就足够了,但是不适合你说的情况,因为域名都是未知的。
hawktianyn 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jameshooo 的回复:]
我对InternetSecurityManager这个接口很不放心,曾经跟踪测试过很多次,几乎全不符合预期。后来我是通过实现IInternetProtocolInfo接口完成的,关注ParseUrl方法和ParseAction参数,成功解决了跨域安全限制的问题。
[/Quote]
james,你的意思是每次系统查询domain的时候,都返回一个固定的domain来欺骗系统?这样会不会有隐患?这个函数的使用范围恐怕会很广。不过还是试试先。
hawktianyn 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hawktianyn 的回复:]
引用 5 楼 jiangsheng 的回复:
用InternetSecurityManager的SetZoneMapping函数把网址加到可信站点


我将所有的站点(*://*.*.*.*)都加到了可信站点,而且将可信站点的安全级别降到了最低。可是跨域脚本的权限仍然被限制。
我又同时使用重载getSecurityID函数试图欺骗,仍然是不行。

不知蒋兄是如何实现的?蒋兄可以做一个测试用例:
a.html
<frameset rows="50,50">
<frame src="http://www.baidu.com" id=…
[/Quote]

抱歉,b.html我写的时候有个笔误,b.html的内容应该是
b.html
<body>
<input type="button" value="ok" onclick="alert(top.aa.document.body.outerHTML);">
</body>
lvshaoqing 2008-08-27
  • 打赏
  • 举报
回复
留下名字,看结果.
jameshooo 2008-08-27
  • 打赏
  • 举报
回复
我对InternetSecurityManager这个接口很不放心,曾经跟踪测试过很多次,几乎全不符合预期。后来我是通过实现IInternetProtocolInfo接口完成的,关注ParseUrl方法和ParseAction参数,成功解决了跨域安全限制的问题。
hawktianyn 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiangsheng 的回复:]
用InternetSecurityManager的SetZoneMapping函数把网址加到可信站点
[/Quote]

蒋兄,不知道有没有什么高招?
hawktianyn 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jameshooo 的回复:]
域名欺骗用mimefilter或者命名空间过滤器就足够了,但是不适合你说的情况,因为域名都是未知的。
[/Quote]

james,你说的两种办法都试验了,可是都不行,不知道还有没有什么思路?
hawktianyn 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jameshooo 的回复:]
引用 5 楼 jiangsheng 的回复:
用InternetSecurityManager的SetZoneMapping函数把网址加到可信站点


借问蒋老大一句,SetZoneMapping是主动调用还是被动调用的?如果是我主动调用,如何处理随时可能出现的新域名?
[/Quote]

让我们共同研究研究。
我认为此处实际上应该重载GetZoneMapping,这样其他函数在读取ZoneMapping信息的时候就会受到相应的影响。
hawktianyn 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiangsheng 的回复:]
用InternetSecurityManager的SetZoneMapping函数把网址加到可信站点
[/Quote]

我将所有的站点(*://*.*.*.*)都加到了可信站点,而且将可信站点的安全级别降到了最低。可是跨域脚本的权限仍然被限制。
我又同时使用重载getSecurityID函数试图欺骗,仍然是不行。

不知蒋兄是如何实现的?蒋兄可以做一个测试用例:
a.html
<frameset rows="50,50">
<frame src="http://www.baidu.com" id="aa">
<frame src="b.html" id="bb">
</frameset>
-------------------------------------------------------------------------------
b.html
<body>
<input type="button" value="ok" onclick="alert(top.aa.body.document.outerHTML);">
</body>

打开a.html后,会加载百度和b.html,点击b.html的按钮,如果没有跨域访问的限制,则会显示a的网页内容,否则就会提示没有权限。
jameshooo 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiangsheng 的回复:]
用InternetSecurityManager的SetZoneMapping函数把网址加到可信站点
[/Quote]

借问蒋老大一句,SetZoneMapping是主动调用还是被动调用的?如果是我主动调用,如何处理随时可能出现的新域名?
蒋晟 2008-08-26
  • 打赏
  • 举报
回复
用InternetSecurityManager的SetZoneMapping函数把网址加到可信站点
hawktianyn 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jameshooo 的回复:]
具体问题具体分析,脚本是怎么访问外部域的?
不同的使用方式有不同的解决方案,只要是自制浏览器,这个问题是肯定能解决的
[/Quote]

浏览器启动以后,首先访问A域的网页,随着用户的操作,A域的网页会在框架中访问B域甚至更多域的网页。

A域的网页会和B域等其他域的脚本发生交互的脚本调用,比如top.func1();parent.aa.func2(top.b.document.outerHTML);等调用。什么样的脚本都有,真是应有尽有:)

所以,如果不彻底解决,依靠一些针对某个脚本的特殊处理,在这个案例中是行不通的。
jameshooo 2008-08-26
  • 打赏
  • 举报
回复
具体问题具体分析,脚本是怎么访问外部域的?
不同的使用方式有不同的解决方案,只要是自制浏览器,这个问题是肯定能解决的
加载更多回复(2)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧