整理了下Flash安全相关的知识,后面会再完善

一、先来说crossdomain.xml这个文件


flash如何跨域通信,全靠crossdomain.xml这个文件。这个文件配置在服务端,一般为根目录下,限制了flash是否可以跨域获取数据以及允许从什么地方跨域获取数据。

比如下面的列子: 1、www.a.com域下不存在crossdomain.xml文件,则不允许除了www.a.com域之外的其他任何域下的flash进行跨域请求。

2、www.a.com域下存在crossdomain.xml文件,如若配置 allow-access-from 为www.b.com,则只允许www.b.com域下的flash进行跨域请求,以及来自自身域www.a.com的网络请求。crossdomain.xml需严格遵守XML语法,有且仅有一个根节点cross-domain-policy,且不包含任何属性。在此根节点下只能包含如下的子节点:

site-control
allow-access-from
allow-access-from-identity
allow-http-request-headers-from

site-control

早期的flash允许从其他位置载入自定义的策略文件,目前最新版的flash在接受自定义的策略文件之前会去检查主目录的crossdomain.xml来判断是否接受自定义策略文件。该选项就由site-control进行控制。

不加该选项时,默认情况下flash不加载除主策略文件之外的其他策略文件,即只接受根目录下的crossdomain.xml,这样可以防止利用上传自定 义策略文件进行的攻击。如果需要启用其他策略文件,则需要配置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也可被加载为策略文件!

例子:

<site-control permitted-cross-domain-policies="by-content-type" >

允许通过HTTP/HTTPS协议加载http头中Content-Type为text/x-cross-domain-policy的文件作为策略文件

<site-control permitted-cross-domain-policies="all" >

允许加载任意文件作为策略文件

allow-access-from

该选项用来限制哪些域有权限进行跨域请求数据。

allow-access-from有三个属性

domain:有效的值为IP、域名,子域名代表不同的域,通配符*单独使用代表所有域。通配符作为前缀和域名进行组合代表多个域,比如*.weibo.com,代表weibo.com所有的子域。
to-ports:该属性值表明允许访问读取本域内容的socket连接端口范围。可使用to-ports="1100,1120-1125"这样的形式来限定端口范围,也可使用通配符(*)表示允许所有端口。
secure:该属性值指明信息是否经加密传输。当crossdomain.xml文件使用https加载时,secure默认设为true。此时将不允许flash传输非https加密内容。若手工设置为false则允许flash传输非https加密内容。

例子

http://a.com/crossdomain.xml文件内容如下

<cross-domain-policy >
<allow-access-from domain="*.b.com" secure="true" />
</cross-domain-policy >

允许所有qq.com的子域通过https对t.qq.com域进行跨域请求。

allow-access-from-identity

该节点配置跨域访问策略为允许有特定证书的来源跨域访问本域上的资源。每个allow-access-from-identity节点最多只能包含一个signatory子节点。

allow-http-request-headers-from

此节点授权第三方域flash向本域发送用户定义的http头。

allow-http-request-headers-from包含三个属性:

domain:作用及参数格式与allow-access-from节点中的domain类似。
headers:以逗号隔开的列表,表明允许发送的http头。可用通配符(*)表示全部http头。
secure:作用及用法与allow-access-from节点中的secure相同。

注:Flash 在自定义HTTP头中无法使用下列请求标题,并且受限制的词不区分大小写(例如,不允许使用 Get、get 和 GET)。 另外,如果使用下划线字符,这也适用于带连字符的词(例如,不允许使用 Content-Length 和 Content_Length):

Accept-Charset、Accept-Encoding、Accept-Ranges、Age、Allow、Allowed、Authorization、Charge-To、Connect、Connection、Content-Length、Content-Location、Content-Range、Cookie、Date、Delete、ETag、Expect、Get、Head、Host、Keep-Alive、Last-Modified、Location、Max-Forwards、Options、Post、Proxy-Authenticate、Proxy-Authorization、Proxy-Connection、Public、Put、Range、Referer、Request-Range、Retry-After、Server、TE、Trace、Trailer、Transfer-Encoding、Upgrade、URI、User-Agent、Vary、Via、Warning、WWW-Authenticate 和 x-flash-version。

二、web应用中安全使用flash


设置严格的crossdomain.xml文件可以提高服务端的安全性,在web应用中也会经常使用flash,一般是通过<object>或者<embed>来进行调用,例如下面:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"name="Main" width="1000" height="600" align="middle" id="Main" >
<embed flashvars="site=&sitename=" src='Loading.swf?user=453156346&key=df57546b-c68c-4fd7-9f9c-2d105905f132&v=10950&rand=633927610302991250' width="1000" height="600"align="middle" quality="high" name="Main" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" >
</object > <embed src="http://www.xxx.com/Loading.swf" allowScriptAccess="sameDomain" type="application/x-shockwave-flash>

flash是直接可以执行js代码的,所以在web应用中如果使用不当也会很危险,所以flash使用下面两个属性来保证引用flash时的安全性。

allowScriptAccess 和 allowNetworking

allowScriptAccess用来控制flash与html的通讯,可选的值为:

always //对与html的通讯也就是执行javascript不做任何限制
sameDomain //只允许来自于本域的flash与html通讯,这是默认值
never //绝对禁止flash与页面的通讯

allowNetworking用来控制flash与外部的网络通讯,可选的值为:

all //允许使用所有的网络通讯,也是默认值
internal //flash不能与浏览器通讯如navigateToURL,但是可以调用其他的API
none //禁止任何的网络通讯

在allowNetworking设置为internal时,下面API将会被禁止使用:

fscommand()
navigateToURL()
ExternalInterface.call()

在allowNetworking设置为none时,下面API将会被禁止使用:

sendToURL()
FileReference.download()
FileReference.upload()
Loader.load()
LocalConnection.connect()
LocalConnection.send()
NetConnection.connect()
URLStream.load()
NetStream.play()
Security.loadPolicyFile()
SharedObject.getLocal()
SharedObject.getRemote()
Socket.connect()
Sound.load()
URLLoader.load()
XMLSocket.connect()

在web应用中使用flash的时候一般通过设置这两项即可保证安全性,如果在web应用中使用的flash为用户可控,强烈建议这两项的设置值为

allowScriptAccess=never allowNetworking=none

三、flash安全编程

如果web应用中调用flash时设置的allowScriptAccess为never、allowNetworking为none,即使flash文件 本身存在漏洞也可以忽略。不过事实上大部分web应用不会设置这两项属性,甚至会设置的不安全,比如allowScriptAccess为always、 allowNetworking为all。所以在进行flash开发的时候就要考虑好安全性。

flash编程不安全可导致两方面的漏洞:

1、通过ExternalInterface.call()执行javascript代码
2、通过loadMovie()等方式可以载入外部flash文件执行

这两类问题都是需要通过参数接收外面传入的数据,在flash内部没有对数据进行严格的控制造成的。

例子:

this.movieName = root.loaderInfo.parameters.movieName;
this.flashReady_Callback = "SWFUpload.instances[\"" + this.movieName + "\"].flashReady";
ExternalCall.Simple(this.flashReady_Callback);
public static function Simple(arg0:String){
ExternalInterface.call(arg0);
return;
}

接收到外部传入的movieName没有进行处理,最后通过ExternalInterface.call()进行执行,这样就能够执行任意的javascript代码,如果在调用flash的时候设置的不够安全就是XSS漏洞。

所以在flash编程中如果需要通过参数接收外部传入的数据,一定要对数据进行严格的检查,这样才能保证flash安全性。

参考文档:

Flash应用安全规范 http://www.80sec.com/flash-security-polic.html

flash跨域策略文件crossdomain.xml配置详解http://hi.baidu.com/cncxz/blog/item/7be889fa8f47a20c6c22eb3a.html

Cross-domain Policy File Specificationhttp://www.senocular.com/pub/adobe/crossdomain/policyfiles.html

Flash安全的一些总结的更多相关文章

  1. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  2. 百度 flash html5自切换 多文件异步上传控件webuploader基本用法

    双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...

  3. 解决“chrome提示adobe flash player 已经过期”的小问题

    这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...

  4. 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝

    在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...

  5. [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决

    http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...

  6. 基于Adobe Flash平台的3D页游技术剖析

    写在前面 从黑暗之光,佛本是道,大战神的有插件3D页游.再到如今的魔龙之戒. 足以证明,3D无插件正在引领页游技术的潮流. 目前,要做到3D引擎,有以下几个选择. 说到这里,我们发现.这些都不重要. ...

  7. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  8. MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL

    MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠 ...

  9. 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序

    Nor Flash和Nand Flash的不同: 类型 NOR Flash  Nand Flash  接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...

  10. mtk flash tool,Win7 On VirtualBox

    SP_Flash_Tool_exe_Windows_v5.1624.00.000 Win7 在 VirtualBox, 安裝 mtk flash tool, v5.1628 在燒錄時會 fail. v ...

随机推荐

  1. USACO Section 1.3 Mixing Milk 解题报告

    题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...

  2. 16级第一周寒假作业F题

    Subsequence TimeLimit:1000MS  MemoryLimit:65536K 64-bit integer IO format:%lld Problem Description A ...

  3. thinkphp5.0入口文件

    入口文件 ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的. ...

  4. Keil 二进制数输入宏

    源:http://hi.baidu.com/skystalker/item/e7679cd79c6f751220e250c1?qq-pf-to=pcqq.c2c 在C语言中有十进制,十六进制,八进制; ...

  5. 浅谈Linux集群

      集群听起来好像就是一个很高端很的技术,其实不是的,那么集群其实就是一堆计算机的集合,给用户提供同一个服务的一组计算机,就称之为集群,对于用户而言好像就是一台计算机提供的服务,集群主要分为三大类, ...

  6. 怎样让一个div高度自适应浏览器高度

    原文:http://www.jb51.net/web/79171.html 原文:http://zhidao.baidu.com/link?url=oId1sFRhiBnV37-RmRE6WQNHxi ...

  7. Java设计模式遵循的七大原则

    最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性.设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特 ...

  8. 分治算法(Divide-and-Conquer)和Google的云计算

    1.云计算:涉及到存储.计算.资源的调度和权限的管理等   2.分治算法的原理:           讲一个复杂的问题,分成若干个简单的子问题进行解决,然后对子问题的记过进行合并,得到原有问题的解   ...

  9. 【转】C/CPP之static

    静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...

  10. IOS开发中深拷贝与浅拷贝

    简而言之: 1.对不可变的非集合对象,copy是指针拷贝,mutablecopy是内容拷贝 2.对于可变的非集合对象,copy,mutablecopy都是内容拷贝 3.对不可变的数组.字典.集合等集合 ...