如何安全地嵌入任何flash文件(swf)?

时间:2008-09-04 15:15:24

标签: security flash embed

我想允许我的用户在自己的帖子中嵌入自己的Flash动画。通常,实际文件托管在一些免费的图像托管站点上。除非用户单击一个按钮进行播放(因此在页面加载时不会自动播放),否则我实际上不会加载闪存。我知道人们可以在flash中制作一些非常烦人的垃圾,但我找不到任何有关Flash应用可能对观众造成的潜在严重损害的信息。

从互联网中嵌入任何Flash文件是不安全的吗?如果是这样,我怎样才能让用户嵌入无辜的动画,但仍然保留有害的应用程序?

编辑:

根据我的收集,最明显的威胁是动作脚本将您重定向到恶意网站。

Adob​​e says您可以设置 allowScriptAccess = never allowNetworking = none ,并且swf应该无权访问任何其他内容。 这会解决我的所有问题吗?

6 个答案:

答案 0 :(得分:3)

Flash有一些简洁的安全措​​施。允许用户将swf上传到您的网站并嵌入它们是不安全的,您基本上是在为XSS攻击做好准备。

但是,允许它们进行热链接应该不是问题。 swf将被锁定到托管它的域,并且不允许在该空间之外调用url。

它仍将对“邪恶链接”开放(我确信这对他们来说是正确的词),并且我的意思是定期链接到yoursite.com/admin/deleteallpages.php,它试图加载“就像“你。然而,它不能以任何方式使用这些数据,它基本上与普通链接相同,我猜现代cms'受到保护,不受此类攻击。

您可以通过在不同的子域上托管闪存来获得相同的保护,因为Flash认为这与完全不同的域相同。

答案 1 :(得分:3)

当嵌入来自未知来源的SWF时,最好在Loader上抛出一个掩码,以便加载的SWF不会占用比预期更多的屏幕空间。

伪代码:

var maskSpr : Sprite = new Sprite();
maskSpr.graphics.beginFill();
maskSpr.graphics.drawRect(0,0,safeWidth,safeHeight);
maskSpr.graphics.endFill();
myLdr.mask = maskSpr;

答案 2 :(得分:2)

实际上有多个选项。

为了完全安全,设置allowScriptAccess = never和allowNetworking = none,swf将无法访问自身之外的任何内容。

注意:allowNetworking仅适用于Flash Player 9(它是为响应各种myspace蠕虫而创建的),因此您需要使用SWF Object来确保只有具有正确Flash播放器版本或更高版本的用户才能使用闪光装载。

但是,如果要启用youtube视频等内容,则无法将allowNetworking设置为“none”。幸运的是,这个领域有一个中级安全级别 - “内部”,它允许SWF与其托管域进行通信。

另请注意,您最好不要在自己的网站上使用crossdomain.xml文件 - 详细了解这些危险here和其他地方。

以下是其他答案中提到的更详细的其他网站:

http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_04.html

http://blogs.adobe.com/stateofsecurity/2007/07/how_to_restrict_swf_content_fr_1.html

答案 3 :(得分:1)

作为example Drupal has a scenario如何允许用户使用Flash内容可能是一个安全问题。

答案 4 :(得分:1)

Adob​​e说您可以设置 allowScriptAccess = never和 allowNetworking = none,并且swf应该无法访问自身以外的任何内容。尽管allowNetworking仅适用于Flash Player 9,但使用早期版本Flash的用户仍然会受到一些攻击。

Creating more secure SWF web applications : Security Controls Within the HTML Code

How to restrict SWF content from HTML

答案 5 :(得分:0)

是的,这是不安全的。

没有简单的方法允许它。您可以拥有允许YouTube,Hulu等通过的域名白名单,但白名单本身也很费劲 - 您将不断更新。