crossdomain.xml理解
今天碰到一个crossdomain.xml漏洞,初看一脸懵逼,这crossdomain.xml是个什么文件,后来在网上查了一些资料才弄清楚这个文件是干什么的
简介:
这个文件简单来说就是在flash跨域访问时决定你能不能访问。限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据
例如我从a服务器的swf文件要去访问b服务器的文件,那么swf首先看的就是这个crossdomain.xml这个文件,有这个文件才可以访问。没有这个文件就不能访问
详细介绍
crossdomain一般放在跟目录下,对全站起作用,也可以放在某个路径下,对该路径本身以及子路径有效
crossdomain
主要有四个节点
site-control
allow-access-from
allow-access-from-identity
allow-http-request-header-from
allow-control:这个节点使用在主策略的,也就是根目录下的,这个文件是用来决定其他非主策略的加载策略,他决定非主策略那些能用那些不能用
none: 不允许使用loadPolicyFile方法加载任何策略文件,包括此主策略文件。
master-only: 只允许使用主策略文件[默认值]。
by-content-type:只允许使用loadPolicyFile方法加载HTTP/HTTPS协议下Content-Type 为text/x-cross-domain-policy的文件作为跨域策略文件。
by-ftp-filename:只允许使用loadPolicyFile方法加载FTP协议下文件名为 crossdomain.xml的文件作为跨域策略文件。
all: 可使用loadPolicyFile方法加载目标域上的任何文件作为跨域策略文件,甚至是一 个JPG也可被加载为策略文件![使用此选项那就等着被xx吧!]
如果要对网站子目录做策略的话,这一项就是必须的
例:将site-control策略配置为可加载本服务器中其它的text/x-cross-domain-policy文件作为跨域策略文件
<cross-domain-policy>
<site-control permitted-cross-domain-policies="by-content-type" />
</cross-domain-policy>
allow-access-from:这个是来确认能够读取本域内容的flash文件来源域
他有三个属性
domain:该属性指定一个确切的 IP 地址、一个确切的域或一个通配符域(任何域)。只有domain中指定的域,才有权限通过flash读取本域中的内容。
可采用下列两种方式之一来表示通配符域:
1)单个星号(*),如:<allow-access-fromdomain="*" />,表示匹配所有域和所有 IP 地 址,此时任何域均可跨域访问本域上的内容。[这是极不安全的!]
2)后接后缀的星号,表示只匹配那些以指定后缀结尾的域,如*.qq.com可匹配 game.qq.com、qq.com。形如www.q*.com或www.qq.*的为无效配置。
Tips:当domain被指定为IP地址时,只接受使用该IP作为网址来访问的来源请求[此时ip地址也就相当于一个域名而已],如domain被设置为192.168.1.100时,使用http://192.168.1.100/flash.swf 来请求该域内容是允许的,但是使用指向192.168.1.100的域名www.a.com来访问时[http://www.a.com/flash.swf]将会被拒绝,因为flash不懂得dns解析:)
to-ports:该属性值表明允许访问读取本域内容的socket连接端口范围。可使用to-ports="1100,1120-1125"这样的形式来限定端口范围,也可使用通配符(*)表示允许所有端口。
secure:该属性值指明信息是否经加密传输。当crossdomain.xml文件使用https加载时,secure默认设为true。此时将不允许flash传输非https加密内容。若手工设置为false则允许flash传输非https加密内容。
allow-access-from-identity:允许特定证书的来源域访问本域上的资源,每个allow-access-from-identity节点最多包含一个signatory子节点
例:
<allow-access-from-identity>
<signatory>
<certificate
fingerprint="01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef:01:23:45:67"
fingerprint-algorithm="sha-1"/>
</signatory>
</allow-access-from-identity>
allow-http-request-headers-from:授权第三方向本域发送用户定义的http头
也就是这个节点是控制http写入权限的
allow-http-request-headers-from包含三个属性:
domain:作用及参数格式与allow-access-from节点中的domain类似。
headers:以逗号隔开的列表,表明允许发送的http头。可用通配符(*)表示全部 http头。
secure:作用及用法与allow-access-from节点中的secure相同。
例:任意域都可以向当前域发送SOAPAction标头
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="SOAPAction" />
</cross-domain-policy>
建议
知道了这个文件是干什么用的,那么就可以知道如何防止漏洞危害的发生了
1)allow-access-from标签的domain属性检测:domain属性应根据最小化原则按需设置,仅允许可信任的来源跨域请求本域内容。禁止将该属性值设置为“*”。
2)allow-http-request-headers-from标签的domain属性检测:domain属性应根据最小化原则按需设置,仅允许可信任的来源向本域跨域发送内容。禁止将该属性值设置为“*”。
3) site-control标签的permitted-cross-domain-policies属性检测:根据业务的实际需求及可行性,对该属性做相应设置。禁止将该属性值设置为“all”。

浙公网安备 33010602011771号