zoukankan      html  css  js  c++  java
  • crossdomain.xml跨域配置文件的安全注意事项

    零、绪论:

    对WEB中的FLASH确实了解不多,对程序中的跨域配置也了解不多,这是自己以前写的一篇笔记,到现在也还了解不深,勉强记下来罢了,备忘。

    一、什么是crossdomain.xml?
    这是一个flash在跨域传输请求数据时要遵循的一个规则配置文件。例如a.com中swf文件要请求b.com中的数据,要检查该文件,如不存在则一律禁止跨域数据传输,如果存在按照相关配置的规则执行。该文件可以放在主目录对全站起效(必须有),也可以放在子目录下对该目录起效(可以有)。

    二、如何配置该文件
    (1)加载代码:
    Security.loadPolicyFile(“http://www.xxx.com/subdir/crossdomain.xml”)
    (2)配置语法
    <cross-domain-policy>
    <site-control permitted-cross-domain-policies=”by-content-type” />
    /*
    site-control:通过检查该节点的属性值,确认是否可以允许加载其他策略文件。[如果该策略文件并非主策略文件,则此节点被自动忽略]
    每个site-control标签有且仅有属性permitted-cross-domain-policies,该属性指定相对于非主策略文件的其他策略文件的加载策略。permitted-cross-domain-policies属性值有如下情况:
    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吧!]
    */


    <allow-access-from domain=”*.qq.com” secure=”true” />
    /*
    allow-access-from标签有三个属性:
    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子节点。
    */
    <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 domain=”*” headers=”SOAPAction” />
    /*
    allow-http-request-headers-from:此节点授权第三方域flash向本域发送用户定义的http头。
    allow-access-from节点授权第三域提取本域中的数据,而 allow-http-request-headers-from 节点授权第三方域将数据以http头的形式发送到本域中。[简而言之,allow-access-from是控制读取权限,allow-http-request-headers-from是控制以http头形式的写入权限]
    allow-http-request-headers-from包含三个属性:
    domain:作用及参数格式与allow-access-from节点中的domain类似。
    headers:以逗号隔开的列表,表明允许发送的http头。可用通配符(*)表示全部 http头。
    secure:作用及用法与allow-access-from节点中的secure相同。
    */
    </cross-domain-policy>


    总结:
    不正确的crossdomain.xml策略将导致严重的安全问题,如信息泄露、CSRF等。从上文中可以看出,在进行安全评估时,我们应重点关注以下几点:
    1)allow-access-from标签的domain属性检测:domain属性应根据最小化原则按需设置,仅允许可信任的来源跨域请求本域内容。禁止将该属性值设置为“*”。
    2)allow-http-request-headers-from标签的domain属性检测:domain属性应根据最小化原则按需设置,仅允许可信任的来源向本域跨域发送内容。禁止将该属性值设置为“*”。
    3) site-control标签的permitted-cross-domain-policies属性检测:根据业务的实际需求及可行性,对该属性做相应设置。禁止将该属性值设置为“all”。

  • 相关阅读:
    js直接获取当前windows登陆账号---仅适用于IE
    Windows变量路径与通配符
    IDEA数据库生成Entity 带注释, 默认值
    BIM+区块链在建筑业施工过程结算的应用
    Java中动态规则的实现方式
    Git查看本地仓库关联关系以及清理无效远程分支
    Golang把字符串数组、[]interface{}打乱、切片乱序
    Golang将map数组按照指定字段排序
    Golang把时间和数字相乘报错invalid operation: second * time.Second (mismatched types int and time.Duration)
    Golang获取明日时间及距离明日凌晨的时间差
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8260719.html
Copyright © 2011-2022 走看看