论Flash动态站的安全性
最近准备用Flash和ASP写一个动态网站,所以一有时间就往西单图书大厦跑,看了很多AS和ASP方面的书,学到了不少相关知识,领略了很多新奇的想法和创意,看到了很多或豪华庞杂或简约明快的整站风格,也从中发现了不少值得拿出来聊聊的问题。
本人是从Flash4玩到Flash8的,可以说是看着Flash长大的(呵呵,别扔西红柿)。随着版本的更新,Flash变得越来越漂亮,组件越来越丰富;最重要的是,AS2.0使得Flash不再是华而不实的花瓶了,其强大的交互能力被广泛地应用于课件演示、桌面游戏开发等诸多领域。照这么发展下去,估计不久的将来,我们就可以用Flash开发软件了,从这个方面也可以看出Macromedia的野心不小啊,但那毕竟是将来的事情,不过用Flash作Web开发的平台却是绰绰有余了。
废话少说,先来了解一下Flash动态站是如何实现的吧。从图1可以看出,Flash动态站相比传统动态站的不同之处就在于多了用于呈递请求和返回结果的SWF,以及SWF和ASP之间的信息传递过程。而问题就可能出在这里,因为AS中读取外部变量的方法是通过loadVariables函数实现的,其格式为loadVariables(“URL”,level/”target”[,variabes])。具体到动态网站,loadVariables可能这样写:loadVariables(
http://www.target.com/aaa/asp?name=kubau0,””,”post”),而aaa.asp返回的信息可能是这样的:type=genius。
也就是说,AS是向ASP要了一个变量;而ASP根据SWF传来的参数在服务器上查询数据库,以variety=value的形式返回给SWF,并不真正打开目标ASP。通过ASP向数据库写入记录也是同样道理,只是目标ASP将处理结果写入数据库,而不向SWF返回信息(这话不绝对,也许会返回写入成功或失败的信息)。
我们大体明白动态Flash网站是怎么回事了,也就很容易推出哪个环节容易出现问题了。ASP和数据库之间的问题是服务器的事情,本文不予讨论,只说说SWF和ASP之间可能出现的问题。
首先,传统动态网站的ASP和Flash动态网站的SWF都是交互过程中直接面对用户的环节,但是SWF和ASP不同,ASP是在服务器上运行并返回HTML,SWF可是要下载到Local Settings\Temporary Internet Files文件夹中的,所以很容易暴露AS源码,而使网站结构变得一览无余,所以对SWF进行加密就是必须的了,下面介绍几种简单有效的保护方法。
第一种方法就是在用Macromedia Flash导出SWF时,勾选“防止导入”一项,这样他人试图用Flash导入你的SWF时就会要求输入密码,所以着重提醒一点,千万不要用测试影片时导出的临时文件做最终的站点文件。
第二种方法就是用第三方软件对AS进行加密,不过说实话,我没有找到很好用的工具,手里的加密工具都不太好用,防不住反编译软件的折磨。
其实有时不用得到源代码也可以通过Flash Player本身的播放命令(前进和后退)使AS中的跳转命令失效,为了防止这种情况的发生,我们可以加入fscommand(“showmeu”,false)命令屏蔽右键菜单。不过我更习惯把影片拖到一个main组件中,再在主场景中拖入其实例,这样,主场景中只有一层,层中只有一帧,播放器命令自然就失效了。
这样基本上可以防住一般的Cracker对SWF文件的拆解了,但别以为如此这般就是安全的了,真被拆了也没辙,仅在此提几点建议吧。
1)使用loadVarisbles函数时千万不要在URL中使用“&”构成形如
http://www.target.com/aaa.asp?name=kubau0&QQnumber=307906490的Get方式查询的URL,这样只要用Winsock Expert探到URL,所有变量和变量值就一览无余了。
2)ASP回显结果时可加入一些干扰信息,还可以暂时改变变量命名习惯,不要使用可以顾名思义的变量名,如level=admin等。
3)能够外部调用的(如图片、声音、视频等)推荐采用外部调用的方法,这样不仅可以使整站访问速度加快,对资源的安全也是一种保护。
4)推荐使用Post方式提交到网站绝对路径,并且对参数来源进行验证,因为本地SWF是不支持Post提交的,使用绝对路径和验证参数来源可以避免相对路径下的验证文件被伪造的问题。