ajax w3c,新W3C标准中 AJAX 跨域实现以及隐患

作者:刺

标准也很无奈,标准很难做到 Secure By Default。

最新的W3C标准里是这么实现HTTP跨域请求的,

Cross-Origin Resource Sharing

简单来说,就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域。

这些Headers有:

在 Request 包和 Response 包中都有一些。

其中最敏感的就是 Access-Control-Allow-Origin这个 Header, 他是W3C标准里用来检查该跨域请求是否可以被通过。 (Access Control Check)

跨域实现的过程大致如下:

从 http://www.a.com/test.html 发起一个跨域请求,

请求的地址为: http://www.b.com/test.php

如果 服务器B返回一个如下的header

Access-Control-Allow-Origin: http://www.a.com

那么,这个来自 http://www.a.com/test.html 的跨域请求就会被通过。

在这个过程中, request 还会带上这个header:

Origin: http://www.a.com

6a9203b03bf6d864a858973082d82739.png

不过这里比较要命的是 Access-Control-Allow-Origin 的值可以是通配符 *

如果是 * 的话,就可以接收来自任意source origin的请求。

我已经可以想象到以后这个特性被程序员滥用以及被用来制作后门的可怕后果了!

在 Firefox 3.1 Beta 2上抓包如下:

GET http://www.b.com/test.php HTTP/1.1

Host: www.b.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 Paros/3.2.13

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.5

Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Proxy-Connection: keep-alive

Referer: http://www.a.com/test.html

Origin: http://www.a.com

Cache-Control: max-age=0

HTTP/1.1 200 OK

Date: Thu, 15 Jan 2009 06:28:54 GMT

Server: Apache/2.0.63 (Win32) PHP/5.2.6

X-Powered-By: PHP/5.2.6

Access-Control-Allow-Origin: *

Content-Length: 28

Content-Type: text/html

Cross Domain Request Test!

两段代码大致如下:

www.a.com/test.html:

var client = new XMLHttpRequest();

client.open(“GET”, “http://www.b.com/test.php”);

client.onreadystatechange = function() { }

client.send(null);

www.b.com/test.php:

header(“Access-Control-Allow-Origin: *”);

?>

Cross Domain Request Test!

除了这个Header外,还可以通过一些其他的Header 来控制比如 Method, 时间等,可以参考标准,不在此赘述。

出于安全考虑,跨域请求不能访问document.cookie 对象

对于IE8 Beta 2, 则是通过XDomainRequest来实现的这个跨域请求

比如类似如下代码就可以实现了:

var request = new XDomainRequest();

request.open(“GET”, xdomainurl);

request.send();

也要求对方服务器返回这个头才行。

目前,支持这种跨域实现的要求

Firefox 3.1 Beta2

IE 8 Beta2

等到普及还有一段时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
about ado ado ajax asp aspnet browsers careers css dhtml dotnetmobile dtd e4x example hosting html html5 htmldom i js media msnet php quality quiz rdf rss schema search semweb site smil soap sql svg tags tcpip tiy vbscript w3c wap web webservices wmlscript wsdl xforms xhtml xlink xml xmldom xpath xquery xsl xslfo 解决CHM打开后提示”地址无效”"已取消到该网页的导航”: (1)在所下载的chm文件上 单击右键-属性-解除锁定-确定 再次打开问题即可解决 (2)二:是因为文件所处的路径名含有#这样的字符的缘故。<br>因为上次WINDOWS XP2做了UPDATE之后就无法打开chm的帮助文件了....想来想去也无法解决.. <br>今天上来问.. <br>CALLCALL朋友给我提供方法也是无法解决..之后我去了官方查找原因..终于找出问题了!! <br>现在把他分享出来,希望有碰到跟我一样的情况下的朋友可以有所帮助!! <br>症状 <br>安装安全更 896358 或 890175 后,可能会遇到下列一个或多个症状: • 某些类型的基于 Web 的程序可能无法正常运行。例如,HTML 帮助的目录可能不再起作用。 <br>• 从远程位置打开 .chm 文件时,某些 HTML 帮助功能可能不起作用。例如,“相关主题”功能可能不起作用。 <br>打开CHM后里面的内容全部不可见...就像我们常见的404错误一样! <br>注意:本文包含以下 Microsoft 知识库文章的补充信息: <br>896358 (http://support.microsoft.com/kb/896358/) MS05-026:HTML 帮助的漏洞可能允许远程执行代码 <br>890175 (http://support.microsoft.com/kb/890175/) MS05-001:HTML 帮助的漏洞可能允许代码执行 <br>安装这些安全更后会出现这些症状是预料之的。本节为必须对关键业务程序重启用 HTML 帮助 ActiveX 控件的管理员提供了一些示例。这些替代方法可能会危及计算机,使之更容易遭受上述安全更所克制的威胁。最安全的做法是不要使用注册表替代方法。如果必须使用替代方法,请尽可能严格地设置注册表值。 <br>因为CHM有存在此上漏洞!!所以更之后会出现像我那种情况! <br>解决方案: <br>将以下文本粘贴到文本编辑器(如记事本)。然后用 .reg 文件扩展名保存该文件导入注册表.(注意先备份注册表)。 <br>CODE:[Copy to clipboard]REGEDIT4 <br>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp] <br>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\HHRestrictions] <br>"UrlAllowList"="\\\\productmanuals\\helpfiles;http://www.wingtiptoys.com/help/" <br>另外微软自己的网站上也有类似的说明,网址是http://support.microsoft.com/kb/902225/zh-cn <br>它给的解决方法是引用 <br>为最终用户提供的解决方案 <br>警告:如果提示从网站打开或保存 .chm 文件,则仅在需要此文件且信任提供此文件的网站的情况下进行此操作。 <br>在“文件下载”对话框,单击“保存”,然后选择要保存此 .chm 文件的位置。然后,使用下面的方法之一: <br>方法 1 <br>1. 双击此 .chm 文件。 <br>2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框。 <br>3. 单击“打开”。 <br>方法 2 <br>1. 右键单击该 CHM 文件,然后单击“属性”。 <br>2. 单击“取消阻止”。 <br>3. 双击此 .chm 文件以打开此文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值